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

📄 adc_main.lst

📁 AD转换的一个例子,对初学者很有帮助的一个例子
💻 LST
字号:
C51 COMPILER V7.02b   ADC_MAIN                                                             01/09/2008 18:16:13 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE ADC_MAIN
OBJECT MODULE PLACED IN ADC_Main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ADC_Main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg51.h> 
   2          sfr     ADC_CONTR       =0XC5;//A/D转换控制寄存器?
   3          sfr     AD_DATAH        =0XC6;//A/D转换结果高八位寄存器
   4          sfr     AD_DATAL        =0XBE;//A/D转换结果低二位寄存器
   5          sfr     P1M0            =0X91;//P1口模式寄存器0
   6          sfr     P1M1            =0X92;//P1口模式寄存器1
   7          
   8          unsigned char code MCU_ID = 0x01;//从机模式(现地)机器号,(0x01~0xFF)
   9          unsigned char c[4]; //数组C用来存放主机发来的主机真
  10          unsigned char d[11];//数组D用来存放从机真==
  11          
  12          unsigned int ADC_DATA;
  13          unsigned char b[8];//
  14          //unsigned char k;
  15          //unsigned char MydataL;
  16          //unsigned char MydataH;
  17          
  18          unsigned long ad2;
  19          unsigned long ad1;
  20          
  21          float adcc;
  22          //float sum1=0;
  23          
  24          void Delay_10ms(void);           //延时函数,延时10ms
  25          void Set_ADC_P1_7(void);         //将P1.7设置为适宜A/D转化的模式,高阻输入
  26          void Init_UART(void);            //串口初始化
  27          void ADC(void);                  //A/D采样函数。
  28          void Send_Byte(void);            //向主机发送采样结果
  29          void Send_Char(unsigned char ch);//发送一个字符
  30          void Format_ADC_Data(void);        //模拟电压值转化成从机砧
  31          unsigned char Receive_Char(void);//接受一个字符
  32          
  33          void operation();//将采样得来的数字值按要求处理成实际模拟值
  34          unsigned char code error[4] = {0x10,0x11,0x00,0x21};
  35          
  36          // 函数名称: void main()主函数
  37          void main()
  38          {
  39   1              unsigned char i=0;
  40   1          unsigned int sdlh = 0;//前二个字节的和
  41   1          unsigned char csl = 0; //累加和的低字节
  42   1          unsigned char csh = 0; //累加和的高字节
  43   1      
  44   1      //      MydataL = 0;
  45   1      //      MydataH = 0;
  46   1      
  47   1          Init_UART( );    //串口初始化函数
  48   1          Set_ADC_P1_7( ); //设置P1.0为高阻输入       
  49   1              EA=1;            //开放总允许中断
  50   1      
  51   1              while(1)
  52   1              {
  53   2              for(i = 0;i<4;i++)
  54   2                      c[i] = Receive_Char();   //接受主机命令字
  55   2              sdlh = c[0] + c[1];
C51 COMPILER V7.02b   ADC_MAIN                                                             01/09/2008 18:16:13 PAGE 2   

  56   2              csl = sdlh & 0x00ff;
  57   2              csh = (sdlh & 0xff00)>>4;  
  58   2                      if(csh == c[2] && csl == c[3] && c[0] == 0x10 && c[1]==MCU_ID)//正确接受命令
  59   2                      {
  60   3                              ADC();
  61   3      //            MydataL = ADC_DATA;
  62   3      //            MydataH = ADC_DATA>>8;
  63   3      //                    Send_Char(MydataH);//单测试AD转换数据的高8位
  64   3      //            Send_Char(MydataL);//单测试AD转换数据的低2位
  65   3                      operation();
  66   3                              Format_ADC_Data();
  67   3                              Send_Byte(); 
  68   3                      }
  69   2                      else 
  70   2                  { 
  71   3                              for(i = 0;i<4;i++)
  72   3                              Send_Char(error[i]);// 向主机发送从新发送命令字
  73   3                      }
  74   2              }
  75   1      }
  76          
  77          //---------------------------------------------------------------
  78          // 函数名称: delay10ms(void)
  79          // 函数功能: 延时ms函数
  80          //---------------------------------------------------------------
  81          void Delay_10ms(void) 
  82          { 
  83   1              unsigned char k;
  84   1          for(k=10;k>0;k--);
  85   1      } 
  86          //---------------------------------------------------------------
  87          // 函数名称: set_P1_channel()
  88          // 函数功能: 将P1.0设置为适宜A/D转化的模式,高阻输入
  89          //---------------------------------------------------------------
  90          void Set_ADC_P1_7(void)
  91          {
  92   1              P1 = 0xff;//
  93   1              ADC_CONTR = ADC_CONTR|0x80;
  94   1              Delay_10ms();
  95   1              P1M0 = 0x80;
  96   1              P1M1 = 0x80;
  97   1              ADC_CONTR = ADC_CONTR|0xC7;
  98   1              Delay_10ms();
  99   1      }
 100          
 101          //---------------------------------------------------------------
 102          // 函数名称: initiate_rs()
 103          // 函数功能: 串口初始化,设置定时器1为波特率发生器,且无奇偶校验,
 104          //            系统外部晶振为11.0592,波特率为9600
 105          //---------------------------------------------------------------
 106          void Init_UART(void)
 107          {
 108   1              SCON = 0x50; 
 109   1              TMOD = 0x20;
 110   1              TH1 = 0xfd;
 111   1              TL1 = 0xfd;
 112   1              TR1 = 1;
 113   1              TI = 1;
 114   1              RI = 0;
 115   1      }
 116          
 117          //---------------------------------------------------------------
C51 COMPILER V7.02b   ADC_MAIN                                                             01/09/2008 18:16:13 PAGE 3   

 118          // 函数名称: putch(unsigned char ch)
 119          // 函数功能: 发送一个字符函数
 120          //---------------------------------------------------------------
 121          void Send_Char(unsigned char ch)
 122          {
 123   1              SBUF = ch;
 124   1              TI = 0;
 125   1              while(!TI);
 126   1      }
 127          
 128          //---------------------------------------------------------------
 129          // 函数名称: ad() A/D采样函数
 130          // 函数功能: 从P1.0口采样模拟电压值,连续采样20次在求其平均值,
 131          //            最后为采样结果
 132          //---------------------------------------------------------------
 133          void ADC(void) // A/D采样函数
 134          {
 135   1              unsigned count;  
 136   1          unsigned int sum = 0;
 137   1          unsigned int sum_Temp = 0;
 138   1      
 139   1          unsigned char test;
 140   1      
 141   1          for(count=0;count<20;count++)
 142   1              {       
 143   2                      AD_DATAH=0x00;
 144   2                      AD_DATAL=0X00;
 145   2                      test=0x00;
 146   2      
 147   2                      ADC_CONTR=ADC_CONTR|0x08;//启动AD转换
 148   2              Delay_10ms();
 149   2                      do
 150   2                      {
 151   3                              test=ADC_CONTR&0x10;
 152   3                      }while( test == 0);//等待AD转换结束,否则继续等待
 153   2      
 154   2              ADC_CONTR=ADC_CONTR&0xE7;//清AD标志、启动位,停止AS转换
 155   2      
 156   2                      sum_Temp = AD_DATAH;
 157   2              sum_Temp = (sum_Temp<<2)+AD_DATAL;
 158   2      
 159   2              sum = sum+sum_Temp;
 160   2          }
 161   1          ADC_DATA = sum/20;   
 162   1      }
 163          
 164          //---------------------------------------------------------------
 165          // 函数名称: operation()
 166          // 函数功能: 将采样得来的10位数字值按要求处理成模拟电压值
 167          //---------------------------------------------------------------
 168          void operation(void)
 169          {  
 170   1              int kk = 0;
 171   1          unsigned char i;
 172   1          adcc = ADC_DATA * 0.0048828125;
 173   1          for(i = 0;i < 6;i++)
 174   1              b[i]  = 0;
 175   1          adcc = adcc * 1000000;
 176   1              if(adcc == 0)
 177   1              return;
 178   1              ad2 =(long)adcc;
 179   1          while(ad2 != 0)
C51 COMPILER V7.02b   ADC_MAIN                                                             01/09/2008 18:16:13 PAGE 4   

 180   1              {
 181   2                 b[kk++] = ad2%10;
 182   2                 ad2 = ad2 / 10;
 183   2              }           
 184   1      }
 185          //---------------------------------------------------------------
 186          // 函数名称: unsigned char getch(void)
 187          // 函数功能: 从机接受一个字符。
 188          //---------------------------------------------------------------
 189          unsigned char Receive_Char(void)// 接受一个字符
 190          {
 191   1              while(!RI);
 192   1              RI = 0;
 193   1              return(SBUF);
 194   1      }
 195          
 196          //---------------------------------------------------------------
 197          // 函数名称: send_uart()
 198          // 函数功能: 将采样得来的模拟电压值转化成从机格式
 199          //---------------------------------------------------------------
 200          void Format_ADC_Data(void)
 201          {
 202   1              unsigned int cshcsl;
 203   1              d[0] = 0x10;
 204   1              d[1] = 0x01;
 205   1              d[2] = 0x00;
 206   1              d[3] = 0x00;
 207   1              d[4] = b[6];
 208   1              d[5] = b[5] * 10 + b[4];
 209   1              d[6] = b[3] * 10 + b[2];
 210   1              d[7] = b[1] * 10 + b[0];
 211   1              cshcsl = 0x10 + 0x01 + 0x00 + 0x00 + b[6] + (b[5] * 10 + b[4]) + (b[3] * 10 + b[2]) + (b[1] * 10 + b[0]);
 212   1              d[8] = (cshcsl & 0xff00) >> 4; 
 213   1              d[9] = cshcsl & 0x00ff;    
 214   1      }
 215          
 216          //---------------------------------------------------------------
 217          // 函数名称: send_byte()
 218          // 函数功能: 将从机机桢发送给主机
 219          //---------------------------------------------------------------
 220          void Send_Byte(void)
 221          {
 222   1              unsigned char i;
 223   1              for(i = 0;i < 10;i++)
 224   1              Send_Char(d[i]);           
 225   1      } 
 226          
 227          
 228          
 229          
 230          
 231          
 232          
 233          
 234          
 235          
 236          
 237          
 238          
 239          
 240          
 241          
C51 COMPILER V7.02b   ADC_MAIN                                                             01/09/2008 18:16:13 PAGE 5   

 242          
 243          
 244          
 245          
 246          
 247          
 248          


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