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

📄 add.lst

📁 这是c8051F005的AD转换程序
💻 LST
字号:
C51 COMPILER V8.02   ADD                                                                   03/31/2009 21:22:05 PAGE 1   


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

line level    source

   1          //************************************************************
   2          
   3          // AD采样程序
   4          
   5          
   6          // (1)使用C8051F005芯片
   7          
   8          // (2)外部晶振11.0592MHZ ,使用内部2.4V基准电压
   9          
  10          // (2)单端输入方式,两通道输入ANIO、ANI1,向ADBUSY置1启动AD转换
  11          
  12          // (3)对采样10次在求平均值以减小误差
  13          
  14          //*************************************************************
  15          
  16          #include <c8051f000.h>               
  17          
  18          #include <stdio.h>
  19          
  20           
  21                                                                                                                    
             -                                                                                
  22          
  23          sfr16 ADC0     = 0xbe;                 
  24          
  25          sfr16 ADC0GT   = 0xc4;                 
  26          
  27          sfr16 ADC0LT   = 0xc6; 
  28          
  29          #define SYSCLK       18432000            //系统时钟 频率   
  30          
  31          void ADC0_Init (void);                      //AD转换初始化设置函数
  32          
  33          void ADC0_ISR (void);                      //AD转换中断函数
  34          
  35          void delay (int t);                           //延时程序
  36          
  37          void SYSCLK_Init (void);                    //系统时钟函数
  38          
  39          void WDT_CLOSE(void);                    //关闭看门狗
  40          
  41          int result; value1,value2;              //数据存储
  42          
  43          char  flag;            //标志
  44          
  45          //***********************************************************
  46          
  47          //关闭看们狗
  48          
  49          //***********************************************************
  50          
  51          void WDT_CLOSE(void)
  52          
  53          {  EA=0;
  54   1      
C51 COMPILER V8.02   ADD                                                                   03/31/2009 21:22:05 PAGE 2   

  55   1         WDTCN = 0xde;                       
  56   1      
  57   1         WDTCN = 0xad;                     
  58   1      
  59   1         EA=1;
  60   1      
  61   1       }
  62          
  63          //***********************************************************
  64          
  65          //系统时钟设置
  66          
  67          //晶振振荡方式,F>6.7mhz
  68          
  69          //选用外部时钟
  70          
  71          //允许时钟复位
  72          
  73          //************************************************************
  74          
  75          void SYSCLK_Init (void)
  76          
  77          {  int i;
  78   1      
  79   1                                    
  80   1      
  81   1         OSCXCN = 0x67;                     
  82   1      
  83   1         for (i=0; i < 256; i++)  ;           
  84   1      
  85   1         while (!(OSCXCN & 0x80)) ;         //等待外部准备      
  86   1      
  87   1         OSCICN = 0x88;                      
  88   1      
  89   1                                            
  90   1      
  91   1       }
  92          
  93          
  94          
  95          //**********************************************************
  96          
  97          //AD初始化设置
  98          
  99          //AIN0 独立输入
 100          
 101          //使用内部参考电压, PGA= 2,使用4系统时钟
 102          
 103          //转换数据右对齐
 104          
 105          //**********************************************************
 106          
 107          void ADC0_Init (void)
 108          
 109          {
 110   1      
 111   1         ADC0CN = 0x40;                   //右对齐           
 112   1      
 113   1         REF0CN = 0x03;                   //使用内部参考电压              
 114   1      
 115   1                                             
 116   1      
C51 COMPILER V8.02   ADD                                                                   03/31/2009 21:22:05 PAGE 3   

 117   1         
 118   1      
 119   1         AMX0CF = 0x00;    
 120   1      
 121   1                 
 122   1      
 123   1         ADC0CF = 0x20;                   // 4系统时钟     PGA  1       
 124   1      
 125   1      
 126   1      
 127   1         EIE2  |= 0x02;                     // 中断开            
 128   1      
 129   1      }
 130          
 131          //**********************************************
 132          
 133          //AD转换程序
 134          
 135          //**********************************************
 136          
 137          void ADC0_ISR (void) 
 138          
 139          {    
 140   1      
 141   1      
 142   1      
 143   1         ADCINT = 0;                       //清除中断标准位
 144   1         
 145   1         EIE2  = 0x02;                       //允许ADC0转换结束中断
 146   1      
 147   1         ADBUSY =1;                        //开始AD转换
 148   1         
 149   1         while(ADCINT == 0)
 150   1      
 151   1         delay (10);                           //延时等待AD转换稳定
 152   1      
 153   1         
 154   1      
 155   1         result = ADC0;                       //数据转存
 156   1      
 157   1         
 158   1         flag = 1;
 159   1      
 160   1        }
 161          
 162          //***********************************************
 163          
 164          //延时子程序
 165          
 166          //***********************************************
 167          
 168          void delay (int t)
 169          
 170          { int i,j;
 171   1      
 172   1           for (i=0;i<t;i++)
 173   1      
 174   1                 for(j=0;j<10;j++) ;
 175   1      
 176   1      }
 177          
 178          //******************************************
C51 COMPILER V8.02   ADD                                                                   03/31/2009 21:22:05 PAGE 4   

 179          
 180          //MAIN
 181          
 182          //******************************************
 183          
 184          void main (void)       
 185          
 186            { int i=0;
 187   1      
 188   1          float voltage1=0 , voltage2=0;
 189   1      
 190   1          WDT_CLOSE();                       //关闭看门狗
 191   1      
 192   1          SYSCLK_Init ( );                      //系统时钟设置
 193   1      
 194   1          
 195   1      
 196   1          ADC0_Init ();                         //AD初始化 
 197   1      
 198   1         
 199   1      
 200   1              ADCEN = 1;                          //AD转换允许打开
 201   1      
 202   1         EA = 1;                          
 203   1      
 204   1          flag = 0;
 205   1      
 206   1          while (1)                                //循环
 207   1      
 208   1             {                        
 209   2       
 210   2               for(i=0;i++;i<9)         
 211   2      
 212   2                         {
 213   3      
 214   3                            AMX0SL = 0x00;                   //AIN0 独立输入
 215   3      
 216   3                    ADC0_ISR () ;                    // AIN0 AD转换开始
 217   3                
 218   3                           while (flag == 1)
 219   3      
 220   3                       { flag = 0;
 221   4      
 222   4                         
 223   4                        value1 += result;        
 224   4      
 225   4                         }
 226   3                                 
 227   3                     }
 228   2      
 229   2                 EIE2 = 0x00;                         //ADC0转换结束中断禁止 
 230   2      
 231   2                 for(i=0;i++;i<9)         
 232   2      
 233   2                         {
 234   3      
 235   3                            AMX0SL = 0x01;                   //AIN1 独立输入
 236   3      
 237   3                    ADC0_ISR () ;                    // AIN1 AD转换开始
 238   3                
 239   3                           while (flag == 1)
 240   3      
C51 COMPILER V8.02   ADD                                                                   03/31/2009 21:22:05 PAGE 5   

 241   3                       { flag = 0;
 242   4      
 243   4                         
 244   4                        value2 += result;        
 245   4      
 246   4                         }
 247   3                                         
 248   3                     }
 249   2      
 250   2                 EIE2  =  0x00;                         //ADC0转换结束中断禁止
 251   2      
 252   2                 while(i==9)                //测量10次的值求平均值
 253   2      
 254   2                         { i=0;
 255   3      
 256   3                           voltage1=(float)value1/10;
 257   3      
 258   3                           value1=0;
 259   3      
 260   3                                               voltage2=(float)value2/10;
 261   3      
 262   3                          }
 263   2             
 264   2               }
 265   1      
 266   1      }


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