⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad.lst

📁 silicon lab 单片机 C8051F320的ADC控制程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 188   1                                             // 12MHz / 1
 189   1         RSTSRC = 0x04;                      // enable missing clock detector
 190   1      }
 191          
 192          //-----------------------------------------------------------------------------
 193          // PORT_Init
 194          //-----------------------------------------------------------------------------
 195          //
 196          // Return Value:  None
 197          // Parameters:    None
 198          //
 199          // Configure the Crossbar and GPIO ports.
 200          // P0.4 - UART TX (push-pull)
 201          // P0.5 - UART RX 
 202          // P2.4 - ADC0 analog input
 203          // P2.2 - LED (push-pull)
 204          // 
 205          //-----------------------------------------------------------------------------
 206          
 207          void PORT_Init (void)
 208          {
 209   1         XBR0     = 0x01;                    // Enable UART0
 210   1         XBR1     = 0x40;                    // Enable crossbar and weak pull-ups
 211   1         P0MDOUT |= 0x10;                    // Set TX pin to push-pull
 212   1         P2MDOUT |= 0x04;                    // enable LED as a push-pull output
 213   1         P2MDIN &= ~0x10;                    // set P2.2 as an analog input
 214   1      }
 215          
 216          //-----------------------------------------------------------------------------
 217          // Timer2_Init
 218          //-----------------------------------------------------------------------------
 219          //
 220          // Return Value:  None
 221          // Parameters:    None
 222          //
 223          // Configure Timer2 to 16-bit auto-reload and generate an interrupt at 100uS 
 224          // intervals.  Timer 2 overflow automatically triggers ADC0 conversion.
 225          // 
 226          //-----------------------------------------------------------------------------
 227          
 228          void Timer2_Init (void)
 229          {
 230   1         TMR2CN  = 0x00;                     // Stop Timer2; Clear TF2;
 231   1                                             // use SYSCLK as timebase, 16-bit 
 232   1                                             // auto-reload
 233   1         CKCON  |= 0x10;                     // select SYSCLK for timer 2 source
 234   1         TMR2RL  = 65535 - (SYSCLK / 10000); // init reload value for 10uS
 235   1         TMR2    = 0xffff;                   // set to reload immediately
 236   1         TR2     = 1;                        // start Timer2
 237   1      }
 238          
 239          //-----------------------------------------------------------------------------
 240          // ADC0_Init
 241          //-----------------------------------------------------------------------------
