📄 comm.lst
字号:
C51 COMPILER V7.06 COMM 12/10/2008 14:07:45 PAGE 1
C51 COMPILER V7.06, 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"include.h"
2
3 /********************************************************************************************************
-*
4 ** 函数名称: void Initiate_RS232(void)
5 ** 功能描述: 串口初始化函数
6 ** 输 入: 无
7 ** 输 出: 无
8 ** 全局变量:
9 ** 调用模块:
10 **
11 ** 作 者: 李伟
12 ** 日 期: 2008年12月09日
13 **-------------------------------------------------------------------------------------------------------
14 ** 修 改 人:
15 ** 日 期:
16 **-------------------------------------------------------------------------------------------------------
17 ********************************************************************************************************/
18 void Initiate_RS232(void)
19 {
20 1 ES = 0;
21 1 PCON |= 0x80; //SMOD=1
22 1 SCON = 0x50; //0101,0001 8位数据位,无奇偶校验
23 1 TMOD = 0x20; //设置T1为波特率发生器
24 1 TH1 = 0xFA; //11.0592MHz 晶振,波特率=9600
25 1 TL1 = 0xFA;
26 1 // AUXR |=0x10;
27 1 ES = 1; //允许串口中断
28 1 EA = 1; //开总中断
29 1 TR1 = 1; //开定时器1
30 1 }
31 /*********************************************************************************************************
32 ** 函数名称: void Suart_Send_Byte(uint8 Send_Byte)
33 ** 功能描述: 串口发送函数
34 ** 输 入: 无
35 ** 输 出: 无
36 ** 全局变量:
37 ** 调用模块:
38 **
39 ** 作 者: 李伟
40 ** 日 期: 2008年12月09日
41 **-------------------------------------------------------------------------------------------------------
42 ** 修 改 人:
43 ** 日 期:
44 **-------------------------------------------------------------------------------------------------------
45 ********************************************************************************************************/
46 void Suart_Send_Byte(uint8 Send_Byte)
47 {
48 1 ES = 0; //关串口中断
49 1 TI = 0; //清零串口发送完成中断请求标志
50 1 SBUF = Send_Byte;
51 1 //WDT_CONTR = 0x3c; /**********************喂狗**********************/
52 1 while(TI == 0); //等待发送完成
53 1 TI = 0; //清零串口发送完成中断请求标志
54 1 ES = 1; //允许串口中断
C51 COMPILER V7.06 COMM 12/10/2008 14:07:45 PAGE 2
55 1
56 1 }
57 /*********************************************************************************************************
58 ** 函数名称: void Comm(void) interrupt 4
59 ** 功能描述: 串口中断函数
60 ** 输 入: 无
61 ** 输 出: 无
62 ** 全局变量:
63 ** 调用模块:
64 **
65 ** 作 者: 李伟
66 ** 日 期: 2008年12月10日
67 **-------------------------------------------------------------------------------------------------------
68 ** 修 改 人:
69 ** 日 期:
70 **-------------------------------------------------------------------------------------------------------
71 ********************************************************************************************************/
72 void Comm(void) interrupt 4
73 {
74 1 uint8 ea_time;
75 1 ea_time = EA;
76 1 EA = 0;
77 1 if(RI == 1)
78 1 {
79 2 CommTemp0 = SBUF;
80 2 if(CommTemp0 == 0x7e)
81 2 {
82 3 CommState = 0;
83 3 CommAscii = 0;
84 3 CommBytehilow = 0;
85 3 }
86 2 if(CommState != 0 && CommState != 5 && CommState != 6)
87 2 {
88 3 ComCalculChkSum = ComCalculChkSum + CommTemp0;
89 3 }
90 2 if(CommState != 0 && CommState != 5)
91 2 {
92 3 if(CommAscii == 0)
93 3 {
94 4 CommAscii = 1;
95 4 CommTemp1 = CommTemp0;
96 4 if(CommTemp1 < 0x3a)
97 4 CommTemp1 -= 0x30;
98 4 else
99 4 CommTemp1 -= 0x37;
100 4 }
101 3 else
102 3 {
103 4 CommAscii = 0;
104 4 if(CommTemp0 < 0x3a)
105 4 CommTemp0 -= 0x30;
106 4 else
107 4 CommTemp0 -= 0x37;
108 4 CommTemp1 <<= 4;
109 4 CommTemp1 |= CommTemp0;
110 4 }
111 3 }
112 2 if(CommAscii == 0)
113 2 {
114 3 switch(CommState)
115 3 {
116 4 case 0: /*SOI*/
C51 COMPILER V7.06 COMM 12/10/2008 14:07:45 PAGE 3
117 4 {
118 5 if(CommTemp0 == 0x7e)
119 5 {
120 6 CommState++;
121 6 ComCalculChkSum = 0;
122 6 }
123 5 }break;
124 4 case 1: /*ADD*/
125 4 {
126 5 if(CommTemp1 == BoardAddress)
127 5 {
128 6 CommState++;
129 6 }
130 5 else
131 5 {
132 6 CommState = 0;
133 6 }
134 5 }break;
135 4 case 2: /*CID*/
136 4 {
137 5 CommCid = CommTemp1;
138 5 CommState++;
139 5 if(CommCid > 0x10) CommState = 0;
140 5
141 5 }break;
142 4 case 3: /*LENGTH*/
143 4 {
144 5 if(CommBytehilow == 0 )
145 5 {
146 6 CommLengthH = CommTemp1;
147 6 CommBytehilow = 1;
148 6 }
149 5 else
150 5 {
151 6 CommState++;
152 6 CommLengthL = CommTemp1;
153 6 CommBytehilow = 0;
154 6 if(CommLengthL > 100)CommState = 0;
155 6 CommRxPointer = 0; //RxBufPointer
156 6 if(CommLengthL == 0)CommState++;
157 6 }
158 5 }break;
159 4 case 4: /*INFO*/
160 4 {
161 5 if(CommLengthL != 0)
162 5 {
163 6 CommRxBuf[CommRxPointer] = CommTemp1;
164 6 CommRxPointer++;
165 6 CommLengthL--;
166 6 CommLengthL--;
167 6 if(CommLengthL == 0)CommState++;
168 6 }
169 5 else
170 5 CommState++;
171 5 }break;
172 4 case 5: /*chksum*/
173 4 {
174 5 if(CommBytehilow == 0)
175 5 {
176 6 CommLengthH = CommTemp1;
177 6 CommBytehilow = 1;
178 6 }
C51 COMPILER V7.06 COMM 12/10/2008 14:07:45 PAGE 4
179 5 else
180 5 {
181 6 CommBytehilow = 0;
182 6 CommChksumL = CommTemp1;
183 6 ReComCalculChkSum = CommChksumH;
184 6 ReComCalculChkSum = ReComCalculChkSum << 8;
185 6 ReComCalculChkSum |= CommChksumL;
186 6 ComCalculChkSum= (~ComCalculChkSum)+1;
187 6 if(ReComCalculChkSum == ComCalculChkSum)CommState++;
188 6 else
189 6 {
190 7 goto comrxend;
191 7 }
192 6 }
193 5 }break;
194 4 case 6: /*EOI */
195 4 {
196 5 if(CommTemp0 == 0x0D)
197 5 {
198 6 Massageflag = 1;
199 6 }
200 5 CommState = 0;
201 5 }break;
202 4 }
203 3 comrxend:
204 3 ;
205 3 }
206 2 }
207 1 RI = 0;
208 1 EA = ea_time;
209 1 }
210 /********************************************************************************************************
211 End of file
212 ********************************************************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 448 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -