📄 user.lst
字号:
476 3 for (j=0;j<49;j++)
477 3 { /*---- 接受回答报文共49个字节 ---------*/
478 4 nw=0;
479 4 while ((RI==0)&&(S_RTS==1)) {}; /*---- SE正在发送、实验板正在接收一个字符 ---------*/
480 4 if (RI==1)
481 4 {/*---- RI==1:实验板接收到一个字符 ---------*/
482 5 ACC=SBUF;
483 5 if (P!=RB8){ re_er=1;}; /*---- 偶校验错,置偶校验错标志 ---------*/
484 5 rebox[j]=SBUF; /*---- 接收一个字符送串口输入缓冲区 ---------*/
485 5 RI=0;
486 5 }
487 4 else
488 4 {/*---- (RI==0)&&(S_RTS==0):SE报文全部发送完毕而实验板还没有接收到预期的长度 ---------*/
489 5 j=100; /*---- 退出等待接收 ---------*/
490 5 }
491 4 };
492 3 //WQY DEBUG:调试通过
493 3 //pb_out[0]=rebox[0];
494 3 //pb_out[1]=rebox[48];
495 3 //steout0_7(pb_out[0]);
496 3 //steout8_15(pb_out[1]);
497 3 //for(;;) {};
498 3
499 3 /*--------------- 接收回答报文结束 -------------------------------------------*/
500 3 /*--------------- 以下分析接口板SE的回答报文 -----------------------------------------*/
501 3 if (j==49)
502 3 { /*---- (j==49):实验板接收回答报文长度正确 ---------*/
503 4 if (re_er==0) /*---- 没有字符偶校验错? ---------*/
504 4 {
505 5 x=0;
506 5 for (i=0;i<48;i++) /*---- 求校验和 ---------*/
507 5 {
508 6 x=x+rebox[i];
509 6 };
510 5 if (x==rebox[48])
511 5 { /*---- 校验和正确? ----------*/
512 6 if (rebox[0]==br_num) /*---- 返回的波特率号是5? ----------*/
513 6 {
514 7 if (rebox[1]==0) /*---- 初始化报文错误号N=0? ----------*/
515 7 {
516 8 x=0;
517 8 for (i=2;i<48;i++) /*---- byte2~byte47都是0xaa? ----------*/
518 8 {
519 9 if (rebox[i]!=0xaa)
520 9 {
521 10 x=1;
522 10 };
523 9 };
524 8 if (x==0)
525 8 {
526 9 y=1; /*---- byte2~byte47都是0xaa,初始化成功,y=1,准备退出while (y==0) ----*/
527 9 }
528 8 else
529 8 {x=0x11;}; /*---- byte2~byte47不都是0xaa!错误标记=0x11; ----*/
C51 COMPILER V7.20 USER 01/23/2006 13:26:51 PAGE 10
530 8 }
531 7 else
532 7 {x=rebox[1];}; /*---- 初始化报文错误号N<>0,错误标记=返回错误号 ----*/
533 7 }
534 6 else
535 6 {x=0x77;}; /*---- 返回的波特率号不是5, 错误标记=0x77; ----*/
536 6 }
537 5 else
538 5 {x=0xff;}; /*---- 校验和不正确正确, 错误标记=0xff; ----*/
539 5 }
540 4 else
541 4 {x=0xee;}; /*---- 发生了字符偶校验错 错误标记=0xee; ----*/
542 4 }
543 3 else
544 3 {
545 4 x=0xcc; /*---- j!=49发生了接收报文长度错 错误标记=0xee; ----*/
546 4 };
547 3
548 3 if (y==0)
549 3 { /*---- 初始化失败 ----*/
550 4 for (nw=0;nw<10000;nw++)
551 4 {
552 5 steout0_7(br_num); /*---- 显示返回波特率号 ----*/
553 5 steout8_15(x); /*---- 显示返回错误号 ----*/
554 5 };
555 4 };
556 3
557 3 }; /*---- 如果y==0,返回while (y==0) ----*/
558 2
559 2 //WQY DEBUG:运行正确时y=1,x=0。该段程序调试正确。
560 2 //steout0_7(y);
561 2 //steout8_15(x);
562 2 //for(;;) {};
563 2
564 2
565 2
566 2
567 2
568 2
569 2 /*==================================================================================================*/
570 2 /* 实验板对PROFIBUS接口板初始化成功,进数据交换状态的无限循环中 */
571 2 /* trbox[]/rebox[]是串口发送/接收数组,发送/接收格式见《SE手册》 */
572 2 /*--------------------------------------------------------------------------------------------------*/
573 2
574 2 dil=data_in_len-1; /*---- data_in_len=50, dil=49 ----*/
575 2 dol=data_out_len-1; /*---- data_out_len==50, dol==49 ----*/
576 2 for (i=0;i<data_in_len;i++)
577 2 {
578 3 trbox[i]=0; /*---- 清发送、接收缓冲区 ----*/
579 3 };
580 2 for (i=0;i<data_out_len;i++)
581 2 {
582 3 rebox[i]=0; /*---- 清发送、接收缓冲区 ----*/
583 3 };
584 2
585 2 /*=============================== 进数据交换状态的无限循环中 =======================================*/
586 2 while (REQ_IT==0)
587 2 { /*---- (REQ_IT==0):SE处在数据交换状态 ------*/
588 3 trbox[0]=req_com=0; /*---- 没有用户参数,请求数据命令永远是req_com=0,只请求A型报文 ------*/
589 3 trbox[1]=di0_7; /*---- di0_7是输入键输入I0~I7当前值,作为PROFIBUS输入的第1字节 ------*/
590 3 trbox[2]=di8_15; /*---- di8_15是输入键输入I8~I15当前值,作为PROFIBUS输入的第2字节 ------*/
591 3 //WQY DEBUG
C51 COMPILER V7.20 USER 01/23/2006 13:26:51 PAGE 11
592 3 //trbox[1]=0x11;
593 3 //trbox[2]=oxff;
594 3
595 3 for (i=3;i<dil;i++)
596 3 {
597 4 trbox[i]=0x5a; /*---- 其它PROFIBUS输入数据(3~48)本例定为0x5a ------*/
598 4 };
599 3
600 3 x=0;
601 3 for (i=0;i<dil;i++) /*---- 求校验和 ------*/
602 3 {
603 4 x=x+trbox[i];
604 4 };
605 3 trbox[dil]=x; /*---- 置校验和 ------*/
606 3
607 3 REN=0;
608 3
609 3 while (S_RTS==1) {}; /*---- S_RTS==1:接口板没有准备好接收数据 ------*/
610 3
611 3 for (i=0;i<data_in_len;i++) /*---- 发送数据交换报文共50字节 ------*/
612 3 {
613 4 TI=0;
614 4 ACC=trbox[i];
615 4 TB8=P; /*---- 形成偶校验位 ------*/
616 4 SBUF=trbox[i];
617 4 while (TI==0) {};
618 4 };
619 3
620 3 while (S_RTS==0) {}; /*---- SE 没有接收完毕 ------*/
621 3
622 3 /*=============================发送数据交换报文结束,等待接收接口板SE的回答。=========================*/
623 3
624 3 re_er=0; /*------ re_er偶校验错标志 ------*/
625 3 RI=0;
626 3 REN=1; /*------ 允许接收 ------*/
627 3 for (j=0;j<data_out_len;j++ ) /*------ 等待接收接口板的回答数据交换报文共50字节 ------*/
628 3 {
629 4 while ((RI==0)&&(S_RTS==1)) {}; /*---- SE正在发送、实验板正在接收一个字符 ------*/
630 4 if (RI==1)
631 4 {/*---- RI==1:实验板接收到一个字符 ---------*/
632 5 ACC=SBUF;
633 5 if (P!=RB8) {re_er=1;}; /*------ 偶校验错,置偶校验错标志 ------*/
634 5 rebox[j]=SBUF; /*------ 接收一个字符送串口输入缓冲区 ------*/
635 5 RI=0;
636 5 }
637 4 else
638 4 {/*---- (RI==0)&&(S_RTS==0):SE报文全部发送完毕而实验板还没有接收到预期的长度 ---------*/
639 5 j=data_out_len+1; /*---- 退出等待接收 ---------*/
640 5 };
641 4 };
642 3
643 3 //WQY DEBUG: 一次数据通信
644 3 //trbox[]中数据发送给接口板,从接口板接收数据至rebox[]
645 3 //pb_out[0]=rebox[1];
646 3 //pb_out[1]=rebox[2];
647 3 //steout0_7(pb_out[0]);
648 3 //steout8_15(pb_out[1]);
649 3 //for(;;) {};
650 3
651 3
652 3
653 3 /*=============================接收完毕===============================================================*/
C51 COMPILER V7.20 USER 01/23/2006 13:26:51 PAGE 12
654 3
655 3 if (j==data_out_len)
656 3 {/*---- (j==data_out_len):实验板接收回答报文长度正确 ---------*/
657 4 if (re_er==0)
658 4 { /*------ 无偶校验错 ------*/
659 5 x=0;
660 5 for (i=0;i<dol;i++)
661 5 {
662 6 x=x+rebox[i]; /*------ 求校验和 ------*/
663 6 };
664 5 if (x==rebox[dol])
665 5 {
666 6 y=dol-1; /*------ y=49-1=48,PROFIBUS输出数据长度 ------*/
667 6 for (i=1;i<dol;i++)
668 6 {
669 7 pb_out[i-1]=rebox[i]; /*------ 接收到的48个PROFIBUS输出数据送数据区pb_out[0~47] ------*/
670 7 };
671 6 }
672 5 else
673 5 {
674 6 error=0x81; /*------ 校验和错 ------*/
675 6 };
676 5 }
677 4 else
678 4 {
679 5 error=0x83; /*------ 偶校验错 ------*/
680 5 };
681 4 }
682 3 else
683 3 {
684 4 error=0x84; /*------ 接收字符数不够 ------*/
685 4 };
686 3 /*====================================================================================================*/
687 3 /*-----------------------------显示部分---------------------------------------------------------------*/
688 3 /*----------------------------------------------------------------------------------------------------*/
689 3
690 3 scanin(); /*------ 输入键扫描 ------*/
691 3 steout0_7(pb_out[0]); /*------ PROFIBUS输出数据第一个字节送Q0-Q7显示 ------*/
692 3 steout8_15(pb_out[1]); /*------ PROFIBUS输出数据第一个字节送Q0-Q7显示 ------*/
693 3
694 3 };/*---- while (REQ_IT==0):SE处在数据交换状态,返回数据交换状态的无限循环中 ------*/
695 2 };/*---- (REQ_IT==1):SE退出数据交换状态,返回初始化 ------*/
696 1 }
*** WARNING C280 IN LINE 252 OF USER.C: 'frist': unreferenced local variable
*** WARNING C280 IN LINE 253 OF USER.C: 'nn': unreferenced local variable
*** WARNING C280 IN LINE 263 OF USER.C: 'user_prm': unreferenced local variable
*** WARNING C280 IN LINE 269 OF USER.C: 'se_er': unreferenced local variable
697
698
699
700
701
702
703
704
705
706
707
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1596 ----
C51 COMPILER V7.20 USER 01/23/2006 13:26:51 PAGE 13
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 491
PDATA SIZE = ---- ----
DATA SIZE = 7 24
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 4 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -