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