📄 main.lst
字号:
144 1 {
145 2 SndUart0[0] = Uart1ToUart0Data[0]; //数据长度
146 2 SndUart0[1] = Uart1ToUart0Data[1]; //命令
147 2 SndUart0[2] = Uart1ToUart0Data[2]; //本机地址
148 2 SndUart0[3] = Uart1ToUart0Data[3]; //室内机地址
149 2 SndUart0[4] = Uart1ToUart0Data[4]; //数据
150 2
151 2 SndUart0[SndUart0[0]] = 0xCC;
152 2 tmpdata = 0;
153 2 for(;tmpdata < SndUart0[0];tmpdata++)
154 2 SndUart0[SndUart0[0]]^=SndUart0[tmpdata];
155 2
156 2 com0_bAck = Uart1ToUart0Data[5]; //应答
157 2 bUart1ToUart0 = false;
158 2 bUart0ReSnd = true; //如果没有反回,要重发
159 2 Uart0Nums = 0;
160 2 } else if(!bUart0Ask)
161 1 {
162 2 rec_cmd0=0x00; //清除收到的命令
163 2 uart0_status = 0x02; //状态复位
164 2 rec_bHead0 = 0x00; //从新接收数据
165 2 bUart0RecSnd = bRecieve;
166 2 bUart0Ask = true;
167 2 Uart0_Over = 0;
168 2 return;
169 2 } else if(bUart0ReSnd) //重发
170 1 {
171 2 if(!Uart0Nums) //第二次重发
172 2 Uart0Nums = 1;
173 2 else
174 2 bUart0ReSnd = false; //第三次重发
175 2 }else
176 1 {
177 2
178 2 SndUart0[0] = 0x03; //数据长度
179 2 SndUart0[1] = 0xA1; //命令子节
C51 COMPILER V7.50 MAIN 12/19/2008 09:53:31 PAGE 4
180 2 SndUart0[2] = LAddr; //本机地址
181 2 SndUart0[3] = 0xCC^SndUart0[0]^SndUart0[1]^SndUart0[2];
182 2 com0_bAck = false; //不要应答
183 2
184 2 }
185 1 rec_cmd0 = 0x00;
186 1 //发送数据包长度
187 1 snd_len0 = SndUart0[0]+2;
188 1 snd0_start = SndUart0; //发送数据包开始地址,从长度开始
189 1 uart0_status = 0x01; //正在发送数据
190 1 SBUF = 0xCC; //开始发送数据
191 1 //发送开始计时
192 1 Uart0_Over = 0;
193 1 }
194
195 void CommUart1() //COM1 处理程序
196 {
197 1 //uart1_status 01正在向下发送数据 02发送数据完毕 正在接收数据 03接收数据完毕 04接收数据校验错
198 1 if (uart1_status != 0x03 && Uart1_Over < OverMs) //50 MS检查一次
199 1 return;
200 1
201 1 if( rec_cmd1==0xA1 && uart1_status==0x03) //住户应答
202 1 {
203 2 SendUserFail[prevAddr-1] = 0;
204 2 bUart1ReSnd = false; //不要重发
205 2
206 2 // case 0x00: //轮询命令
207 2 }else if(rec_cmd1==0x00)
208 1 {
209 2 //不应答 发送完毕
210 2 if(!com1_bAck && (uart1_status == 0x02 || uart1_status == 0x03)) //发下一条命令
211 2 {
212 3
213 3 }else if(com1_bAck && uart1_status != 0x03) //要应答
214 2 {
215 3 //接收数据超时
216 3 if(Uart1_Over > OverMs) //超时处理
217 3 {
218 4 SendUserFail[prevAddr-1]+=1;
219 4
220 4 }else
221 3 {
222 4 return;
223 4 }
224 3 }else if(uart1_status == 0x01 && Uart1_Over < OverMs) //不要应答,但还没有发送数据完成
225 2 {
226 3 return;
227 3 }
228 2 }else if (uart1_status==0x04) // 接收数据校验错
229 1 {
230 2 Uart1Data[1] = 0xF2; //命令
231 2 Uart1Data[2] = 0; //不应答
232 2 bTaskUart1 = 1;
233 2 }else if (Uart1_Over > OverMs && rec_cmd1 != 0x00) //超时没有应答或没有应答完
234 1 {
235 2 //复位命令
236 2 rec_cmd1 = 0x00;
237 2 return;
238 2 }
239 1
240 1
241 1 if(bUart1ReSnd)
C51 COMPILER V7.50 MAIN 12/19/2008 09:53:31 PAGE 5
242 1 {
243 2 if(!Uart1Nums) //第二次重发
244 2 Uart1Nums = 1;
245 2 else
246 2 bUart1ReSnd = false; //第三次重发
247 2 }else {
248 2 //正常轮询
249 2 SndUart1[0] = 2;
250 2 SndUart1[1] = 0x06; //命令子节
251 2 com1_bAck = true;
252 2 }
253 1
254 1 snd_len1 = SndUart1[0]; //发送数据包长度
255 1 SndUart1[snd_len1] = 0xCC;
256 1 tmpdata = 0;
257 1 for(;tmpdata < snd_len1;tmpdata++)
258 1 SndUart1[snd_len1]^=SndUart1[tmpdata];
259 1
260 1 snd_len1+=2;
261 1
262 1 //发送数据包长度
263 1 snd1_start = SndUart1; //发送数据包开始地址,从长度开始
264 1 uart1_status = 0x01; //正在发送数据
265 1
266 1 //INT0关闭,不然就出现接收数据的错误
267 1 EX0 = 0;
268 1 SM = 1; //用作发送停止位
269 1 SBUF1 = 0xCC; //开始发送数据
270 1 //发送开始计时
271 1 Uart1_Over = 0;
272 1 Sdatabit = 0x0A; //发送位数
273 1 TH2 = RCAP2H;
274 1 TL2 = RCAP2L;
275 1 RI2 = 0; //发送状态
276 1 rec_cmd1 = 0;
277 1 TR2 = 1; //开启发送定时器
278 1 }
279
280
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 691 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 ----
IDATA SIZE = 40 ----
BIT SIZE = 24 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -