📄 main.lst
字号:
521 1 if(M_STA==0)
522 1 {
523 2 if(M_BIT==1)
524 2 {
525 3 TR0=0;
526 3 M_STA=0;
527 3 SHORT_FLAG=0;
528 3 M_FLAG=0;
529 3 error_flag=1;
530 3 return;
531 3 }
532 2 else
533 2 {
C51 COMPILER V7.06 MAIN 11/07/2008 09:41:02 PAGE 14
534 3 M_STA=1;
535 3 SHORT_FLAG=1;
536 3 HALF_FLAG=!HALF_FLAG;
537 3 return;
538 3 }
539 2 }
540 1 else if(M_STA==1)
541 1 {
542 2 if(M_BIT==1)
543 2 {
544 3 TR0=0;
545 3 M_STA=0;
546 3 SHORT_FLAG=0;
547 3 M_FLAG=0;
548 3 error_flag=1;
549 3 return;
550 3 }
551 2 else
552 2 {
553 3 HALF_FLAG=0;
554 3 RCV_BIT=0;
555 3 M_STA=2;
556 3 M_DATA_FLAG=0;
557 3 M_BITS=0;
558 3 R_MRC=0;
559 3 SHORT_FLAG=1;
560 3 HALF_FLAG=!HALF_FLAG;
561 3 return;
562 3 }
563 2 }
564 1 else if(M_STA==2)
565 1 {
566 2 if(HALF_FLAG==0)
567 2 {
568 3
569 3 RCV_BIT=M_BIT;
570 3 SHORT_FLAG=1;
571 3 HALF_FLAG=!HALF_FLAG;
572 3 return;
573 3 }
574 2 else
575 2 {
576 3 if((RCV_BIT==1)&&(M_BIT==1)) //出错返回
577 3 {
578 4 TR0=0;
579 4 M_STA=0;
580 4 SHORT_FLAG=0;
581 4 M_FLAG=0;
582 4 error_flag=1;
583 4 return;
584 4 }
585 3 if((RCV_BIT==0)&&(M_BIT==0)) //出错返回
586 3 {
587 4 TR0=0;
588 4 M_STA=0;
589 4 SHORT_FLAG=0;
590 4 M_FLAG=0;
591 4 error_flag=1;
592 4 return;
593 4 }
594 3 if(((RCV_BIT==0)&&(M_BIT==1))||((RCV_BIT==1)&&(M_BIT==0)))
595 3 {
C51 COMPILER V7.06 MAIN 11/07/2008 09:41:02 PAGE 15
596 4
597 4 if(M_DATA_FLAG==0) //接受9个bit的头
598 4 {
599 5 if(RCV_BIT==0)
600 5 {
601 6 M_BITS=0;
602 6 SHORT_FLAG=1;
603 6 HALF_FLAG=!HALF_FLAG;
604 6 return;
605 6 }
606 5 else
607 5 {
608 6 M_BITS++;
609 6 if(M_BITS==9)
610 6 {
611 7 M_DATA_FLAG=1;
612 7 M_BITS=0;
613 7 R_MRC=0;
614 7 RCV_BYTE=0;
615 7 M_BYTES=0;
616 7 M_LRC=0;
617 7 R_MRC=0;
618 7 SHORT_FLAG=1;
619 7 HALF_FLAG=!HALF_FLAG;
620 7 return;
621 7 }
622 6 SHORT_FLAG=1;
623 6 HALF_FLAG=!HALF_FLAG;
624 6 return;
625 6 }
626 5 }
627 4 else //处理真实接受的数据 M_DATA_FLAG=1
628 4 {
629 5 if(M_BITS==4) //处理第五位偶效验位
630 5 {
631 6 if(M_BYTES==10) //处理最后列效验的四个bit
632 6 {
633 7 if(RCV_BIT==1) //为高电平出错
634 7 {
635 8 TR0=0;
636 8 M_STA=0;
637 8 SHORT_FLAG=0;
638 8 M_FLAG=0;
639 8 error_flag=1;
640 8 return;
641 8 }
642 7 else
643 7 {
644 8 RCV_BYTE^=M_LRC; //进行异或运算进行每列位校验
645 8 if(RCV_BYTE==0) //校验正确
646 8 {
647 9 M_FLAG=1;
648 9 error_flag=0;
649 9 // IE=0;
650 9 TR0=0;
651 9 return;
652 9 }
653 8 else //校验不正确
654 8 {
655 9 TR0=0;
656 9 M_STA=0;
657 9 SHORT_FLAG=0;
C51 COMPILER V7.06 MAIN 11/07/2008 09:41:02 PAGE 16
658 9 M_FLAG=0;
659 9 error_flag=1;
660 9 return;
661 9 }
662 8 }
663 7 }
664 6 else
665 6 {
666 7 if((RCV_BIT==0)&&(R_MRC==1)) //出错返回
667 7 {
668 8 TR0=0;
669 8 M_STA=0;
670 8 SHORT_FLAG=0;
671 8 M_FLAG=0;
672 8 error_flag=1;
673 8 return;
674 8 }
675 7 if((RCV_BIT==1)&&((!R_MRC)==1)) //出错返回
676 7 {
677 8 TR0=0;
678 8 M_STA=0;
679 8 SHORT_FLAG=0;
680 8 error_flag=1;
681 8 M_FLAG=0;
682 8 return;
683 8 }
684 7 if((M_BYTES%2)==0)
685 7 {
686 8 M_IDATA[M_BYTES/2]=RCV_BYTE&0x0f;
687 8 M_LRC^=RCV_BYTE;
688 8 }
689 7 else if((M_BYTES%2)==1)
690 7 {
691 8 yyj=M_IDATA[M_BYTES/2];
692 8 yyj=yyj<<4;
693 8 RCV_BYTE=RCV_BYTE&0x0f;
694 8 M_LRC^=RCV_BYTE;
695 8 yyj=yyj+RCV_BYTE;
696 8 M_IDATA[M_BYTES/2]=yyj;
697 8 }
698 7 M_BYTES++;
699 7 RCV_BYTE=0;
700 7 M_BITS=0;
701 7 SHORT_FLAG=1;
702 7 R_MRC=0;
703 7 HALF_FLAG=!HALF_FLAG;
704 7 return;
705 7
706 7 }
707 6 }
708 5 else //处理接受的四个bit数据
709 5 {
710 6 RCV_BYTE=RCV_BYTE<<1;
711 6 if(RCV_BIT==1)
712 6 {
713 7 RCV_BYTE=RCV_BYTE|0x01;
714 7 R_MRC=!R_MRC;
715 7 }
716 6 M_BITS++;
717 6 SHORT_FLAG=1;
718 6 HALF_FLAG=!HALF_FLAG;
719 6 return;
C51 COMPILER V7.06 MAIN 11/07/2008 09:41:02 PAGE 17
720 6 }
721 5 }
722 4 }
723 3 }
724 2 }
725 1 else
726 1 {
727 2 TR0=0;
728 2 M_STA=0;
729 2 SHORT_FLAG=0;
730 2 M_FLAG=0;
731 2 return;
732 2 }
733 1
734 1 }
735 ///////////////////////////////////////////
736
737 void flash_led(void)
738 {
739 1 unsigned int i;
740 1 led_3=0;
741 1 for(i=0;i<2800;i++);
742 1 led_3=1;
743 1
744 1 }
745 /////////////////////////////////////////////////
746 void receive_send() interrupt 4
747 {
748 1 unsigned char s;
749 1 ES=0;
750 1 if(RI)
751 1 {
752 2 RI=0;
753 2 s=SBUF;
754 2 if((rxhead==0)&&(s!=0x02))
755 2 {
756 3 rxhead=0;
757 3 ES=1;
758 3 }
759 2 receive_buf1[rxhead++]=s;
760 2 if(s==0x03)
761 2 {
762 3 receive_flag=1;
763 3 rxhead=0;
764 3 ES=1;
765 3 }
766 2 }
767 1 else if(TI)
768 1 {
769 2 TI=0;
770 2 if(txhead>2)
771 2 {
772 3 txhead=0;
773 3 ES=1;
774 3 return;
775 3 }
776 2 SBUF=send_buf[txhead++];
777 2 ES=1;
778 2 return;
779 2 }
780 1 ES=1;
781 1 }
C51 COMPILER V7.06 MAIN 11/07/2008 09:41:02 PAGE 18
782
783 void EM_REV (void) interrupt 0 using 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -