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

📄 aad.lst

📁 这是c8051F005的AD转换程序
💻 LST
字号:
C51 COMPILER V8.02   AAD                                                                   03/17/2009 09:25:40 PAGE 1   


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

line level    source

   1          //************************************************************
   2          
   3          //             AD采样程序
   4          
   5          //
   6          
   7          // (1)使用C8051F005芯片
   8          
   9          // (2)外部晶振11.0592MHZ ,使用内部2.4V基准电压
  10          
  11          // (2)单端输入方式,两通道输入ANIO、ANI1,向ADBUSY置1启动AD转换
  12          
  13          // (3)对采样10次在求平均值以减小误差
  14          
  15          // (4)经过处理与实际值相差0~3MV
  16          
  17          //  注:测量参考电压和输入电压为同一表
  18          
  19          //*************************************************************
  20          
  21          #include <c8051f000.h>               
  22          
  23          #include <stdio.h>
  24          
  25           
  26                          
  27          
  28          sfr16 ADC0     = 0xbe;          //AD寄存器地址       
  29          
  30          sfr16 ADC0GT   = 0xc4;                 
  31          
  32          sfr16 ADC0LT   = 0xc6;                 
  33          
  34                                      
  35          
  36          #define SYSCLK       18432000            //系统时钟 频率   
  37          
  38          #define SAMPLE_RATE  50000             
  39          
  40          #define VREF         2.4                //参考电压值
  41          
  42            
  43          
  44          void ADC0_Init (void);                      //AD转换初始化设置函数
  45          
  46          void Timer3_Init (int counts);                        //定时3初始化设置函数
  47          
  48          void ADC0_ISR (void);                      //AD转换中断函数
  49          
  50          void delay (int t);                           //延时程序
  51          
  52          void SYSCLK_Init (void);                    //系统时钟函数
  53          
  54          void WDT_CLOSE(void);                    //关闭看门狗
  55          
C51 COMPILER V8.02   AAD                                                                   03/17/2009 09:25:40 PAGE 2   

  56           
  57          
  58          int result;               //数据存储
  59          
  60          float value;             //存储测量值
  61          
  62          char  flag;             //标志
  63          
  64          //***********************************************************
  65          
  66          //关闭看们狗
  67          
  68          //***********************************************************
  69          
  70          void WDT_CLOSE(void)
  71          
  72          {  EA=0;
  73   1      
  74   1         WDTCN = 0xde;                       
  75   1      
  76   1         WDTCN = 0xad;                     
  77   1      
  78   1         EA=1;
  79   1      
  80   1       }
  81          
  82          //***********************************************************
  83          
  84          //系统时钟设置
  85          
  86          //晶振振荡方式,F>6.7mhz
  87          
  88          //选用外部时钟
  89          
  90          //允许时钟复位
  91          
  92          //************************************************************
  93          
  94          void SYSCLK_Init (void)
  95          
  96          {  int i;
  97   1      
  98   1                                    
  99   1      
 100   1         OSCXCN = 0x67;                     
 101   1      
 102   1         for (i=0; i < 256; i++)  ;           
 103   1      
 104   1         while (!(OSCXCN & 0x80)) ;         //等待外部准备      
 105   1      
 106   1         OSCICN = 0x88;                      
 107   1      
 108   1                                            
 109   1      
 110   1       }
 111          
 112          
 113          
 114          //**********************************************************
 115          
 116          //AD初始化设置
 117          
C51 COMPILER V8.02   AAD                                                                   03/17/2009 09:25:40 PAGE 3   

 118          //AIN0 独立输入
 119          
 120          //使用内部参考电压, PGA= 2,使用4系统时钟
 121          
 122          //转换数据右对齐
 123          
 124          //**********************************************************
 125          
 126          void ADC0_Init (void)
 127          
 128          {
 129   1      
 130   1         ADC0CN = 0x44;                   //右对齐           
 131   1      
 132   1         REF0CN = 0x03;                   //使用内部参考电压              
 133   1      
 134   1                                             
 135   1      
 136   1         AMX0SL = 0x00;                   //AIN0 独立输入
 137   1      
 138   1         AMX0CF = 0x00;    
 139   1      
 140   1                 
 141   1      
 142   1         ADC0CF = 0x20;                   // 4系统时钟     PGA  1       
 143   1      
 144   1      
 145   1      
 146   1         EIE2  |= 0x02;                     // 中断开            
 147   1      
 148   1      }
 149          
 150          //**********************************************
 151          
 152          //AD转换程序
 153          
 154          //**********************************************
 155          
 156          void ADC0_ISR (void) interrupt 15
 157          
 158          {    
 159   1      
 160   1         TMR3CN &=0x20;                   //关定时器3  清除标准位
 161   1      
 162   1         ADCINT = 0x00;                       //清除中断标准位
 163   1      
 164   1         delay (10);                           //延时等待AD转换稳定
 165   1      
 166   1         
 167   1      
 168   1         result = ADC0;                       //数据转存
 169   1      
 170   1         
 171   1      
 172   1         TMR3CN |= 0x04;                    //定时器3开
 173   1      
 174   1         flag = 1;
 175   1      
 176   1        }
 177          
 178          //***********************************************
 179          
C51 COMPILER V8.02   AAD                                                                   03/17/2009 09:25:40 PAGE 4   

 180          //延时子程序
 181          
 182          //***********************************************
 183          
 184          void delay (int t)
 185          
 186          { int i,j;
 187   1      
 188   1           for (i=0;i<t;i++)
 189   1      
 190   1                 for(j=0;j<10;j++) ;
 191   1      
 192   1      }
 193          
 194          //******************************************
 195          
 196          //MAIN
 197          
 198          //******************************************
 199          
 200          void main (void)       
 201          
 202            { int i=0;
 203   1      
 204   1          float voltage=0;
 205   1      
 206   1          WDT_CLOSE();                       //关闭看门狗
 207   1      
 208   1          SYSCLK_Init ( );                      //系统时钟设置
 209   1      
 210   1          Timer3_Init (SYSCLK/SAMPLE_RATE);  //定时器3初始化设置   
 211   1      
 212   1          ADC0_Init ();                         //AD初始化 
 213   1      
 214   1          ADCEN = 1;                          //AD转换允许打开
 215   1      
 216   1          EA = 1;                          
 217   1      
 218   1          flag = 0;
 219   1      
 220   1          while (1)                                //循环
 221   1      
 222   1             {                        
 223   2      
 224   2               while (flag == 1)
 225   2      
 226   2                       { flag = 0;
 227   3      
 228   3                         value = VREF*((float)result/4096.0)/2; //单次测量值
 229   3      
 230   3                   i++;
 231   3      
 232   3                            voltage+=value;          
 233   3      
 234   3                         }
 235   2      
 236   2                     while(i==100)                //测量100次的值求平均值
 237   2      
 238   2                         { i=0;
 239   3      
 240   3                           voltage=(float)voltage/100;
 241   3      
C51 COMPILER V8.02   AAD                                                                   03/17/2009 09:25:40 PAGE 5   

 242   3                              value=0;
 243   3      
 244   3                          }
 245   2      
 246   2               }
 247   1      
 248   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    350    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7       6
   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 + -