亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? f32x_adc0_externalinput_mux.c

?? 8051 SPI code ans 8051 ADC code
?? C
?? 第 1 頁 / 共 2 頁
字號:
// P0.5 - UART RX
//
// P0.7 - analog (VREF)
//
// P1.0 - analog input (ADC0)
// P1.1 - analog input (ADC0)
// P1.2 - analog input (ADC0)
// P1.3 - analog input (ADC0)
// P1.4 - analog input (ADC0)
// P1.5 - analog input (ADC0)
//
//-----------------------------------------------------------------------------
void Port_Init (void)
{
   P1SKIP = 0x3F;                      // Skip all analog pins

   XBR0 = 0x01;                        // UART0 TX and RX pins enabled
   XBR1 = 0x40;                        // Enable crossbar and weak pull-ups

   P0MDOUT |= 0x10;                    // Enable TX0 as a push-pull output

   P0MDIN &= ~0x80;                    // P0.7 is analog (VREF)

   P1MDIN &= ~0x3F;                    // Set desired pins as analog inputs
}

//-----------------------------------------------------------------------------
// Timer2_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// Configure Timer2 to 16-bit auto-reload and generate an interrupt at 10 us
// intervals.  Timer2 overflows automatically triggers ADC0 conversion.
//
//-----------------------------------------------------------------------------
void Timer2_Init (void)
{
   TMR2CN = 0x00;                      // Stop Timer2; Clear TF2;
                                       // use SYSCLK as timebase, 16-bit
                                       // auto-reload
   CKCON |= 0x10;                      // Select SYSCLK for timer 2 source
   TMR2RL = 65535 - (SYSCLK / 10000);  // Init reload value for 10 us
   TMR2 = 0xffff;                      // Set to reload immediately
   ET2 = 1;                            // Enable Timer2 interrupts
   TR2 = 1;                            // Start Timer2
}

//-----------------------------------------------------------------------------
// ADC0_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// Configures ADC0 to make single-ended analog measurements on Port 1 according
// to the values of <ANALOG_INPUTS> and <PIN_TABLE>.
//
//-----------------------------------------------------------------------------
void ADC0_Init (void)
{
   ADC0CN = 0x02;                      // ADC0 disabled, normal tracking,
                                       // conversion triggered on TMR2 overflow

   REF0CN = 0x03;                      // Enable internal VREF

   AMX0P = PIN_TABLE[0];               // ADC0 initial positive input = P1.0
   AMX0N = 0x1F;                       // ADC0 negative input = GND
                                       // i.e., single ended mode

   ADC0CF = ((SYSCLK/3000000)-1)<<3;   // Set SAR clock to 3MHz

   ADC0CF |= 0x00;                     // Right-justify results

   EIE1 |= 0x08;                       // Enable ADC0 EOC interrupt

   AD0EN = 1;                          // Enable ADC0
}

//-----------------------------------------------------------------------------
// UART0_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   : None
//
// Configure the UART0 using Timer1, for <BAUDRATE> and 8-N-1.
//
//-----------------------------------------------------------------------------
void UART0_Init (void)
{
   SCON0 = 0x10;                       // SCON0: 8-bit variable bit rate
                                       //        level of STOP bit is ignored
                                       //        RX enabled
                                       //        ninth bits are zeros
                                       //        clear RI0 and TI0 bits
   if (SYSCLK/BAUDRATE/2/256 < 1) {
      TH1 = -(SYSCLK/BAUDRATE/2);
      CKCON |=  0x08;                  // T1M = 1; SCA1:0 = xx
   } else if (SYSCLK/BAUDRATE/2/256 < 4) {
      TH1 = -(SYSCLK/BAUDRATE/2/4);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01
      CKCON |=  0x01;
   } else if (SYSCLK/BAUDRATE/2/256 < 12) {
      TH1 = -(SYSCLK/BAUDRATE/2/12);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
   } else if (SYSCLK/BAUDRATE/2/256 < 48) {
      TH1 = -(SYSCLK/BAUDRATE/2/48);
      CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
      CKCON |=  0x02;
   } else {
      while (1);                       // Error.  Unsupported baud rate
   }

   TL1 = TH1;                          // Init Timer1
   TMOD &= ~0xF0;                      // TMOD: timer 1 in 8-bit autoreload
   TMOD |=  0x20;
   TR1 = 1;                            // START Timer1
   TI0 = 1;                            // Indicate TX0 ready
}

//-----------------------------------------------------------------------------
// Interrupt Service Routines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Timer2_ISR
//-----------------------------------------------------------------------------
//
// This routine changes to the next Analog MUX input whenever Timer2 overflows
// for the next ADC sample.  This allows the ADC to begin setting on the new
// input while converting the old input.
//
void Timer2_ISR (void) interrupt 5
{
   TF2H = 0;                           // Clear Timer2 interrupt flag

   // Set up the AMUX for the next ADC input
   // ADC0 positive input = P1.<PIN_TABLE[AMUX_INPUT+1]>
   // ADC0 negative input = GND
   // i.e., single ended mode
   if (AMUX_INPUT == (ANALOG_INPUTS - 1))
   {
      AMX0P = PIN_TABLE[0];
   }
   else
   {
      AMX0P = PIN_TABLE[AMUX_INPUT+1];
   }
}

//-----------------------------------------------------------------------------
// ADC0_ISR
//-----------------------------------------------------------------------------
//
// This ISR averages <INT_DEC> samples for each analog MUX input then prints
// the results to the terminal.  The ISR is called after each ADC conversion,
// which is triggered by Timer2.
//
//-----------------------------------------------------------------------------
void ADC0_ISR (void) interrupt 10
{
   static unsigned int_dec = INT_DEC;  // Integrate/decimate counter
                                       // A new result is posted when
                                       // int_dec is 0

   // Integrate accumulator for the ADC samples from input pins
   static long accumulator[ANALOG_INPUTS] = 0x00000000;

   unsigned char i;                    // Loop counter


   AD0INT = 0;                         // Clear ADC conversion complete
                                       // overflow


   accumulator[AMUX_INPUT] += ADC0;    // Read the ADC value and add it to the
                                       // running total

   // Reset sample counter <int_dec> and <AMUX_INPUT> if the final input was
   // just read
   if(AMUX_INPUT == (ANALOG_INPUTS - 1))
   {
      int_dec--;                       // Update decimation counter
                                       // when the last of the analog inputs
                                       // is sampled

      if (int_dec == 0)                // If zero, then post the averaged
      {                                // results
         int_dec = INT_DEC;            // Reset counter

         // Copy each averaged ADC0 value into the RESULT array
         for(i = 0; i < ANALOG_INPUTS; i++)
         {
            // Copy averaged values into RESULT
            RESULT[i] = accumulator[i] / int_dec;

            // Reset accumulators
            accumulator[i] = 0x00000000;
         }
      }

      AMUX_INPUT = 0;                  // Reset input index back to P1.0
   }
   // Otherwise, increment the AMUX channel counter
   else
   {
      AMUX_INPUT++;                    // Step to the next analog mux input
   }
}

//-----------------------------------------------------------------------------
// Support Subroutines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Timer0_Init
//-----------------------------------------------------------------------------
//
// Return Value : None
// Parameters   :
//   1) int ms - number of milliseconds to wait
//                        range is positive range of an int: 0 to 32767
//
// This function configures the Timer0 as a 16-bit timer, interrupt enabled.
// Using the internal osc. at 12MHz with a prescaler of 1:8 and reloading the
// T0 registers with TIMER0_RELOAD_HIGH/LOW, it will wait for <ms>
// milliseconds.
// Note: The Timer0 uses a 1:12 prescaler
//-----------------------------------------------------------------------------
void Timer0_wait(int ms)
{
   TH0 = TIMER0_RELOAD_HIGH;           // Init Timer0 High register
   TL0 = TIMER0_RELOAD_LOW ;           // Init Timer0 Low register
   TMOD |= 0x01;                       // Timer0 in 16-bit mode
   CKCON &= 0xFC;                      // Timer0 uses a 1:12 prescaler
   TR0  = 1;                           // Timer0 ON

   while(ms)
   {
      TF0 = 0;                         // Clear flag to initialize
      while(!TF0);                     // Wait until timer overflows
      ms--;                            // Decrement ms
   }

   TR0 = 0;                            // Timer0 OFF
}

//-----------------------------------------------------------------------------
// End Of File
//-----------------------------------------------------------------------------

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合在线电影| 久久色成人在线| 亚洲小少妇裸体bbw| 欧洲激情一区二区| 日韩电影在线观看一区| 欧美一区二区三区免费在线看| 日韩和欧美一区二区三区| 91精品国产aⅴ一区二区| 精品中文字幕一区二区| 国产日产亚洲精品系列| 91香蕉视频黄| 日韩高清在线观看| 精品不卡在线视频| 99麻豆久久久国产精品免费优播| 亚洲免费观看视频| 欧美一区二区成人| 成人一区二区三区| 亚洲国产日日夜夜| 精品区一区二区| 99re这里都是精品| 亚洲成人7777| 26uuu久久天堂性欧美| 97久久超碰精品国产| 日韩精品福利网| 欧美韩国一区二区| 欧美日韩一本到| 成人av在线播放网址| 午夜国产不卡在线观看视频| 久久网这里都是精品| 日本精品一级二级| 久久不见久久见中文字幕免费| 国产精品麻豆网站| 日韩欧美综合在线| 欧洲精品在线观看| 大白屁股一区二区视频| 日韩vs国产vs欧美| 综合色中文字幕| 26uuu亚洲综合色欧美 | 精品国产精品网麻豆系列| 岛国av在线一区| 亚洲成人动漫一区| 亚洲国产精品黑人久久久| 欧美日韩国产高清一区二区三区 | 亚洲乱码国产乱码精品精可以看 | 亚洲欧洲av另类| 精品久久久久99| 欧美日韩在线观看一区二区| 国产成a人无v码亚洲福利| 日韩专区欧美专区| 亚洲美女免费视频| 国产欧美一区二区精品秋霞影院 | 99精品欧美一区二区三区综合在线| 亚洲va中文字幕| 亚洲三级电影网站| 国产精品色眯眯| 久久久亚洲高清| 日韩欧美综合一区| 欧美一区二区三区色| 欧美老人xxxx18| 欧美专区日韩专区| 91福利在线播放| 91在线看国产| 91在线视频网址| 99re成人在线| 成人av网址在线| 国产精品一二三| 狠狠色丁香婷婷综合久久片| 天堂va蜜桃一区二区三区漫画版| 亚洲主播在线播放| 一区二区三区产品免费精品久久75| 国产精品色呦呦| 中文字幕一区二| 亚洲欧美视频在线观看| 国产精品高清亚洲| 中文字幕精品一区| 国产精品久久久久影院色老大| 久久人人97超碰com| 国产亚洲精品7777| 精品福利视频一区二区三区| 欧美videossexotv100| 日韩视频一区二区| 久久婷婷成人综合色| 久久日韩精品一区二区五区| 久久久久久久性| 日本一区免费视频| 18成人在线观看| 一区二区三区影院| 三级一区在线视频先锋| 日本91福利区| 国产精品2024| 高清beeg欧美| 色诱视频网站一区| 欧美日韩另类国产亚洲欧美一级| 欧美日韩高清一区| 日韩欧美亚洲一区二区| www欧美成人18+| 国产精品久久久久精k8| 亚洲精品日日夜夜| 日欧美一区二区| 国产乱码精品一区二区三区忘忧草| 国产·精品毛片| 91高清视频在线| 精品少妇一区二区三区在线播放| 久久综合国产精品| 亚洲欧美一区二区在线观看| 一区二区三区不卡视频在线观看| 蜜桃一区二区三区在线观看| 国产精品综合二区| 色乱码一区二区三区88| 4hu四虎永久在线影院成人| 国产亚洲人成网站| 一区二区三区不卡视频| 久久精品国产999大香线蕉| 成人av电影免费在线播放| 欧美日韩精品一区二区在线播放| 欧美mv和日韩mv的网站| 亚洲精品国产精品乱码不99| 日本中文字幕一区| 97se亚洲国产综合在线| 日韩视频一区二区三区| 亚洲欧美视频一区| 国内不卡的二区三区中文字幕| 91亚洲精品一区二区乱码| 欧美本精品男人aⅴ天堂| 夜夜亚洲天天久久| 国产精品影视在线| 欧美精品高清视频| 国产精品乱码一区二区三区软件| 午夜电影一区二区| 色狠狠一区二区三区香蕉| 久久蜜桃一区二区| 香港成人在线视频| 91在线精品一区二区三区| 2023国产精品自拍| 舔着乳尖日韩一区| 99re这里只有精品首页| 久久久蜜桃精品| 日韩中文字幕1| 在线观看国产日韩| 国产精品色在线| 国产精品一区二区在线观看网站| 欧美三级资源在线| 亚洲天堂网中文字| 国产成人午夜电影网| 日韩写真欧美这视频| 亚洲国产精品久久久久秋霞影院 | 成人一区二区三区视频在线观看| 欧美一区二区三区性视频| 一区二区三区丝袜| 成人av在线观| 欧美韩国日本一区| 国产成人av影院| 欧美电影免费观看高清完整版| 亚洲一区二区黄色| 在线观看免费成人| 亚洲在线免费播放| 色网站国产精品| 自拍偷自拍亚洲精品播放| 成人免费视频网站在线观看| 久久精品一区二区| 国产精品系列在线观看| 337p日本欧洲亚洲大胆精品| 久久狠狠亚洲综合| 欧美va亚洲va| 国产一区二区视频在线播放| 欧美电影免费提供在线观看| 首页欧美精品中文字幕| 欧美日韩国产高清一区二区 | 国产精品一级片在线观看| 欧美电影免费观看高清完整版在 | 精品粉嫩aⅴ一区二区三区四区| 秋霞成人午夜伦在线观看| 4438成人网| 麻豆精品视频在线| 26uuu精品一区二区| 国产ts人妖一区二区| 欧美激情自拍偷拍| 99精品欧美一区二区三区小说 | 欧美激情综合网| 91小视频在线| 亚洲va天堂va国产va久| 91精品国产综合久久精品麻豆| 蜜桃免费网站一区二区三区| 日韩精品一区二区三区视频在线观看| 久久av中文字幕片| 国产婷婷一区二区| 99国产精品久久久久久久久久久| 亚洲精品va在线观看| 91精品黄色片免费大全| 黄一区二区三区| 亚洲免费观看视频| 欧美一区二区视频网站| 国产91精品露脸国语对白| 夜夜亚洲天天久久| 欧美成人a在线| 91一区在线观看| 开心九九激情九九欧美日韩精美视频电影 | 悠悠色在线精品| 欧美一区午夜视频在线观看| 国产一区二区在线影院|