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

📄 ad.lst

📁 这是c8051F005的AD转换程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   AD                                                                    03/23/2009 20:06:28 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE AD
OBJECT MODULE PLACED IN AD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe AD.c DB OE

line level    source

   1          //C8051F005的AD驱动程序(C语言)
   2          //-----------------------------------------------------------------------------
   3          // Includes
   4          //-----------------------------------------------------------------------------
   5          #include<C8051F000.H>
   6          #include<STDIO.H>
   7          
   8          //-----------------------------------------------------------------------------
   9          // Function PROTOTYPES
  10          //-----------------------------------------------------------------------------
  11          #define  uchar unsigned char
  12          #define  uint  unsigned int
  13          void SYSCLK_Init (void);
  14          void delaynus(unsigned int q) ;      //N us延时函数
  15          void PORT_Init (void);
  16          void SPI0_Init (void);
  17          void LCD_Init(void);
  18          void SendSPIByte(unsigned char ch);
  19          void delaynms (unsigned int j);
  20          void writecom(unsigned char com);
  21          void writedata(unsigned char d);
  22          void writechar(unsigned char ua);
  23          void lcd_Net(void);
  24          void Write_COM(uchar ins);
  25          void SendSPIByte(uchar disdata);
  26          void lcden(datad);
  27          void LCD_set_xy( unsigned char x, unsigned char y );
  28          void lcd_xhl(void);
  29          void LCD_write_string(unsigned char n);
  30          void lcd_adc(void);
  31          void UART0_Init (void);
  32          void ADC (void);
  33          sbit lcdcs=P3^0;
  34          //-----------------------------------------------------------------------------
  35          // Global CONSTANTS
  36          //-----------------------------------------------------------------------------
  37          #define BAUDRATE     115200              // Baud rate of UART in bps
  38          #define SYSCLK       11059200          // SYSCLK frequency in Hz
  39          #define SAMPLE_RATE  50000             // Sample frequency in Hz
  40          #define INT_DEC      4096              // integrate and decimate ratio
  41          
  42          sfr16 DP       = 0x82;                 // data pointer
  43          sfr16 TMR3RL   = 0x92;                 // Timer3 reload value
  44          sfr16 TMR3     = 0x94;                 // Timer3 counter
  45          sfr16 ADC0     = 0xbe;                 // ADC0 data
  46          sfr16 ADC0GT   = 0xc4;                 // ADC0 greater than window
  47          sfr16 ADC0LT   = 0xc6;                 // ADC0 less than window
  48          sfr16 RCAP2    = 0xca;                 // Timer2 capture/reload
  49          sfr16 T2       = 0xcc;                 // Timer2
  50          sfr16 DAC0     = 0xd2;                 // DAC0 data
  51          sfr16 DAC1     = 0xd5;                 // DAC1 data
  52          unsigned char xdata      ADC1Data[4];
  53          unsigned  int xdata     ad_arr[50];
  54          unsigned char datad ,comd,kk,sdf,ppca;
  55          unsigned char virt_port,v,b,m;
