📄 comm.lst
字号:
C51 COMPILER V7.06 COMM 01/22/2007 09:50:04 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE COMM
OBJECT MODULE PLACED IN .\output\Comm.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Comm.C OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND OBJECT(.\output\Comm.obj
-)
stmt level source
1 /*********************************************************************************************************
2 **相控充电机主控器系统 软件设计:刘宝贵,硬件设计:刘宝贵 调试:刘宝贵
3 **本系统使用编译器为 keil c51.exe V7.06
4 **本系统使用汇编器为 keil A51.exe V7.07
5 **本系统使用联接器为 keil BL51.exe V5.03
6 **本系统使用 RTX_TINY
7 **如果等程序有问题或者是Bug请与作者联系
8 **与作者联系方法:邮箱:baoguiliu@163.com,baoguiliu@sohu.com 电话:0451-6677970-6738
9 **
10 **
11 **VER1.0
12 **--------------文件信息--------------------------------------------------------------------------------
13 **文 件 名: Comm.C
14 **创 建 人: 刘宝贵
15 **最后修改日期:
16 **描 述: 通信处理
17 **
18 **--------------历史版本信息----------------------------------------------------------------------------
19 ** 修改人:
20 ** 版 本:
21 ** 日 期:
22 ** 描 述:
23 **
24 **--------------当前版本修订------------------------------------------------------------------------------
25 ** 修改人:
26 ** 日 期:
27 ** 描 述:
28 **
29 **------------------------------------------------------------------------------------------------------
30 ********************************************************************************************************/
31
32 #include"includes.h"
33 sbit COMMEN = P1^4;
34 #define COMMEN_OFF 1
35 #define COMMEN_ON 0
36
37 #define RIGHT 1 //正常
38 #define CHKSUM_ERROR 2 //CHKSUM 错
39 #define CID_ERROR 3 //CID 无效
40 #define TYPE_ERROR 4 //命令格式错
41 #define DATA_ERROR 5 //无效果数据
42 #define LOGIC_ERROR 6 //逻辑错
43 #define OTHER_ERROR 0XE0 //其他错误
44 uint8 code CommHead[4] = {0xEB,0x90,0xEB,0x90};
45 /*********************************************************************************************************
46 ** 函数名称: comm
47 ** 功能描述: 串口中断处理程序
48 ** 输 入: 无
49 ** 输 出: 无
50 ** 全局变量: 无
51 ** 调用模块: 无
52 **
53 ** 作 者: 刘宝贵
54 ** 日 期: 2004年4月20日
C51 COMPILER V7.06 COMM 01/22/2007 09:50:04 PAGE 2
55 **-------------------------------------------------------------------------------------------------------
56 ** 修改人:
57 ** 日 期:
58 **------------------------------------------------------------------------------------------------------
59 ********************************************************************************************************/
60 void comm(void) interrupt 4
61 {
62 1 if (RI == 1)
63 1 {
64 2 uint8 idata RxSbuf;
65 2 RxSbuf = SBUF;
66 2 RI = 0;
67 2 switch(CommState)
68 2 {
69 3 case 0:
70 3 case 1:
71 3 case 2:
72 3 case 3://接收报文头
73 3 {
74 4 if(RxSbuf == CommHead[CommState])
75 4 {
76 5 CommState++;
77 5 }
78 4 else
79 4 {
80 5 CommState = 0;
81 5 }
82 4 }break;
83 3 case 4://接收地址码
84 3 {
85 4 if(RxSbuf == Address)
86 4 {
87 5 CommState++;
88 5 }
89 4 else
90 4 {
91 5 CommState = 0;
92 5 }
93 4 }break;
94 3 case 5://接收命令码
95 3 {
96 4 CommState++;
97 4 CommCid = RxSbuf;
98 4 }break;
99 3 case 6://接收数据区长度
100 3 {
101 4 CommState++;
102 4 CommRxLength = RxSbuf;
103 4 CommRxPointer = 0;
104 4 if(CommRxLength >= RX_BUF_MAX-1)//如果数据包长度过长则不接收
105 4 {
106 5 CommState = 0;
107 5 }
108 4 if(CommRxLength == 0)
109 4 {
110 5 CommState++;
111 5 }
112 4 }break;
113 3 case 7://接收数据区
114 3 {
115 4 CommRxBuf[CommRxPointer] = RxSbuf;
116 4 CommRxPointer++;
C51 COMPILER V7.06 COMM 01/22/2007 09:50:04 PAGE 3
117 4 if(CommRxPointer == CommRxLength)//数据区接收完,转下一状态
118 4 {
119 5 CommState++;
120 5 }
121 4 }break;
122 3 case 8://接收效验和
123 3 {
124 4 CommChkIn = RxSbuf;
125 4 CommState++;
126 4 }break;
127 3 case 9://接收报文尾
128 3 {
129 4 CommState = 0;
130 4 CommRxBuf[CommRxLength] = RxSbuf;
131 4 CommNewMessage = 1;
132 4 }break;
133 3 }
134 2 }//处理通信接收
135 1 if (TI == 1)
136 1 {
137 2 TI = 0;
138 2 if(CommTxPointer < CommTxLength)
139 2 {
140 3 SBUF = CommTxBuf[CommTxPointer];
141 3 CommTxPointer++;
142 3 }
143 2 else
144 2 {
145 3 COMMEN = COMMEN_OFF;
146 3 }
147 2 CommNewMessage = 0;
148 2 }
149 1 }
150 /*********************************************************************************************************
151 ** 函数名称: PutChar
152 ** 功能描述: 发送一个字节到串口缓冲区
153 ** 输 入: Data:发送的数据
154 ** 输 出: 无
155 ** 全局变量: 无
156 ** 调用模块: 无
157 **
158 ** 作 者: 刘宝贵
159 ** 日 期: 2006年4月26日
160 **-------------------------------------------------------------------------------------------------------
161 ** 修改人:
162 ** 日 期:
163 **------------------------------------------------------------------------------------------------------
164 ********************************************************************************************************/
165 void PutChar(uint8 SendData)
166 {
167 1 if(CommTxPointer < TX_BUF_MAX)
168 1 {
169 2 CommTxBuf[CommTxPointer++] = SendData;
170 2 }
171 1 }
172 /*********************************************************************************************************
173 ** 函数名称: PutCharWithcheck
174 ** 功能描述: 发送一个字节同时校验
175 ** 输 入: Data:发送的数据
176 ** 输 出: 无
177 ** 全局变量: chk
178 ** 调用模块: PutChar
C51 COMPILER V7.06 COMM 01/22/2007 09:50:04 PAGE 4
179 **
180 ** 作 者: 刘宝贵
181 ** 日 期: 2004年4月21日
182 **-------------------------------------------------------------------------------------------------------
183 ** 修改人:
184 ** 日 期:
185 **------------------------------------------------------------------------------------------------------
186 ********************************************************************************************************/
187 void PutCharWithCheck(uint8 SendData)
188 {
189 1 CommChkOut ^= SendData ;
190 1 PutChar (SendData);
191 1 }
192 /*********************************************************************************************************
193 ** 函数名称: CommSendInfo
194 ** 功能描述: 发送一个报文
195 ** 输 入: 无
196 ** 输 出: 无
197 ** 全局变量: address CommCid ReturnCode chk
198 ** 调用模块: OSQCreate PutCharWithCheck PutChar
199 **
200 ** 作 者: 刘宝贵
201 ** 日 期: 2004年4月25日
202 **-------------------------------------------------------------------------------------------------------
203 ** 修改人:
204 ** 日 期:
205 **------------------------------------------------------------------------------------------------------
206 ********************************************************************************************************/
207 void CommSendInfo(void)
208 {
209 1 CommTxPointer = 0;
210 1 CommTxLength = 9;
211 1 CommChkOut = 0xEB;
212 1 PutCharWithCheck(0x90);
213 1 PutCharWithCheck(0xEB);
214 1 PutCharWithCheck(0x90);
215 1 PutCharWithCheck(Address);
216 1 PutCharWithCheck(CommCid);
217 1 PutCharWithCheck(1);
218 1 PutCharWithCheck(ReturnCode);
219 1 PutChar(CommChkOut);
220 1 PutChar(0x0D);
221 1 CommTxPointer = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -