sendtext.lst

来自「KEIL C编译 到位监控程序」· LST 代码 · 共 155 行

LST
155
字号
C51 COMPILER V7.20   SENDTEXT                                                              10/13/2008 13:13:44 PAGE 1   


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

line level    source

   1          //报文处理
   2          #include "AT89X51.h"
   3          #include "main.h"
   4          #include <intrins.h>
   5          #include <absacc.h>
   6          #define  uchar unsigned char
   7          #define  uint unsigned int
   8          //
   9          extern bit timerHap;    //定时器到时
  10          //输出数组
  11          extern uchar ACK_BUF[LENMAX];                //Command in length=3 数据(命令) 接收 缓冲区
  12          extern uchar DLE_BUF[DLELENMAX];               //state out length=3  数据(状态) 发送 缓冲区
  13          extern uchar    IN_LENGTH;                   //接收字符个数统计变量
  14          extern uchar CMDIN[LENMAX];                //Command in length=3 数据(命令) 接收 缓冲区
  15          extern bit      RECE_flag;               //接收标志位(1=成功接收)
  16          
  17          
  18          //校验和
  19          uchar checksum(uchar *ACK_BUF,uchar length)
  20          {
  21   1         uchar i;
  22   1         uint sum=0;
  23   1      
  24   1         for(i=0;i<length;i++)
  25   1            {
  26   2             sum=sum+ACK_BUF[i];
  27   2            }
  28   1         i=sum%256;
  29   1      
  30   1         return i;
  31   1      }
  32          
  33          //函数加入DLE
  34          uchar ADD_DLE_BUF(uchar *ACK_BUF,uchar length)
  35          {
  36   1      uchar i,j=1;
  37   1      uchar ACKBUFF[LENMAX];
  38   1      //
  39   1      ACKBUFF[0]=length;
  40   1      //
  41   1      ACK_BUF[length]=checksum(ACK_BUF,length);
  42   1      //
  43   1      for(i=0;i<(length+1);i++)
  44   1      {ACKBUFF[i+1]=ACK_BUF[i];}
  45   1      //
  46   1      for(i=0;i<(length+2);)//
  47   1      {
  48   2        if(ACKBUFF[i]==0x02 || ACKBUFF[i]==0x03 || ACKBUFF[i]==0x10)
  49   2          {
  50   3           DLE_BUF[j]=0x10;
  51   3               j=j+1;
  52   3           DLE_BUF[j]=ACKBUFF[i];
  53   3          }
  54   2        else
  55   2          { DLE_BUF[j]=ACKBUFF[i]; }
C51 COMPILER V7.20   SENDTEXT                                                              10/13/2008 13:13:44 PAGE 2   

  56   2       i++;j++;
  57   2      }
  58   1      DLE_BUF[0]=STX;
  59   1      //j=j+1; 不用了
  60   1      DLE_BUF[j]=ETX;
  61   1      return (j+1);
  62   1      }
  63          
  64          //发送报文//ACK_BUF=响应报文
  65          void sendtext(uchar *ACK_BUF,uchar length)
  66          {
  67   1         uchar LastLen;
  68   1      
  69   1         LastLen=ADD_DLE_BUF(ACK_BUF,length);
  70   1         send_string_com(DLE_BUF,LastLen);
  71   1      }
  72          
  73          //接收报文处理
  74          BOOL dealrecetext()
  75          {
  76   1        if(RECE_flag)//一次完整接收了
  77   1          {
  78   2                if(CMDIN[1]!=(IN_LENGTH-4)) 
  79   2                  {ACK_BUF[2]=CE_BADPARAM; return FALSE;}
  80   2      
  81   2                if( CMDIN[IN_LENGTH-2] != checksum(CMDIN+2,(IN_LENGTH-4))) 
  82   2                  {ACK_BUF[2]=CE_CHECKERROR; return FALSE;}
  83   2           // if( CMDIN[2] < 0x20) //loop
  84   2                //  {ACK_BUF[2]=CE_BADREQUEST; return FALSE;}
  85   2      
  86   2                return TRUE;
  87   2          }
  88   1      }
  89          ///////////////////////////////////
  90          void execCommand()
  91          {
  92   1       if(dealrecetext())
  93   1         {
  94   2          switch(CMDIN[2])
  95   2                {
  96   3                         case 0x80://      
  97   3                   REPORT();
  98   3                               break;
  99   3                         
 100   3                         case 0x21://
 101   3                   ReadeBox();
 102   3                               break;
 103   3                        
 104   3                         case 0x22://
 105   3                           DETECT();
 106   3                               break;
 107   3      
 108   3                 case 0x23://
 109   3                           ONOFF24V();
 110   3                               break;
 111   3      
 112   3                         case 0x24://
 113   3                           CONTROL();
 114   3                               break;
 115   3                        
 116   3                         default:
 117   3                               break;
C51 COMPILER V7.20   SENDTEXT                                                              10/13/2008 13:13:44 PAGE 3   

 118   3               }
 119   2         } 
 120   1         else //异常情况
 121   1         {
 122   2                 ACK_BUF[0]=CE_BADPARAM;
 123   2                         ACK_BUF[1]=0x00;
 124   2                         ACK_BUF[3]=0x01;
 125   2                 sendtext(ACK_BUF,4);
 126   2                         } 
 127   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    335    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      22
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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