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

📄 rxr_cs.lst

📁 714771878051_MODBUS_RTU.rar
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.06   RXR_CS                                                                06/26/2006 22:51:01 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE RXR_CS
OBJECT MODULE PLACED IN rxr_cs.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE rxr_cs.c ROM(COMPACT) OPTIMIZE(9,SPEED) REGFILE(.\rxr_cs.ORC) BROWSE DEBUG 
                    -OBJECTEXTEND

stmt level    source

   1          #include "STC89C51RC_RD_PLUS.h"
   2          #include "math.h"
   3          #include "intrins.h"
   4          
   5          
   6          #define uchar unsigned char
   7          #define uint unsigned int
   8          #define ulong unsigned long
   9          
  10          extern volatile uchar IN_IO,OUT_IO;   //定义IO输入输出映射
  11          extern void input_io(void);  //输入处理函数
  12          extern void jd_on(uchar x);  //接通继电器函数
  13          extern void jd_off(uchar x); //断开继电器函数
  14          extern uint CRC16(uchar *pushMsg,unsigned short usDataLen);//modbus crc 函数
  15          extern uchar *pushMsg;       /*要进行CRC校验的消息*/
  16          
  17          uchar idata recebuf[16]=0;      //接收数据缓冲区
  18          uchar idata recebuf_com[16]=0;  //接收命令数据缓冲区
  19          uchar idata command_Len=0;      //待处理命令消息字节长度
  20          uchar idata command_ok=0;       //接收到一个命令结束,等待处理时为1;否则为0.
  21          uchar idata sendbuf[16]=0;      //发送数据缓冲区
  22          uchar idata send_Len=1;         //发送数据长度
  23          uchar idata rece_Len=0;         //接收数据长度
  24          
  25          uint  idata ad1,ad2,ad3,ad4;                             //模拟量输入寄存器
  26          uint  idata ad_1[5],ad_2[5],ad_3[5],ad_4[5];   //模拟量滤波器
  27          uchar idata addr;                                       //本机地址
  28          uint  idata crc_z;                                       //crc校验结果
  29          uchar idata timer0_cn=0;
  30          uchar code  check=1;            //奇偶校验。check=0时,偶校验;check=1时;奇校验
  31          uchar idata js_check=0;         //奇偶校验检查位。js_check=1时正确,js_check=2时错误!
  32          
  33          uint TLC2543(uchar prot);//AD转换函数
  34          void group_out_ad(void); //数据上传函数
  35          void group_out_io(void); //数据上传函数
  36          void delay(uchar x);     //短延时函数
  37          void AV_in(void);        //模拟量输入函数
  38          void Serial(void);       //串口配置函数
  39          void chenck_fun(uchar x);//
  40          void command(void);      //接收到的消息命令处理函数
  41          void command_01(void);
  42          void command_02(void);
  43          void command_03(void);
  44          void command_04(void);
  45          void command_05(void);
  46          void command_06(void);
  47          
  48          void  jc(void);
  49          
  50          /*以下定义LED指示状态*/
  51          sbit XJ=P3^7;
  52          sbit RUN=P3^6;
  53          
  54          /*以下定义为TLC2543 SPI口软件模拟及转换表数组*/
C51 COMPILER V7.06   RXR_CS                                                                06/26/2006 22:51:01 PAGE 2   

  55          sbit cs=P3^5;
  56          sbit clk=P3^2;
  57          sbit din=P3^3;
  58          sbit dout=P3^4;
  59          uint code r[8]={128,64,32,16,8,4,2,1};
  60          
  61          /*====延时函数=====*/
  62          void delay(uchar x)
  63               {
  64   1           uchar i;
  65   1           while(x--){for(i=0;i<25;i++);}
  66   1           }
  67          
  68          
  69          /*======================*/
  70          /*======AD转换函数======*/
  71          /*     prot:通道号     */
  72          /*   return:函数返回值 */
  73          /*======================*/
  74          uint TLC2543(uchar prot)
  75               {
  76   1           uchar i;
  77   1               uchar ad_reg;     //通道号寄存器
  78   1           uint rdsh=0,rdsl=0;
  79   1           cs=0;             //使能AD转换
  80   1           ad_reg=prot;      //取通道号
  81   1               ad_reg=ad_reg<<4;
  82   1               /*先写入通道号*/
  83   1           for(i=0;i<8;i++)
  84   1              {
  85   2               din=(bit)(ad_reg&0x80);
  86   2               clk=1;clk=0;
  87   2                       ad_reg=ad_reg<<1;
  88   2              }
  89   1           for(i=0;i<4;i++){din=0;clk=1;clk=0;} //补4个时钟
  90   1           cs=1;delay(1);cs=0;                  //等待转换
  91   1               ad_reg=prot;                         //取通道号
  92   1               ad_reg=ad_reg<<4;
  93   1               /*读AD转换结果*/
  94   1           for(i=0;i<8;i++)
  95   1              {
  96   2                   if(dout==1){rdsh+=r[i];}
  97   2                       din=1;
  98   2               clk=1;clk=0;ad_reg=ad_reg<<1;
  99   2              }
 100   1           for(i=0;i<4;i++)
 101   1                  {
 102   2                      if(dout==1){rdsl+=r[i];}
 103   2                      din=0;
 104   2              clk=1;clk=0;
 105   2                      }
 106   1           cs=1;
 107   1               return((rdsh<<4)+(rdsl>>4));
 108   1           }
 109          /*=========================*/
 110          /*======模拟量输入函数=====*/
 111          /*===4路模拟量读取及滤波===*/
 112          /*=========================*/
 113          void AV_in(void)
 114              {
 115   1              uchar i;
 116   1              uint result;
C51 COMPILER V7.06   RXR_CS                                                                06/26/2006 22:51:01 PAGE 3   

 117   1      
 118   1              for(i=0;i<=3;i++){ad_1[i]=ad_1[i+1];}
 119   1          ad_1[4]=TLC2543(0);
 120   1          result=0;
 121   1              for(i=0;i<=4;i++){result+=ad_1[i];}
 122   1          ad1=(result/5);
 123   1      
 124   1              for(i=0;i<=3;i++){ad_2[i]=ad_2[i+1];}
 125   1          ad_2[4]=TLC2543(1);
 126   1          result=0;
 127   1              for(i=0;i<=4;i++){result+=ad_2[i];}
 128   1          ad2=(result/5);
 129   1              
 130   1              for(i=0;i<=3;i++){ad_3[i]=ad_3[i+1];}
 131   1          ad_3[4]=TLC2543(2);
 132   1          result=0;
 133   1              for(i=0;i<=4;i++){result+=ad_3[i];}
 134   1          ad3=(result/5);
 135   1      
 136   1              for(i=0;i<=3;i++){ad_4[i]=ad_4[i+1];}
 137   1          ad_4[4]=TLC2543(3);
 138   1          result=0;
 139   1              for(i=0;i<=4;i++){result+=ad_4[i];}
 140   1          ad4=(result/5);
 141   1              }
 142          
 143          /*===========================*/
 144          /*=====下位机发送数据函数====*/
 145          /*===========================*/
 146          void group_out_ad(void)
 147               {
 148   1                uchar i;
 149   1            uint k;
 150   1            pushMsg=&sendbuf[0];
 151   1                crc_z=CRC16(pushMsg,send_Len);
 152   1            k=crc_z;
 153   1            sendbuf[send_Len]=(uchar)(crc_z>>8); //+CRC_Hi
 154   1            send_Len++;
 155   1            sendbuf[send_Len]=(uchar)k;   //+CRC_Li
 156   1                EA=0;
 157   1            for(i=0;i<=send_Len;i++)
 158   1                     {
 159   2                 chenck_fun(sendbuf[send_Len]);
 160   2                         SBUF=sendbuf[i];while(!TI);TI=0;
 161   2                         }
 162   1                EA=1;
 163   1            send_Len=send_Len-2; //恢复
 164   1                RUN=1;
 165   1           }
 166          
 167          
 168          /*==============*/
 169          /*==系统主函数==*/
 170          /*==============*/
 171          void main (void)
 172              {
 173   1           AUXR  = 0x01;
 174   1           Serial();
 175   1               IE    =0x92;
 176   1           IP    =0x00;
 177   1               TR0=1;RUN=1;XJ=1;
 178   1               jd_off(0xff);
C51 COMPILER V7.06   RXR_CS                                                                06/26/2006 22:51:01 PAGE 4   

⌨️ 快捷键说明

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