C51 COMPILER V8.16   AD                                                                    11/12/2008 21:50:52 PAGE 5   

 242          //
 243          // Return Value:  None
 244          // Parameters:    None
 245          //
 246          // Configures ADC0 to make single-ended analog measurements on pin P2.4
 247          //  
 248          //-----------------------------------------------------------------------------
 249          
 250          void ADC0_Init (void)
 251          {
 252   1      
 253   1         AD0EN = 0;                      // ADC0 disabled, normal tracking, 
 254   1                                             // conversion triggered on TMR2 overflow
 255   1      
 256   1         REF0CN = 0x03;                      // Enable on-chip VREF and buffer
 257   1      
 258   1         AMX0P |= 0x1e;                       // ADC0 positive input = P2.4
 259   1         AMX0N |= 0x1F;                       // ADC0 negative input = GND
 260   1                                             // i.e., single ended mode
 261   1      
 262   1         ADC0CF = ((SYSCLK/3000000)-1)<<3;   // set SAR clock to 3MHz
 263   1      
 264   1         ADC0CF |= 0x00;                     // right-justify results 
 265   1      
 266   1         //EIE1 |= 0x08;                       // enable ADC0 conversion complete int.
 267   1      
 268   1         //AD0EN = 1;                          // enable ADC0
 269   1      }
 270          
 271          void ADC0_Conver(void)
 272          {
 273   1              AD0EN = 1;                          // enable ADC0
 274   1              if(!AD0INT);
 275   1      }
 276          //-----------------------------------------------------------------------------
 277          // UART0_Init
 278          //-----------------------------------------------------------------------------
 279          //
 280          // Return Value:  None
 281          // Parameters:    None
 282          //
 283          // Configure the UART0 using Timer1, for <BAUDRATE> and 8-N-1.
 284          //
 285          //-----------------------------------------------------------------------------
 286          
 287          void UART0_Init (void)
 288          {
 289   1         SCON0 = 0x10;                       // SCON0: 8-bit variable bit rate
 290   1                                             //        level of STOP bit is ignored
 291   1                                             //        RX enabled
 292   1                                             //        ninth bits are zeros
 293   1                                             //        clear RI0 and TI0 bits
 294   1         if (SYSCLK/BAUDRATE/2/256 < 1) {
 295   2            TH1 = -(SYSCLK/BAUDRATE/2);
 296   2            CKCON |=  0x08;                  // T1M = 1; SCA1:0 = xx
 297   2         } else if (SYSCLK/BAUDRATE/2/256 < 4) {
 298   2            TH1 = -(SYSCLK/BAUDRATE/2/4);
 299   2            CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01
 300   2            CKCON |=  0x01;
 301   2         } else if (SYSCLK/BAUDRATE/2/256 < 12) {
 302   2            TH1 = -(SYSCLK/BAUDRATE/2/12);
 303   2            CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
C51 COMPILER V8.16   AD                                                                    11/12/2008 21:50:52 PAGE 6   

 304   2         } else if (SYSCLK/BAUDRATE/2/256 < 48) {
 305   2            TH1 = -(SYSCLK/BAUDRATE/2/48);
 306   2            CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
 307   2            CKCON |=  0x02;
 308   2         } else {
 309   2            while (1);                       // Error.  Unsupported baud rate
 310   2         }
 311   1      
 312   1         TL1 = TH1;                          // init Timer1
 313   1         TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
 314   1         TMOD |=  0x20;
 315   1         TR1 = 1;                            // START Timer1
 316   1         TI0 = 1;                            // Indicate TX0 ready
 317   1      }
 318          
 319          //-----------------------------------------------------------------------------
 320          // Interrupt Service Routines
 321          //-----------------------------------------------------------------------------
 322          
 323          //-----------------------------------------------------------------------------
 324          // ADC0_ISR
 325          //-----------------------------------------------------------------------------
 326          // 
 327          // This ISR averages 2048 samples then prints the result to the terminal.  The 
 328          // ISR is called after each ADC conversion which is triggered by Timer2.
 329          //
 330          //-----------------------------------------------------------------------------
 331          void ADC0_ISR (void) interrupt 10
 332          {
 333   1      
 334   1         static unsigned long accumulator = 0;     // accumulator for averaging
 335   1         static unsigned int measurements = 2048;  // measurement counter
 336   1         unsigned long result=0;
 337   1         unsigned long mV;                         // measured voltage in mV
 338   1      
 339   1         AD0INT = 0;                               // clear ADC0 conv. complete flag
 340   1      
 341   1         accumulator += ADC0;
 342   1         measurements--;
 343   1      
 344   1         if(measurements == 0)
 345   1         {  
 346   2            measurements = 2048;
 347   2            result = accumulator / 2048;
 348   2            accumulator=0;
 349   2      
 350   2            // The 10-bit ADC value is averaged across 2048 measurements.  
 351   2            // The measured voltage applied to P1.4 is then:
 352   2            //
 353   2            //                           Vref (mV)
 354   2            //   measurement (mV) =   --------------- * result (bits) 
 355   2            //                       (2^10)-1 (bits)
 356   2      
 357   2            mV =  result * 2440 / 1023;   
 358   2            printf("P2.4 voltage: %ld mV\n",mV);
 359   2         }
 360   1      
 361   1         LED = ~LED;
 362   1      }
 363          
 364          
 365          //-----------------------------------------------------------------------------
C51 COMPILER V8.16   AD                                                                    11/12/2008 21:50:52 PAGE 7   

 366          // End Of File
 367          //-----------------------------------------------------------------------------


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    301    ----
   CONSTANT SIZE    =     22    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -