📄 comm.lst
字号:
C51 COMPILER V7.04 COMM 04/08/2006 10:08:58 PAGE 1
C51 COMPILER V7.04, COMPILATION OF MODULE COMM
OBJECT MODULE PLACED IN comm.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE comm.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "main.h"
2 #include "comm.h"
3
4 //////////////////////////////////////////////////////////
5 //stx addr cmd lenh lenl data xor
6 //0 1 2 3 4 5..
7 //////////////////////////////////////////////////////////
8
9 xdata unsigned char g_CommBuffer[600];
10 unsigned int g_CommLen;
11
12
13 /////////////////////////////////////////
14 //CPU种类:12分频时钟周期
15 //定时器: T2定时器
16 //误差: 4.5%
17 //公式: 波特率= 晶振频率/(32*(65536 - [RCAP2H,RCAP2L]))
18 //CopyRight by YTH 2002.11.11
19 /////////////////////////////////////////
20 #ifdef CRYTAL221184MHZ
21 void InitComm(unsigned char nBaudRate)
22 {
23 1 TMOD=0x20 |(TMOD&0x0f0);
24 1 PCON=0x80;
25 1 switch(nBaudRate)
26 1 {
27 2 case Baud9600:
28 2 TH1=244;
29 2 break;
30 2 case Baud19200:
31 2 TH1=250;
32 2 break;
33 2 case Baud38400:
34 2 TH1=253;
35 2 break;
36 2 case Baud115200:
37 2 TH1=255;
38 2 break;
39 2 }
40 1 TL1=TH1;
41 1 SCON=0x50;
42 1
43 1 //ES=1;
44 1 TR1=1;
45 1
46 1
47 1 }
48 #endif
49
50
51
52 #ifdef CRYTAL147456MHZ
void InitComm(unsigned char nBaudRate)
{
TMOD=0x20 |(TMOD&0x0f0);
C51 COMPILER V7.04 COMM 04/08/2006 10:08:58 PAGE 2
PCON=0x00;
switch(nBaudRate)
{
case Baud9600:
TH1=252;
break;
case Baud19200:
TH1=254;
break;
case Baud38400:
TH1=255;
break;
}
TL1=TH1;
SCON=0x50;
//ES=1;
TR1=1;
}
#endif
77 #ifdef CRYTAL110592MHZ
void InitComm(unsigned char nBaudRate)
{
T2CON=0x30;
switch(nBaudRate)
{
case Baud9600:
RCAP2H=255;RCAP2L=220;
break;
case Baud19200:
RCAP2H=255;RCAP2L=238;
break;
case Baud38400:
RCAP2H=255;RCAP2L=247;
break;
case Baud115200:
RCAP2H=255;RCAP2L=253;
break;
}
SCON=0x50;
TR2=1;
}
#endif
102
103 unsigned char ReadComm1(unsigned char *ch)
104 {
105 1
106 1 unsigned int timeout= COMM_TIMEOUT1;
107 1
108 1 while(--timeout)
109 1 {
110 2 WatchDog();
111 2 if(RI==1)
112 2 {
113 3 RI=0;
114 3 *ch=SBUF;
115 3 return ID_OK;
116 3 }
117 2 }
C51 COMPILER V7.04 COMM 04/08/2006 10:08:58 PAGE 3
118 1 return ID_ERR;
119 1
120 1 }
121
122 unsigned char ReadComm(unsigned char *ch)
123 {
124 1
125 1 unsigned long timeout= COMM_TIMEOUT;
126 1
127 1 while(--timeout)
128 1 {
129 2 WatchDog();
130 2 if(RI==1)
131 2 {
132 3 RI=0;
133 3 *ch=SBUF;
134 3 return ID_OK;
135 3 }
136 2 }
137 1 return ID_ERR;
138 1
139 1 }
140 unsigned char WriteComm(unsigned char ch)
141 {
142 1 unsigned long timeout= COMM_TIMEOUT;
143 1
144 1 SBUF=ch;
145 1 while(--timeout)
146 1 {
147 2 WatchDog();
148 2 if(TI==1)
149 2 {
150 3 TI=0;
151 3 return ID_OK;
152 3 }
153 2 }
154 1 return ID_ERR;
155 1 }
156 /*
157 ********************************************************
158 **格式:60 addr cmd len data xor
159 ********************************************************
160 */
161
162
163 unsigned char ReceiveData(void)
164 {
165 1
166 1 unsigned char ch;
167 1 unsigned char xorcode=0;
168 1 unsigned int len;
169 1
170 1 NumCounter=0;
171 1 //startcode
172 1 while(1)
173 1 {
174 2 WatchDog();
175 2
176 2 ReadComm(&ch);
177 2 if(ch==0x60)break;
178 2
179 2
C51 COMPILER V7.04 COMM 04/08/2006 10:08:58 PAGE 4
180 2 if(ch==0x55)NumCounter++;
181 2 if(NumCounter>5)
182 2 {
183 3 WriteComm(0xaa);//Comm Start Byte
184 3 WriteComm(0xaa);//Comm Start Byte
185 3 WriteComm(0xaa);//Comm Start Byte
186 3 WriteComm(0xaa);//Comm Start Byte
187 3 WriteComm(0xaa);//Comm Start Byte
188 3
189 3 }
190 2
191 2 }
192 1 //if(ch!=0x60)return COMM_STX_ERR;
193 1
194 1 g_CommBuffer[0]=ch;
195 1 xorcode ^=ch;
196 1
197 1
198 1 //addr
199 1 if(ReadComm(&ch)) return COMM_TMO_ERR;
200 1 g_CommBuffer[1]=ch;
201 1 xorcode ^=ch;
202 1
203 1 //cmd
204 1 if(ReadComm(&ch)) return COMM_TMO_ERR;
205 1 g_CommBuffer[2]=ch;
206 1 xorcode ^=ch;
207 1
208 1 WatchDog();
209 1
210 1 //len1
211 1 if(ReadComm(&ch)) return COMM_TMO_ERR;
212 1 g_CommBuffer[3]=ch;
213 1 xorcode ^=ch;
214 1 len=ch;
215 1
216 1
217 1 //len2
218 1 if(ReadComm(&ch)) return COMM_TMO_ERR;
219 1 g_CommBuffer[4]=ch;
220 1 xorcode ^=ch;
221 1 len<<=8;
222 1 len+=ch;
223 1
224 1 // *((unsigned char *)(&len)+0)=g_CommBuffer[3];
225 1 // *((unsigned char *)(&len)+1)=g_CommBuffer[4];
226 1 g_CommLen=len;
227 1
228 1
229 1
230 1 if(len>600)return COMM_LEN_ERR;
231 1
232 1
233 1 //data
234 1 for(i=0;i<len;i++)
235 1 {
236 2 WatchDog();
237 2 if(ReadComm(&ch)) return COMM_TMO_ERR;
238 2 g_CommBuffer[5+i]=ch;
239 2 xorcode ^=ch;
240 2 }
241 1
C51 COMPILER V7.04 COMM 04/08/2006 10:08:58 PAGE 5
242 1 //xor
243 1 if(ReadComm(&ch)) return COMM_TMO_ERR;
244 1 xorcode ^=ch;
245 1
246 1 //check veryfy
247 1 if(xorcode==0)return ID_OK; //校验对
248 1 else return COMM_XOR_ERR;//校验错
249 1
250 1 }
251
252
253 void SendResponse(unsigned char StateCode,unsigned char *StrData,unsigned int Len)
254 {
255 1
256 1 unsigned char CrcCode=0;
257 1 unsigned char ch;
258 1
259 1
260 1 WatchDog();
261 1
262 1 PIN_TXEN=RS485_COMM_ENABLE;//不允许发送
263 1 //for(i=0;i<100;i++) WatchDog();
264 1
265 1 //start
266 1 WriteComm(0x60);//Comm Start Byte
267 1 CrcCode ^=0x60;
268 1
269 1 //addr
270 1 WriteComm(0x01);
271 1 CrcCode ^=0x01;
272 1
273 1
274 1
275 1
276 1 //status
277 1 WriteComm(StateCode);
278 1 CrcCode ^=StateCode;
279 1
280 1 WatchDog();
281 1
282 1 //len
283 1 ch=((Len>>8)&0xff);
284 1 WriteComm(ch);
285 1 CrcCode ^=ch;
286 1
287 1 ch=(Len&0xff);
288 1 WriteComm(ch);
289 1 CrcCode ^=ch;
290 1
291 1
292 1 //data
293 1 for(i=0;i<Len;i++)
294 1 {
295 2 WatchDog();
296 2 ch=StrData[i];
297 2 WriteComm(ch);
298 2 CrcCode ^=ch;
299 2
300 2 }
301 1
302 1 //xor
303 1 WriteComm(CrcCode);
C51 COMPILER V7.04 COMM 04/08/2006 10:08:58 PAGE 6
304 1
305 1
306 1 //for(i=0;i<100;i++)WatchDog();
307 1 PIN_TXEN=RS485_COMM_DISENABLE;//不允许发送
308 1
309 1
310 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 520 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 600 ----
PDATA SIZE = ---- ----
DATA SIZE = 2 19
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -