📄 main.lst
字号:
528 1 TI = 0;
529 1 ES = 1;
530 1 }
531
532 /////////////////////////////////////////////////////////////////////
533 //正确执行完上位机指令,应答(有返回数据)
534 //input:answerdata = 应答数据
535 // answernum = 数据长度
536 /////////////////////////////////////////////////////////////////////
537 void AnswerOk(unsigned char *answerdata, unsigned int answernum)
538 {
539 1 unsigned char chkdata;
540 1 unsigned int i;
541 1
542 1 TI = 0; //发送命令头
543 1 SBUF = 0xAA;
544 1 while (!TI);
545 1 TI = 0;
546 1 SBUF = 0xBB;
547 1 while (!TI);
548 1
549 1 TI = 0; //长度字,包括状态字和效验字
550 1 chkdata = (((unsigned char)((answernum + 6) & 0xFF)));
551 1 SBUF = chkdata;
C51 COMPILER V8.05a MAIN 07/05/2010 23:34:44 PAGE 10
552 1 while (!TI);
553 1 TI = 0;
554 1 chkdata = (((unsigned char)(((answernum + 6)>>8) & 0xFF)));
555 1 SBUF = chkdata;
556 1 while (!TI);
557 1
558 1 TI = 0; //发送设备标识
559 1 SBUF = g_cIcdevH;
560 1 while(!TI);
561 1 if (g_cIcdevH == 0xAA)
562 1 {
563 2 TI = 0;
564 2 SBUF = 0;
565 2 while (!TI);
566 2 }
567 1 TI = 0;
568 1 SBUF = g_cIcdevL;
569 1 while(!TI);
570 1 if (g_cIcdevL == 0xAA)
571 1 {
572 2 TI = 0;
573 2 SBUF = 0;
574 2 while (!TI);
575 2 }
576 1
577 1 TI = 0; //发送命令码
578 1 i = (unsigned char)(g_cCommand & 0xFF);
579 1 SBUF = i;
580 1 chkdata ^= i;
581 1 while (!TI);
582 1
583 1 TI = 0; //发送命令码
584 1 i = (unsigned char)((g_cCommand >>8) & 0xFF);
585 1 SBUF = i;
586 1 chkdata ^= i;
587 1 while (!TI);
588 1
589 1 TI = 0; //状态字
590 1 SBUF = 0;
591 1 while (!TI);
592 1
593 1 chkdata ^= g_cIcdevH ^ g_cIcdevL;
594 1 for (i=0; i<answernum; i++)
595 1 {
596 2 TI = 0;
597 2 chkdata ^= *(answerdata+i);
598 2 SBUF = *(answerdata+i);
599 2 while (!TI);
600 2 if (*(answerdata + i) == 0xAA)
601 2 {
602 3 TI = 0;
603 3 SBUF = 0;
604 3 while (!TI);
605 3 }
606 2 }
607 1
608 1 TI = 0; //效验字
609 1 SBUF = chkdata;
610 1 while(!TI);
611 1
612 1 if (chkdata == 0xAA)
613 1 {
C51 COMPILER V8.05a MAIN 07/05/2010 23:34:44 PAGE 11
614 2 TI=0;
615 2 SBUF=0;
616 2 while (!TI);
617 2 }
618 1
619 1 TI = 0;
620 1 ES = 1;
621 1 }
622
623 /////////////////////////////////////////////////////////////////////
624 //未能正确执行上位机指令,应答
625 //input:faultcode = 错误代码
626 /////////////////////////////////////////////////////////////////////
627 void AnswerErr(char faultcode)
628 {
629 1 unsigned char i,chkdata;
630 1 chkdata = 0;
631 1
632 1 TI = 0; //发送命令头
633 1 SBUF = 0xAA;
634 1 while (!TI);
635 1 TI = 0;
636 1 SBUF = 0xBB;
637 1 while (!TI);
638 1
639 1 TI = 0; //发送长度字
640 1 SBUF = 0x06;
641 1 while (!TI);
642 1 TI = 0;
643 1 SBUF = 0x00;
644 1 while (!TI);
645 1
646 1 TI = 0; //发送设备标识
647 1 SBUF = g_cIcdevH;
648 1 while (!TI);
649 1 if (g_cIcdevH == 0xAA)
650 1 {
651 2 TI = 0;
652 2 SBUF = 0;
653 2 while (!TI);
654 2 }
655 1 TI = 0;
656 1 SBUF = g_cIcdevL;
657 1 while (!TI);
658 1 if (g_cIcdevL == 0xAA)
659 1 {
660 2 TI = 0;
661 2 SBUF = 0;
662 2 while (!TI);
663 2 }
664 1
665 1 TI = 0; //发送命令码
666 1 i = (unsigned char)(g_cCommand & 0xFF);
667 1 SBUF = i;
668 1 chkdata ^= i;
669 1 while (!TI);
670 1
671 1 TI = 0; //发送命令码
672 1 i = (unsigned char)((g_cCommand >>8) & 0xFF);
673 1 SBUF = i;
674 1 chkdata ^= i;
675 1 while (!TI);
C51 COMPILER V8.05a MAIN 07/05/2010 23:34:44 PAGE 12
676 1
677 1 TI = 0; //发送错误代码
678 1 SBUF = faultcode;
679 1 while (!TI);
680 1
681 1 chkdata = g_cIcdevH ^ g_cIcdevL ^ faultcode;
682 1 TI = 0; //效验字
683 1 SBUF = chkdata;
684 1 while (!TI);
685 1
686 1 TI = 0;
687 1 ES = 1;
688 1 }
689
690 /////////////////////////////////////////////////////////////////////
691 //串行中断,接收上位机数据
692 /////////////////////////////////////////////////////////////////////
693 seri_int () interrupt 4 using 1
694 {
695 1 unsigned int i,j;
696 1 unsigned char rece_data = SBUF;
697 1 unsigned char verify = 0;
698 1 if (RI)
699 1 {
700 2 RI = 0;
701 2 if (g_bReceAA)
702 2 {
703 3 g_bReceAA = 0;
704 3 switch (rece_data)
705 3 {
706 4 case 0x00:
707 4 break;
708 4 case 0xBB:
709 4 g_cReceNum = 0;
710 4 break;
711 4 default:
712 4 i = g_cReceNum;
713 4 g_cReceBuf[i] = rece_data;
714 4 break;
715 4 }
716 3 }
717 2 else
718 2 {
719 3 switch (rece_data)
720 3 {
721 4 case 0xAA:
722 4 g_bReceAA = 1;
723 4 default:
724 4 i = g_cReceNum++;
725 4 g_cReceBuf[i] = rece_data;
726 4 break;
727 4 }
728 3 }
729 2 i = (((unsigned int)(g_cReceBuf[1]<<8)) + (unsigned int)(g_cReceBuf[0]));
730 2 if ((g_cReceNum == i + 2) && ( i != 0 ))
731 2 {
732 3 for (j=1; j<g_cReceNum; j++)
733 3 { verify ^= g_cReceBuf[j]; }
734 3 if (!verify)
735 3 {
736 4 g_bReceOk = 1;
737 4 g_cCommand = (((unsigned int)(g_cReceBuf[5]<<8)) + (unsigned int)(g_cReceBuf[4]));
C51 COMPILER V8.05a MAIN 07/05/2010 23:34:44 PAGE 13
738 4 g_bReceAA = 0;
739 4 ES = 0;
740 4 }
741 3 }
742 2
743 2 if (g_cReceNum >= sizeof(g_cReceBuf))
744 2 { g_cReceNum=0; }
745 2 }
746 1 if (TI)
747 1 { TI = 0; }
748 1 }
749
750
751 /////////////////////////////////////////////////////////////////////
752 //用T2做延时子程序
753 /////////////////////////////////////////////////////////////////////
754 void DelayMs(unsigned int _MS)
755 {
756 1 RCAP2LH = RCAP2_1ms;
757 1 T2LH = RCAP2_1ms;
758 1
759 1 ET2 = 0; // Disable timer2 interrupt
760 1 T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
761 1 TR2 = 1;
762 1 while (_MS--)
763 1 { while (!TF2);TF2 = 0; }
764 1 TR2 = 0;
765 1 }
766 void Delay_50us(unsigned char _50us)
767 {
768 1 RCAP2LH = RCAP2_50us;
769 1 T2LH = RCAP2_50us;
770 1
771 1 ET2 = 0; // Disable timer2 interrupt
772 1 T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
773 1 while (_50us--)
774 1 { while (!TF2);TF2 = 0; }
775 1 TR2 = 0;
776 1 }
777
778
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1982 ----
CONSTANT SIZE = 12 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 20
IDATA SIZE = 64 ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -