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 + -
显示快捷键?