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

📄 main.lst

📁 书中详细说明了多路数据采集的方法,以及怎么样用AD来采集数据哟,大家不妨看看嘛,说不定有所帮助哟?
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  03/17/2007 13:52:04 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <c8051f020.h>
   2          #include <stdio.h>
   3          #include "CPU_Init.h"
   4          #include "RS485F.h"
   5          //#include "ADISR.h"
   6          
   7          void UARTRX_Disp(void);//接收数据处理函数
   8          unsigned char Sum_verify(unsigned char verify[],unsigned char ii);//和检验函数
   9          unsigned int PASS_Disp(unsigned int DATA[],unsigned char ii);
  10          
  11          unsigned char  RX[10];//UART0接收数据存放数组
  12          unsigned char  TX[10];
  13          unsigned int xdata AD_data[8][10]; //AD采集数据存储数组 
  14          bit ReceiveBit=0;    //接收完成标志
  15          
  16          void main(void)
  17          {
  18   1          WDTCN = 0xde;   //关闭看门狗
  19   1          WDTCN = 0xad;
  20   1          Init_Device();
  21   1              TX[0]=0x00;
  22   1          TX[1]=0x01;
  23   1          TX[2]=0x05;
  24   1              ADC0CN = 0xc4;
  25   1          TMR3CN |=0x04;//启动定时器3
  26   1          EA=1;
  27   1              while(1)
  28   1              {
  29   2                  if(ReceiveBit==1)//接收到一帧数据
  30   2                      {
  31   3                         ReceiveBit=0; //清除接收完成标志
  32   3                 /*TX[0]=0x00;
  33   3                 TX[1]=0x01;
  34   3                         TX[2]=0x05;
  35   3                         TX[3]=0x01;
  36   3                         TX[4]=0x01;
  37   3                         TX[5]=0x01;
  38   3                         TX[6]=0x02;
  39   3                         TX[7]=0x03;
  40   3                 UART0_TX(TX,8);*/
  41   3                         UARTRX_Disp();//报文数据处理
  42   3                         REN0=1;//重新接收使能
  43   3                      }
  44   2              
  45   2              }
  46   1      }  
  47          
  48          
  49          void AD_ISR(void) interrupt 15
  50          {
  51   1          static unsigned char PASS=0; //通道选择
  52   1          static unsigned char i=0; //通道内数据存储切换
  53   1          unsigned int ii;
  54   1          TMR3CN &=~0x04;//关闭定时器3
  55   1          AD_data[PASS++][i] = ADC0;
C51 COMPILER V7.50   MAIN                                                                  03/17/2007 13:52:04 PAGE 2   

  56   1          if(PASS==0x08)
  57   1              {
  58   2              PASS=0x00;
  59   2                      i++;
  60   2                      if(i==0x0A)
  61   2                          i=0x00;
  62   2              }
  63   1              AMX0SL=PASS;
  64   1          TMR3CN |=0x04;//重新启动定时器3
  65   1      }    
*** WARNING C280 IN LINE 53 OF MAIN.C: 'ii': unreferenced local variable
  66          
  67          
  68          
  69          
  70          
  71          
  72          void UARTRX_Disp(void)
  73          {
  74   1          unsigned char xdata anew_TX[3]={0x00,0x00,0x00};//要求主机重发指令数组
  75   1              unsigned char xdata Verify_data=0;//接收和检验值
  76   1          unsigned int Disp_data;
  77   1          if(RX[1]==0)  //主机要求重发数据
  78   1          {
  79   2              UART0_TX(TX,8);
  80   2          }         
  81   1          else
  82   1          {
  83   2              if(RX[1]==1)
  84   2              {
  85   3                  Verify_data=Sum_verify(RX+3,1);//对接收的数据(一字节通道字节数据)进行和校验
  86   3                  if(Verify_data==RX[4]) //和校验正确,处理AD采集数据并将数据发送给主机
  87   3                  {
  88   4                      EIE2 &= ~0x02; //关闭AD中断
  89   4                      switch(RX[3])
  90   4                                      {
  91   5                                          case 0x00: //发送通道0采集值
  92   5                              Disp_data=PASS_Disp(AD_data[0],10);
  93   5                              TX[3]=RX[3];
  94   5                              TX[4]=Disp_data%100;
  95   5                              TX[5]=(Disp_data/10)%10;
  96   5                              TX[6]=Disp_data%10;
  97   5                              TX[7]=Sum_verify(TX+3,4);
  98   5                              UART0_TX(TX,8);
  99   5                              break;
 100   5                          case 0x01:  //发送通道1采集值
 101   5                              Disp_data=PASS_Disp(AD_data[1],10);
 102   5                              TX[3]=RX[3];
 103   5                              TX[4]=Disp_data%100;
 104   5                              TX[5]=(Disp_data/10)%10;
 105   5                              TX[6]=Disp_data%10;
 106   5                              TX[7]=Sum_verify(TX+3,4);
 107   5                              UART0_TX(TX,8);
 108   5                              break;
 109   5                          case 0x02: //发送通道2采集值
 110   5                              Disp_data=PASS_Disp(AD_data[2],10);
 111   5                              TX[3]=RX[3];
 112   5                              TX[4]=Disp_data%100;
 113   5                              TX[5]=(Disp_data/10)%10;
 114   5                              TX[6]=Disp_data%10;
 115   5                              TX[7]=Sum_verify(TX+3,4);
 116   5                              UART0_TX(TX,8);
C51 COMPILER V7.50   MAIN                                                                  03/17/2007 13:52:04 PAGE 3   

 117   5                              break;
 118   5                          case 0x03: //发送通道3采集值
 119   5                              Disp_data=PASS_Disp(AD_data[3],10);
 120   5                              TX[3]=RX[3];
 121   5                              TX[4]=Disp_data%100;
 122   5                              TX[5]=(Disp_data/10)%10;
 123   5                              TX[6]=Disp_data%10;
 124   5                              TX[7]=Sum_verify(TX+3,4);
 125   5                              UART0_TX(TX,8);
 126   5                              break;
 127   5                         case 0x04: //发送通道4采集值
 128   5                              Disp_data=PASS_Disp(AD_data[4],10);
 129   5                              TX[3]=RX[3];
 130   5                              TX[4]=Disp_data%100;
 131   5                              TX[5]=(Disp_data/10)%10;
 132   5                              TX[6]=Disp_data%10;
 133   5                              TX[7]=Sum_verify(TX+3,4);
 134   5                              UART0_TX(TX,8);
 135   5                              break;
 136   5                         case 0x05: //发送通道5采集值
 137   5                              Disp_data=PASS_Disp(AD_data[5],10);
 138   5                              TX[3]=RX[3];
 139   5                              TX[4]=Disp_data%100;
 140   5                              TX[5]=(Disp_data/10)%10;
 141   5                              TX[6]=Disp_data%10;
 142   5                              TX[7]=Sum_verify(TX+3,4);
 143   5                              UART0_TX(TX,8);
 144   5                              break;
 145   5                         case 0x06: //发送通道6采集值
 146   5                              Disp_data=PASS_Disp(AD_data[6],10);
 147   5                              TX[3]=RX[3];
 148   5                              TX[4]=Disp_data%100;
 149   5                              TX[5]=(Disp_data/10)%10;
 150   5                              TX[6]=Disp_data%10;
 151   5                              TX[7]=Sum_verify(TX+3,4);
 152   5                              UART0_TX(TX,8);
 153   5                              break;
 154   5                         case 0x07: //发送通道7采集值
 155   5                              Disp_data=PASS_Disp(AD_data[7],10);
 156   5                              TX[3]=RX[3];
 157   5                              TX[4]=Disp_data%100;
 158   5                              TX[5]=(Disp_data/10)%10;
 159   5                              TX[6]=Disp_data%10;
 160   5                              TX[7]=Sum_verify(TX+3,4);
 161   5                              UART0_TX(TX,8); 
 162   5                              break;
 163   5                         default: //主机发送通道错误
 164   5                                              UART0_TX(anew_TX,3);//要求主机重发
 165   5                      }
 166   4                              EIE2 |= 0x02;//重新开启AD中断
 167   4                          }
 168   3                      else //和校验错误
 169   3                          {
 170   4                                   UART0_TX(anew_TX,3);//要求主机重发
 171   4                          }
 172   3              }
 173   2              else //命令码错误
 174   2                  {
 175   3                      UART0_TX(anew_TX,3);//要求主机重发
 176   3              }        
 177   2          }                     
 178   1      }
C51 COMPILER V7.50   MAIN                                                                  03/17/2007 13:52:04 PAGE 4   

 179          
 180          //和检验函数
 181          unsigned char Sum_verify(unsigned char verify[],unsigned char ii)
 182          {
 183   1          unsigned char Verify_Sum=0;//和校验值
 184   1              unsigned char i;
 185   1          for(i=0;i<ii;i++)
 186   1              {
 187   2                  Verify_Sum^=verify[i];
 188   2          }
 189   1          return(Verify_Sum);   
 190   1      }
 191          
 192          //数据处理
 193          unsigned int PASS_Disp(unsigned int DATA[],unsigned char ii)
 194          {
 195   1          unsigned int MAX;
 196   1              unsigned int MIN;
 197   1              unsigned int SUM=0;
 198   1              unsigned char i=0;
 199   1          MAX=DATA[0];
 200   1          MIN=DATA[0];
 201   1              for(i=0;i<ii;i++)
 202   1              {
 203   2                 if(DATA[i]>MAX)  
 204   2                 MAX=DATA[i];
 205   2             if(DATA[i]<MIN)
 206   2                 MIN=DATA[i];
 207   2             SUM += DATA[i];
 208   2          }
 209   1          SUM=(SUM-MAX-MIN)>>6;//平均值=(总和-MIN-MAX)/8,参考电压为2.048,
 210   1                                   //AD精度为12位(4096),实际值是测量值的2.5倍
 211   1                                                       //实际电压100倍为: (2094*(X)/4096)*2.5/10;
 212   1              return(SUM);       
 213   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    573    ----
   CONSTANT SIZE    =      3    ----
   XDATA SIZE       =    160       4
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22      16
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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