comm.lst

来自「C8051ucos源码」· LST 代码 · 共 166 行

LST
166
字号
C51 COMPILER V8.02   COMM                                                                  01/09/2009 16:21:06 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE COMM
OBJECT MODULE PLACED IN comm.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE program\comm.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\comm.lst) OBJECT(com
                    -m.obj)

line level    source

   1          
   2          #include "C8051F020.h"                 
   3          #include "CM240128.H"
   4          #include "menu.h"
   5          #include "引导菜单.h"
   6          #include "数据存储.h"
   7          #include "comm.h"
   8          #include "gprs.h"
   9          #include "功能选择菜单.h"
  10          
  11          xdata unsigned char CommIncBuf[260];
  12          idata unsigned char CommIncLen;
  13          /*
  14                  通信帧结构
  15                  BYTE0:帧头(0xda)
  16                  BYTE1:命令字()
  17                  BYTE2:数据长度(0-250) 
  18                  BYTE3-BYTE(3+n-1):数据区(n)
  19                  BYTE3+n:累加和(帧头+命令字+数据长度+数据区)
  20                  
  21          
  22          
  23          
  24          */
  25          //---------------------------------------------------
  26          void CommInit(void)
  27          {
  28   1              CommIncLen=0;
  29   1      }
  30          //---------------------------------------------------
  31          void CommIncept(unsigned char val)
  32          {
  33   1              if((CommIncLen==0)&&(val!=0xda))
  34   1                      return;//判断数据头
  35   1              else
  36   1                      CommIncBuf[CommIncLen++]=val;
  37   1      }
  38          //---------------------------------------------------
  39          void CommIncClr(void)
  40          {
  41   1              ES0=0;
  42   1              CommIncLen=0;
  43   1              ES0=1;
  44   1      }
  45          //---------------------------------------------------
  46          void CommSendPack(unsigned char cmd,unsigned char *pbuf,unsigned char len)
  47          {
  48   1      xdata unsigned char buf[300];
  49   1      unsigned char i,sum;
  50   1      
  51   1              buf[0]=0xda;
  52   1              buf[1]=cmd;
  53   1              buf[2]=len;
  54   1              for(i=3;i<len+3;i++)buf[i] = *pbuf++;
C51 COMPILER V8.02   COMM                                                                  01/09/2009 16:21:06 PAGE 2   

  55   1              sum=0;
  56   1              for(i=0;i<len+3;i++)sum += buf[i];
  57   1              buf[i]=sum;
  58   1              UART0Write(buf,len+4);  
  59   1      }
  60          //---------------------------------------------------
  61          void CommInceptProc(void)
  62          {
  63   1      unsigned char i,sum,len,cmd,j;
  64   1      unsigned char *pbuf;
  65   1      xdata unsigned char buf[300];
  66   1      unsigned int cnt,val;
  67   1      unsigned char *p;
  68   1      
  69   1              if(CommIncLen<4)return;
  70   1              if(CommIncBuf[0]!=0xda){CommIncClr();return;}//头不对
  71   1              len = CommIncBuf[2];
  72   1              if(len>250)
  73   1                      {CommIncClr();return;}//数据区长度错
  74   1              if((len+4)>CommIncLen)
  75   1                      return;//帧没收全
  76   1              sum=0;
  77   1              for(i=0;i<len+3;i++){sum+=CommIncBuf[i];}
  78   1              if(sum != CommIncBuf[i])
  79   1                      {CommIncClr();return;}//校验和错
  80   1              cmd = CommIncBuf[1];
  81   1              pbuf = &CommIncBuf[3];
  82   1      //正确接收
  83   1              if(cmd==1)//查询命令
  84   1              {
  85   2              /*
  86   2                      回应的信息有
  87   2                       2字节机器编号
  88   2                       数据区记录数量
  89   2                       当前日期和时间
  90   2              */
  91   2              cnt = GetDataCount();
  92   2              buf[0]=cnt/256;
  93   2              buf[1]=cnt%256;
  94   2              CommSendPack(2,buf,2);//查询回应 h回应数据区中没读的数据
  95   2              }
  96   1              if(cmd==3)//完成远程控制命令
  97   1              {
  98   2                      CommSendPack(4,0,0);//完成远程控制命令的回应
  99   2                      GPRSEnd();
 100   2                      MENU_Option(0);
 101   2              }
 102   1              if(cmd==5)//读取数据区命令(参数区中有4个字节,每两个字节一组,每组高字节在前,前面的是要读取的位子,后面
             -的是要读取的记录数量(总字节数不能大于250))
 103   1              {
 104   2                      cnt=pbuf[0]*256+pbuf[1];//取得读取的数据长度
 105   2                      if(cnt<=4)
 106   2                      if(GetSendBufCnt()==0)
 107   2                      {
 108   3                              CommSendPack(8,0,0);//没有数据
 109   3                      }
 110   2                      else
 111   2                      {
 112   3                              p=GetDataBuf(0);
 113   3                              for(j=0;j<cnt;j++)
 114   3                              {
 115   4                                      for(i=0;i<sizeof(DataType);i++)
C51 COMPILER V8.02   COMM                                                                  01/09/2009 16:21:06 PAGE 3   

 116   4                                      {
 117   5                                              buf[j*sizeof(DataType)+i]=*p++;
 118   5                                      }
 119   4                              }
 120   3                              CommSendPack(6,buf,cnt*sizeof(DataType));//回应数据区中的数据
 121   3                      }
 122   2              }
 123   1              if(cmd==7)//指针下移命令
 124   1              {
 125   2                      val=pbuf[0]*256+pbuf[1];
 126   2                      if(DataLocAdd(val)!=0)
 127   2                              CommSendPack(9,0,0);//还有数据
 128   2                      else 
 129   2                              CommSendPack(8,0,0);//没有数据
 130   2              }
 131   1              CommIncLen=0;
 132   1      
 133   1      }
 134          //---------------------------------------------------
 135          
 136                  


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    751    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    260     617
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =      1    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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