C51 COMPILER V8.02   AD                                                                    03/23/2009 20:06:28 PAGE 2   

  56          unsigned char lcd_data_count;
  57          unsigned char *lcdpoint;
  58          unsigned char   qqq; 
  59          unsigned char  data8;
  60          unsigned int   i;
  61          unsigned  int         AD_MAXT;
  62          unsigned  int       AD_MINT;
  63          long        AD_VAL,AD_VAL_TEST;
  64          unsigned char YYY;
  65          long result;
  66          long fff;
  67          long  hhh; 
  68          int j,w,z;                   // temperature in hundredths of a
  69          unsigned int  fff_int, fff_frac;  
  70          unsigned char p=0,a=0,s,d,f,g=0; 
  71          //-----------------------------------------------------------------------------
  72          // MAIN Routine
  73          //-----------------------------------------------------------------------------
  74          void main(void){
  75   1        WDTCN = 0xde;                       // disable watchdog timer
  76   1        WDTCN = 0xad;
  77   1              SYSCLK_Init ();
  78   1        PORT_Init ();
  79   1        UART0_Init() ;                      // initialize crossbar and GPIO
  80   1        SPI0_Init ();
  81   1              LCD_Init() ;
  82   1              delaynms(100);
  83   1              Write_COM(0x00);
  84   1              delaynms(100);
  85   1        delaynms(100);
  86   1              Write_COM(0x01);
  87   1              delaynms(100);
  88   1              delaynus (100);
  89   1              LCD_set_xy(0X00,0);
  90   1              delaynus (200);
  91   1              lcd_adc();
  92   1              delaynus (200);
  93   1              LCD_write_string(5);
  94   1              delaynms (100);
  95   1              while (1)
  96   1               { 
  97   2                  delaynms (100);
  98   2                  ADC ();
  99   2                }
 100   1      }
 101          //-----------------------------------------------------------------------------
 102          // Initialization Subroutines
 103          //-----------------------------------------------------------------------------
 104          
 105          //-----------------------------------------------------------------------------
 106          // ADC
 107          //-----------------------------------------------------------------------------
 108          void ADC (void)
 109              {
 110   1       AMX0CF = 0x60; // AMUX Configuration Register
 111   1       AMX0SL = 0x00; // AMUX Channel Select Register
 112   1       ADC0CN = 0x00; // ADC Control Register
 113   1          REF0CN = 0x03;  
 114   1          ADC0CN |= 0x80;
 115   1          AD_VAL=0;
 116   1          AD_VAL_TEST = 0;
 117   1          for( YYY = 0;YYY<50;YYY++)
C51 COMPILER V8.02   AD                                                                    03/23/2009 20:06:28 PAGE 3   

 118   1          {
 119   2          ad_arr[YYY]=0;
 120   2          } 
 121   1          YYY=0; 
 122   1          ADCINT = 0;
 123   1          for(YYY= 0;YYY<50;YYY++)     //AD_TIMES=50  
 124   1          {  
 125   2          ADBUSY = 1;
 126   2          while (!ADCINT);
 127   2        ADCINT = 0; 
 128   2          nop_();
*** WARNING C206 IN LINE 128 OF AD.C: 'nop_': missing function-prototype
 129   2          nop_();
 130   2          nop_();            //*AD_POINTER = ADC0
 131   2          ad_arr[YYY]=ADC0;  
 132   2           }
 133   1          for(YYY=0;YYY<50;YYY++)//  for(i = 0;i     
 134   1              { 
 135   2        AD_VAL_TEST += ad_arr[YYY];
 136   2           }
 137   1        AD_VAL = (int)(AD_VAL_TEST/50);
 138   1        nop_();
 139   1        nop_();
 140   1        nop_();
 141   1        nop_();
 142   1          hhh=AD_VAL*5;
 143   1          hhh=hhh*5;
 144   1          hhh=hhh*100;
 145   1          hhh=hhh/4096;
 146   1          ADC1Data[0]=hhh/1000;        //将A/D转化值存到显示数组
 147   1          ADC1Data[1]=(hhh-1000*ADC1Data[0])/100;
 148   1          ADC1Data[2]=(hhh-1000*ADC1Data[0]-100*ADC1Data[1])/10;
 149   1          ADC1Data[3]=hhh-1000*ADC1Data[0]-100*ADC1Data[1]-10*ADC1Data[2];
 150   1          delaynus (100);
 151   1          LCD_set_xy(0X05,0);
 152   1          delaynus (200);
 153   1          for(qqq=0;qqq<4;qqq++)        
 154   1          { 
 155   2          data8=ADC1Data[qqq];
 156   2          if(data8>=0x0a) data8 += 0x37;    
 157   2          else data8 += 0x30;
 158   2          delaynms (200);
 159   2          writechar(data8);
 160   2           }
 161   1           AD_VAL=0;
 162   1           } 
 163              
 164          //-----------------------------------------------------------------------------
 165          // PORT_Init
 166          //-----------------------------------------------------------------------------
 167          void PORT_Init (void)
 168          {
 169   1           XBR0 = 0x27;                     // XBAR0: Initial Reset Value
 170   1           XBR1 = 0x00;                     // XBAR1: Initial Reset Value
 171   1           XBR2 = 0x5c;                     // XBAR2: Initial Reset Value
 172   1           PRT0CF = 0x14;                      // Output configuration for P0 
 173   1             PRT1CF = 0x10; // Output configuration for P3 
 174   1              PRT3CF = 0x01; // Output configuration for P3 
 175   1      }
 176          //-----------------------------------------------------------------------------
 177          // SYSCLK_Init
 178          //-----------------------------------------------------------------------------
C51 COMPILER V8.02   AD                                                                    03/23/2009 20:06:28 PAGE 4   

 179          void SYSCLK_Init (void)
 180          {
 181   1                                        // delaynms counter
 182   1            OSCXCN = 0x67;                      // start external oscillator with
 183   1            for (i=0; i < 256; i++) ;           // XTLVLD blanking interval (>1ms)
 184   1            while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle
 185   1            OSCICN = 0x88;                      // select external oscillator as SYSCLK                         
             -     
 186   1      }
 187          //-----------------------------------------------------------------------------
 188          // SPI0_Init
 189          //-----------------------------------------------------------------------------
 190          void SPI0_Init (void)
 191          {

⌨️ 快捷键说明

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