📄 straincollector.lst
字号:
650 1 send_char(g_cmdData[CMDDLEN]);
651 1 crc ^= g_cmdData[CMDDLEN];
652 1
653 1 for (i=1; i<=g_cmdData[CMDDLEN]; i++)
654 1 {
655 2 send_char(g_cmdData[CMDDLEN+i]);
656 2 crc ^= g_cmdData[CMDDLEN+i];
657 2
658 2 }
659 1 send_char(crc);
660 1 delay10ms();
661 1 }
662
663 /******************************************
664 通过串口想管理器发送采集到的应变数据,
665 输入:g_cmdData, g_strainData, g_gaugeFlag。
666 *****************************************/
667 void send_data()
668 {
669 1 uchar i=0, mark=1, crc = 0, j=0;
670 1 g_sendcmdData[CMD] = 0x11;
671 1 g_sendcmdData[CMDDLEN] = 0;
672 1 for(i=0; i<8; i++)
673 1 {
674 2 if(g_strainflag & mark)
675 2 g_sendcmdData[CMDDLEN] += 6;
C51 COMPILER V8.02 STRAINCOLLECTOR 10/08/2002 23:21:00 PAGE 12
676 2 mark <<= 1;
677 2 }
678 1
679 1 mark = 1;
680 1 // SBUF = STARTFLAG;
681 1 send_char(STARTFLAG);
682 1 crc ^= STARTFLAG;
683 1 send_char(g_sendcmdData[CMD]);
684 1 crc ^= g_sendcmdData[CMD];
685 1 send_char(TID);
686 1 crc ^= TID;
687 1 send_char(MID);
688 1 crc ^= MID;
689 1 send_char(g_sendcmdData[CMDDLEN]);
690 1 crc ^= g_sendcmdData[CMDDLEN];
691 1 for(i=0; i<8; i++)
692 1 {
693 2 if(g_strainflag & mark)
694 2 {
695 3 send_char(i);
696 3 for(j=0; j<5; j++)
697 3 {
698 4 send_char(g_strainData[i][j]);
699 4 crc ^= g_strainData[i][j];
700 4 }
701 3 }
702 2 mark <<= 1;
703 2 }
704 1 send_char(crc);
705 1 delay10ms();
706 1 }
707 /******************************************
708 方波产生函数
709
710 *****************************************/
711 void SW_Gen(uchar th, uchar tl)
712 {
713 1 P1_7 =! P1_7;
714 1 flag++;
715 1 TH0 = th;
716 1 TL0 = tl;
717 1
718 1 }
719
720 void set_timeout(uchar msec)
721 {
722 1 // 关闭定时器1
723 1 TR1 = 0; //启动T0
724 1 ET1 = 0; //允许定时器0中断
725 1
726 1 // 50ms
727 1 //TH1 = 0x3C;
728 1 //TL1 = 0xB0;
729 1 SET50MS1();
730 1 g_totimes = msec;
731 1 BTIMEOUT = 0;
732 1
733 1 // 启动定时器1
734 1 TR1 = 1;
735 1 ET1 = 1;
736 1 }
737
C51 COMPILER V8.02 STRAINCOLLECTOR 10/08/2002 23:21:00 PAGE 13
738
739 /******************************************
740 设置工作的Timeout时间
741 1. 设置定时器1的Timeout时间。
742 2. 启动定时器1
743 *****************************************/
744 void set_50ms(uchar times)
745 {
746 1 // 关闭定时器1
747 1 TR1 = 0; //启动T0
748 1 ET1 = 0; //允许定时器0中断
749 1
750 1 // 50ms
751 1 //TH1 = 0x3C;
752 1 //TL1 = 0xB0;
753 1 SET50MS1();
754 1 g_totimes = times;
755 1
756 1 // 启动定时器1
757 1 TR1 = 1;
758 1 ET1 = 1;
759 1 }
760
761 /******************************************
762 设置工作的Timeout时间
763 1. 设置定时器1的Timeout时间。
764 2. 启动定时器1
765 *****************************************/
766 void update_timeout()
767 {
768 1 // 关闭定时器1
769 1 TR1 = 0; //启动T0
770 1 ET1 = 0; //允许定时器0中断
771 1
772 1 // 50ms
773 1 //TH1 = 0x3C;
774 1 //TL1 = 0xB0;
775 1 SET50MS1();
776 1
777 1 if (BSLPFLG)
778 1 { // 设置在浅休眠状态下的Timeout时间:0.5s
779 2 g_totimes = 10;
780 2 }
781 1 else
782 1 {
783 2 // 设置在工作状态下的Timeout时间:2s?
784 2 g_totimes = 40;
785 2 }
786 1
787 1 // 启动定时器1
788 1 TR1 = 1;
789 1 ET1 = 1;
790 1 }
791 /******************************************
792 设置休眠时间并进入休眠状态
793 。
794 *****************************************/
795 void shallow_sleep()
796 {
797 1 // 关闭无线通信电源
798 1 P3_7 = 1;
799 1 // 关闭采集电路电源
C51 COMPILER V8.02 STRAINCOLLECTOR 10/08/2002 23:21:00 PAGE 14
800 1 P3_6 = 1;
801 1 // P4_3 = 1;
802 1 // EX0 = 0;
803 1 // P4 = 0x07;
804 1 P3_5 = 1;
805 1 BSLPFLG = 1;
806 1
807 1 // close interrupt except ex1
808 1 ET1 = 0;
809 1 P8563_set3s();
810 1 PCON = 0x02; //单片机进入掉电模式
811 1 }
812
813 void deep_sleep()
814 {
815 1 // 关闭无线通信电源
816 1 P3_7 = 1;
817 1 // 关闭采集电路电源
818 1 P3_6 = 1;
819 1 // P4_3 = 1;
820 1 // EX0 = 0;
821 1 // P4 = 0x07;
822 1 P3_5 = 1;
823 1 BSLPFLG = 1;
824 1
825 1 // close interrupt except ex1
826 1 ET1 = 0;
827 1 P8563_setAlarm();
828 1 PCON = 0x02; //单片机进入掉电模式
829 1 }
830
831 /******************************************
832 设置深度休眠的唤醒时间
833 输入:g_dslpTime[7]
834 输出:通过I2C总线将数据传到外部定时器
835 *****************************************/
836 void set_wake_time()
837 {
838 1 uchar i;
839 1 for(i=0;i<7;i++)
840 1 {
841 2 writeData(i+2,g_dslpTime[i]);
842 2 }
843 1 }
844 /******************************************
845 wait for wake
846 设置浅睡眠的Timeout时间
847 从串口读取唤醒标记
848 如果Timeout时间到,则转入休眠
849 读到唤醒标记后,设置工作标志进入工作状态。
850 输出:修改statusFlag,进入工作状态
851 *****************************************/
852 void wait_wake()
853 {
854 1 uchar c, times=3;
855 1 while (0 != times)
856 1 {
857 2 c = getchar();
858 2 if (ISTIMEOUT())
859 2 return;
860 2
861 2 // 在哪里?重置timeout时间
C51 COMPILER V8.02 STRAINCOLLECTOR 10/08/2002 23:21:00 PAGE 15
862 2 update_timeout();
863 2
864 2 if (WAKEMSG == c)
865 2 times--;
866 2 else
867 2 times = 3;
868 2 }
869 1
870 1 BSLPFLG = 0;
871 1 // todo: 重新设置工作状态的timeout时间
872 1
873 1 // 读取所有唤醒信号
874 1 while(c != WAKEMSGEND)
875 1 {
876 2 if (c != WAKEMSG)
877 2 break;
878 2
879 2 c = getchar();
880 2 if (ISTIMEOUT())
881 2 return;
882 2 }
883 1
884 1 }
885
886 /******************************************
887 接收到命令的起始位后返回
888
889 *****************************************/
890 void get_start_cmd()
891 {
892 1 uchar c = getchar();
893 1 while (STARTFLAG != c)
894 1 c = getchar();
895 1 }
896
897 /******************************************
898 接收命令(0xAA 0x01 0x13 0x01 0x00 B9),保存命令字、地址、CRC AA02130100BA YB AA03130100BB READ
899 输出:填充g_cmdData。
900 *****************************************/
901 void receive_cmd()
902 {
903 1 // TODO: add the timeout function
904 1 uchar c=0x00, crc = STARTFLAG;
905 1 uchar i;
906 1 for (i=0; i<20; i++)
907 1 g_cmdData[i] = 0x00;
908 1
909 1 get_start_cmd();
910 1 if (ISTIMEOUT())
911 1 return;
912 1 // get the cmd
913 1 g_cmdData[CMD] = getchar();
914 1 if (ISTIMEOUT())
915 1 return;
916 1 crc ^= g_cmdData[CMD];
917 1
918 1 g_cmdData[CMDTID] = getchar();
919 1 if (ISTIMEOUT())
920 1 return;
921 1 crc ^= g_cmdData[CMDTID];
922 1
923 1 g_cmdData[CMDMID] = getchar();
C51 COMPILER V8.02 STRAINCOLLECTOR 10/08/2002 23:21:00 PAGE 16
924 1 if (ISTIMEOUT())
925 1 return;
926 1 crc ^= g_cmdData[CMDMID];
927 1
928 1 g_cmdData[CMDDLEN] = getchar();
929 1 if (ISTIMEOUT())
930 1 return;
931 1 crc ^= g_cmdData[CMDDLEN];
932 1
933 1 // get data
934 1 for (i=0; i<g_cmdData[CMDDLEN]; i++)
935 1 {
936 2 g_cmdData[CMDDLEN+i+1] = getchar();
937 2 if (ISTIMEOUT())
938 2 return;
939 2 crc ^= g_cmdData[CMDDLEN+i+1];
940 2 }
941 1
942 1 g_cmdData[CMDCRC] = crc ^ getchar();
943 1
944 1 }
945
946 void Collect()
947 {
948 1 uchar i;
949 1 uchar f = 1;
950 1 // todo 开采集电路电源
951 1 P3_6 = 0;
952 1 // 是串口发
953 1 for (i=0; i<STNORNUM; i++, f <<= 1)
954 1 {
955 2 if ((g_strainflag & f) == 0)
956 2 {
957 3 continue;
958 3 }
959 2
960 2 // 选择相应的通道
961 2 P4 = i;
962 2 P1_5 = 0; //new change
963 2 BSWOVER = 0;
964 2 delay10ms();
965 2 // 开始发方波.
966 2 Init_Timer0INT();
967 2 while (!BSWOVER);
968 2
969 2 // 设置timeout时间
970 2 set_timeout(40);
971 2 BSDGOT = 0;
972 2 // 等待timeout,或者外部中断。
973 2 while (!BSDGOT)
974 2 {
975 3 if (BTIMEOUT)
976 3 break;
977 3 }
978 2 if(!BSDGOT)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -