📄 main.lst
字号:
257 6 {
258 7 Verify_ET=3;
259 7 lcd_init();
260 7 send_hz(1,1,"和校验错误");
261 7 send_asc16str(0,32,"->");
262 7 send_hz(1,2,"请检查从机设备");
263 7 exit_sign=1;
264 7 }
265 6 }
266 5 }
267 4 else //命令码错误
268 4 {
269 5 REN0=1;//重新允许接收
270 5 UART0_TX(anew_TX,3);//请求从机重新发送上一次数据
271 5 Verify_ET++;
272 5 if(Verify_ET==3)
273 5 {
274 6 Verify_ET=0;
275 6 lcd_init();
276 6 send_hz(1,1,"命令码错误");
277 6 send_asc16str(0,32,"->");
278 6 send_hz(1,2,"请检查从机设备");
279 6 exit_sign=1;
280 6 }
281 5 }
282 4 }
283 3 }
284 2 }
285 1 }
286
287
288 //循环采集模式处理函数
289 void CYC_Disp(void)
290 {
291 1 bit exit_sign=0; //数据处理结束标志
292 1 unsigned char TX_time=0;//数据重发次数计数
293 1 unsigned char Verify_data=0;//接收和检验值
294 1 unsigned char Verify_ET=0; //和校验错误发生次数
295 1 unsigned char anew_TX[3]={0x01,0x00,0x00};//要求从机重发指令数组
296 1 unsigned char send_Num=0; //条码显示计数
297 1 unsigned char delay_num=0; //超时计数
298 1 bit RX_sign=0;//接收数据是否为第一次数据标志
299 1 unsigned int i;//定时控制变量
300 1 unsigned char CYC_pass=0;
301 1 lcd_init();
302 1 send_asc16str(2,0,"->");
303 1 send_hz(2,0,"循环采集");
C51 COMPILER V7.50 MAIN 03/17/2007 15:33:28 PAGE 6
304 1 send_hz(0,1,"系统处理中请稍后");
305 1 TX[0]=0x01; //从机地址
306 1 TX[1]=0x01; //数据采集命令字
307 1 TX[2]=0x02; //数据长度
308 1 TX[3]=0x00;//采集通道值
309 1 TX[4]=0x00;//和检验
310 1 UART0_TX(TX,5);
311 1 while(exit_sign==0)
312 1 {
313 2 for(i=65535;i>0;i--);
314 2 if(ReceiveBit==0)
315 2 {
316 3 UART0_TX(TX,5);
317 3 }
318 2 if(RX_sign==0)
319 2 {
320 3 send_asc16str(send_Num,32,">");//动态显示系统处理状态">>>>>>>>>>>>>>>>"
321 3 send_Num++;
322 3 if(send_Num==15)
323 3 {
324 4 send_Num=0;
325 4 send_asc16str(0,32," ");
326 4 delay_num++;
327 4 if(delay_num==3)
328 4 {
329 5 delay_num=0;
330 5 lcd_init();
331 5 send_hz(2,1,"通讯超时");
332 5 send_asc16str(0,32,"->");
333 5 send_hz(1,2,"请检查通信网络");
334 5 exit_sign=1;
335 5 }
336 4 }
337 3 }
338 2 if(ReceiveBit==1) //接收到一帧数据
339 2 {
340 3 ReceiveBit=0; //清除接收完成标志
341 3 if(RX[1]==0) //从机要求重发数据
342 3 {
343 4 REN0=1;//重新允许接收
344 4 UART0_TX(TX,5);
345 4 TX_time++;
346 4 if(TX_time==3)//重发次数超过三次报警
347 4 {
348 5 TX_time=0;
349 5 lcd_init();
350 5 send_hz(1,1,"从机通讯错误");
351 5 send_asc16str(0,32,"->");
352 5 send_hz(1,2,"请检查通讯线路");
353 5 exit_sign=1;
354 5 }
355 4 }
356 3 else
357 3 {
358 4 if(RX[1]==1)
359 4 {
360 5 Verify_data=Sum_verify(RX+3,4);//对接收的数据(一字节通道字节数据)进行和校验
361 5 if(Verify_data==RX[7]) //和校验正确,显示采集数值
362 5 {
363 6 if(RX_sign==0)//第一次数据发送
364 6 {
365 7 RX_sign=1;
C51 COMPILER V7.50 MAIN 03/17/2007 15:33:28 PAGE 7
366 7 lcd_init();
367 7 send_asc16str(0,0,"1");
368 7 send_asc16str(1,0,":");
369 7 send_asc16str(3,0,".");
370 7 send_asc16str(6,0,"v");
371 7 send_asc16str(9,0,"2");
372 7 send_asc16str(10,0,":");
373 7 send_asc16str(12,0,".");
374 7 send_asc16str(15,0,"v");
375 7
376 7 send_asc16str(0,16,"3");
377 7 send_asc16str(1,16,":");
378 7 send_asc16str(3,16,".");
379 7 send_asc16str(6,16,"v");
380 7 send_asc16str(9,16,"4");
381 7 send_asc16str(10,16,":");
382 7 send_asc16str(12,16,".");
383 7 send_asc16str(15,16,"v");
384 7
385 7 send_asc16str(0,32,"5");
386 7 send_asc16str(1,32,":");
387 7 send_asc16str(3,32,".");
388 7 send_asc16str(6,32,"v");
389 7 send_asc16str(9,32,"6");
390 7 send_asc16str(10,32,":");
391 7 send_asc16str(12,32,".");
392 7 send_asc16str(15,32,"v");
393 7
394 7 send_asc16str(0,48,"7");
395 7 send_asc16str(1,48,":");
396 7 send_asc16str(3,48,".");
397 7 send_asc16str(6,48,"v");
398 7 send_asc16str(9,48,"8");
399 7 send_asc16str(10,48,":");
400 7 send_asc16str(12,48,".");
401 7 send_asc16str(15,48,"v");
402 7 }
403 6
404 6 switch(RX[3])//各通道数据显示
405 6 {
406 7 case 0x00:
407 7 send_ascii8(2,7,RX[4]+0x30);
408 7 send_ascii8(4,7,RX[5]+0x30);
409 7 send_ascii8(5,7,RX[6]+0x30);
410 7 break;
411 7 case 0x01:
412 7 send_ascii8(11,7,RX[4]+0x30);
413 7 send_ascii8(13,7,RX[5]+0x30);
414 7 send_ascii8(14,7,RX[6]+0x30);
415 7 break;
416 7 case 0x02:
417 7 send_ascii8(2,23,RX[4]+0x30);
418 7 send_ascii8(4,23,RX[5]+0x30);
419 7 send_ascii8(5,23,RX[6]+0x30);
420 7 break;
421 7 case 0x03:
422 7 send_ascii8(11,23,RX[4]+0x30);
423 7 send_ascii8(13,23,RX[5]+0x30);
424 7 send_ascii8(14,23,RX[6]+0x30);
425 7 break;
426 7 case 0x04:
427 7 send_ascii8(2,39,RX[4]+0x30);
C51 COMPILER V7.50 MAIN 03/17/2007 15:33:28 PAGE 8
428 7 send_ascii8(4,39,RX[5]+0x30);
429 7 send_ascii8(5,39,RX[6]+0x30);
430 7 break;
431 7 case 0x05:
432 7 send_ascii8(11,39,RX[4]+0x30);
433 7 send_ascii8(13,39,RX[5]+0x30);
434 7 send_ascii8(14,39,RX[6]+0x30);
435 7 break;
436 7 case 0x06:
437 7 send_ascii8(2,55,RX[4]+0x30);
438 7 send_ascii8(4,55,RX[5]+0x30);
439 7 send_ascii8(5,55,RX[6]+0x30);
440 7 break;
441 7 case 0x07:
442 7 send_ascii8(11,55,RX[4]+0x30);
443 7 send_ascii8(13,55,RX[5]+0x30);
444 7 send_ascii8(14,55,RX[6]+0x30);
445 7 break;
446 7
447 7 }
448 6 TX[0]=0x01; //从机地址
449 6 TX[1]=0x01; //数据采集命令字
450 6 TX[2]=0x02; //数据长度
451 6 TX[3]=(++CYC_pass)&&0x07;//采集通道值
452 6 TX[4]=TX[3];//和检验
453 6 for(i=65535;i>0;i--);
454 6 UART0_TX(TX,5);
455 6 REN0=1;//重新允许接收
456 6 if(key_sign==1) //有按键
457 6 exit_sign=1;
458 6 }
459 5 else //和校验错误
460 5 {
461 6 REN0=1;//重新允许接收
462 6 UART0_TX(anew_TX,3);//请求从机重新发送上一次数据
463 6 Verify_ET++;
464 6 if(Verify_ET==3)
465 6 {
466 7 Verify_ET=3;
467 7 lcd_init();
468 7 send_hz(1,1,"和校验错误");
469 7 send_asc16str(0,32,"->");
470 7 send_hz(1,2,"请检查从机设备");
471 7 exit_sign=1;
472 7 }
473 6 }
474 5 }
475 4 else //命令码错误
476 4 {
477 5 REN0=1;//重新允许接收
478 5 UART0_TX(anew_TX,3);//请求从机重新发送上一次数据
479 5 Verify_ET++;
480 5 if(Verify_ET==3)
481 5 {
482 6 Verify_ET=0;
483 6 lcd_init();
484 6 send_hz(1,1,"命令码错误");
485 6 send_asc16str(0,32,"->");
486 6 send_hz(1,2,"请检查从机设备");
487 6 exit_sign=1;
488 6 }
489 5 }
C51 COMPILER V7.50 MAIN 03/17/2007 15:33:28 PAGE 9
490 4 }
491 3 }
492 2 }
493 1 }
494
495 //和检验函数
496 unsigned char Sum_verify(unsigned char verify[],unsigned char ii)
497 {
498 1 unsigned char Verify_Sum=0;//和校验值
499 1 unsigned char i;
500 1 for(i=0;i<ii;i++)
501 1 {
502 2 Verify_Sum^=verify[i];
503 2 }
504 1 return(Verify_Sum);
505 1 }
506
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2739 ----
CONSTANT SIZE = 339 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 22 25
IDATA SIZE = ---- ----
BIT SIZE = 5 4
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -