📄 appli.lst
字号:
721 2 send_buf[1] = ADDRESS[1]; /* 开发板地址 */
722 2 send_buf[2] = 0x08; /* 数据长度低字节 */
723 2 send_buf[3] = 0x00; /* 数据长度高字节 */
724 2 send_buf[4] = 0x34; /* 消息类型:时间数据 */
725 2 for (i=0; i<7; i++)
726 2 {
727 3 send_buf[i+5] = date[i]; /* 时间数据7位:年,月,日,星期,时,分,秒*/
728 3 }
729 2 send_buf[12] = 0x03;
730 2
731 2 crc_data = CalCRC16_1021(send_buf, 13);
732 2
733 2 send_buf[13] = ( crc_data & 0x00ff ); /* 校验位低字节 */
734 2 send_buf[14] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */
735 2
C51 COMPILER V7.09 APPLI 10/09/2005 20:45:34 PAGE 13
736 2 com_send_command(SYN); /* 发送数据 */
737 2 com_send_command(SYN);
738 2 com_send_command(STX);
739 2 for (i=0; i<15; i++)
740 2 {
741 3 com_send_command(send_buf[i]);
742 3 }
743 2 break;
744 2
745 2 case MSG_CUR_DATA : /* 请求当前数据 */
746 2
747 2 analog_in_data = adc_1549();
748 2
749 2 send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
750 2 send_buf[1] = ADDRESS[1]; /* 开发板地址 */
751 2 send_buf[2] = 0x06; /* 数据长度低字节 */
752 2 send_buf[3] = 0x00; /* 数据长度高字节 */
753 2 send_buf[4] = 0x35; /* 消息类型:当前数据 */
754 2
755 2 send_buf[5] = cur_lumin; /* 当前光强 */
756 2 send_buf[6] = cur_temp; /* 当前温度 */
757 2 send_buf[7] = (analog_in_data & 0x00ff); /* 模拟量输入低字节 */
758 2 send_buf[8] = ( (analog_in_data >> 8) & 0x00ff ); /* 模拟量输入高字节 */
759 2
760 2 if (SWITCH_IN)
761 2 send_buf[9] = 0x00; /* 当前开关量为1,断开 */
762 2 else
763 2 send_buf[9] = 0x01; /* 当前开关量为0,闭合 */
764 2
765 2 send_buf[10] = 0x03;
766 2
767 2 crc_data = CalCRC16_1021(send_buf, 11);
768 2
769 2 send_buf[11] = ( crc_data & 0x00ff ); /* 校验位低字节 */
770 2 send_buf[12] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */
771 2
772 2 com_send_command(SYN); /* 发送数据 */
773 2 com_send_command(SYN);
774 2 com_send_command(STX);
775 2 for (i=0; i<13; i++)
776 2 {
777 3 com_send_command(send_buf[i]);
778 3 }
779 2 break;
780 2
781 2 case MSG_WATCHDOG : /* 请求看门狗信息 */
782 2
783 2 send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
784 2 send_buf[1] = ADDRESS[1]; /* 开发板地址 */
785 2 send_buf[2] = 0x08; /* 数据长度低字节 */
786 2 send_buf[3] = 0x00; /* 数据长度高字节 */
787 2 send_buf[4] = 0x36; /* 消息类型:看门狗信息 */
788 2
789 2 for (i=0; i<7; i++)
790 2 {
791 3 send_buf[i+5] = watchdog_date[i]; /* 看门狗数据7位:年,月,日,星期,时,分,秒*/
792 3 }
793 2 send_buf[12] = 0x03;
794 2
795 2 crc_data = CalCRC16_1021(send_buf, 13);
796 2
797 2 send_buf[13] = ( crc_data & 0x00ff ); /* 校验位低字节 */
C51 COMPILER V7.09 APPLI 10/09/2005 20:45:34 PAGE 14
798 2 send_buf[14] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */
799 2
800 2 com_send_command(SYN); /* 发送数据 */
801 2 com_send_command(SYN);
802 2 com_send_command(STX);
803 2 for (i=0; i<15; i++)
804 2 {
805 3 com_send_command(send_buf[i]);
806 3 }
807 2 break;
808 2
809 2 case MSG_ALARM_STATE : /* 请求报警情况 */
810 2
811 2 send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
812 2 send_buf[1] = ADDRESS[1]; /* 开发板地址 */
813 2 send_buf[2] = 0x02; /* 数据长度低字节 */
814 2 send_buf[3] = 0x00; /* 数据长度高字节 */
815 2 send_buf[4] = 0x37; /* 消息类型:报警状态 */
816 2
817 2 send_buf[5] = 0x00;
818 2 if (SWITCH_IN)
819 2 {
820 3 send_buf[5] |= 0x01; /* 开关量输入为1 */
821 3 }
822 2 else
823 2 {
824 3 send_buf[5] &= 0xfe; /* 开关量输入为0 */
825 3 }
826 2
827 2
828 2 if (cur_temp <= alarm_limit.lumin_uthreshold) /* 当前光强小于超低光强阈值 */
829 2 {
830 3 send_buf[5] |= 0x02;
831 3 }
832 2 else if (cur_temp >= alarm_limit.lumin_othreshold) /* 当前光强大于超高光强阈值 */
833 2 {
834 3 send_buf[5] |= 0x04;
835 3 }
836 2 else
837 2 {
838 3 send_buf[5] &= 0xf9; /* 光强无报警 */
839 3 }
840 2
841 2 if (cur_temp <= alarm_limit.temp_uthreshold) /* 当前温度小于超低温度阈值 */
842 2 {
843 3 send_buf[5] |= 0x08;
844 3 }
845 2 else if (cur_temp >= alarm_limit.temp_othreshold) /* 当前温度大于超高温度阈值 */
846 2 {
847 3 send_buf[5] |= 0x10;
848 3 }
849 2 else
850 2 {
851 3 send_buf[5] &= 0xe7; /* 温度无报警 */
852 3 }
853 2
854 2 send_buf[6] = 0x03;
855 2
856 2 crc_data = CalCRC16_1021(send_buf, 7);
857 2
858 2 send_buf[7] = ( crc_data & 0x00ff ); /* 校验位低字节 */
859 2 send_buf[8] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */
C51 COMPILER V7.09 APPLI 10/09/2005 20:45:34 PAGE 15
860 2
861 2 com_send_command(SYN); /* 发送数据 */
862 2 com_send_command(SYN);
863 2 com_send_command(STX);
864 2 for (i=0; i<9; i++)
865 2 {
866 3 com_send_command(send_buf[i]);
867 3 }
868 2 break;
869 2
870 2 case MSG_GET_ADDRESS : /* 请求设备地址 */
871 2
872 2 send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
873 2 send_buf[1] = ADDRESS[1]; /* 开发板地址 */
874 2 send_buf[2] = 0x03; /* 数据长度低字节 */
875 2 send_buf[3] = 0x00; /* 数据长度高字节 */
876 2 send_buf[4] = 0x39; /* 消息类型:设备地址 */
877 2
878 2 send_buf[5] = ADDRESS[0]; /* 通讯组地址 */
879 2 send_buf[6] = ADDRESS[1]; /* 开发板地址 */
880 2
881 2 send_buf[7] = 0x03;
882 2
883 2 crc_data = CalCRC16_1021(send_buf, 8);
884 2
885 2 send_buf[8] = ( crc_data & 0x00ff ); /* 校验位低字节 */
886 2 send_buf[9] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */
887 2
888 2 com_send_command(SYN); /* 发送数据 */
889 2 com_send_command(SYN);
890 2 com_send_command(STX);
891 2 for (i=0; i<10; i++)
892 2 {
893 3 com_send_command(send_buf[i]);
894 3 }
895 2 break;
896 2
897 2 case MSG_ACK:
898 2 send_command(ACK);
899 2 break;
900 2
901 2 case MSG_NAK:
902 2 send_command(NAK);
903 2 break;
904 2
905 2 default:
906 2 break;
907 2 }
908 1 }
909
910 /* 系统上电初始化 */
911 void system_init(void)
912 {
913 1 u_char loop;
914 1
915 1 EA = 0; /* CPU关中断 */
916 1 pint_read = 0; /* 串口中断读指针 */
917 1 pint_write = 0; /* 串口中断写指针 */
918 1 msg_readp = 0; /* msg读指针 */
919 1 msg_writep = 0; /* msg写指针 */
920 1 msg_number = 0; /* 消息数 */
921 1 prec_num=0;
C51 COMPILER V7.09 APPLI 10/09/2005 20:45:34 PAGE 16
922 1
923 1 /* 初始化定时器变量 */
924 1 for (loop=0; loop<MAX_TNUM; loop++)
925 1 {
926 2 timer_sign[loop] = 0; /* 定时标志 1:开始 */
927 2 timer_type[loop] = 0; /* 定时类型 0:一般 1:循环 */
928 2 timer_len[loop] = 0; /* 时长 100ms 的倍数 */
929 2 timer_count[loop] = 0; /* 定时计数 */
930 2 timer_map[loop] = loop;
931 2 timer_id[loop] = 0;
932 2 }
933 1 timer_number = 0;
934 1 timer_int = 0;
935 1 int_times = 0;
936 1 /* 初始化定时器变量结束 */
937 1
938 1 SCON = 0x48;
939 1 PCON = 0x80;
940 1 TMOD = 0x21;
941 1 TCON = 0x54;
942 1 TH1 = 0xFD; /* 波特率为19200 */
943 1 TL1 = 0xFD;
944 1 TR1 = 1; /* 定时器1启动计数*/
945 1 TH0 = -(46080 / 256);/* 定时50毫秒*/
946 1 TL0 = -(46080 % 256);
947 1 TR0 = 1; /* 定时器0启动计数*/
948 1 ES = 1; /* 串口开中断 */
949 1 ET0 = 1; /* 定时器0开中断 */
950 1 PT0 = 1; /* 定时器高优先级 */
951 1 PS = 0; /* 串口低优先级 */
952 1 REN = 1; /* 串口接收允许 */
953 1 EX1 = 1; /* 开外部中断1 */
954 1 EA = 1; /* 开CPU中断 */
955 1
956 1 loop = SBUF; /* 清串口缓冲区 */
957 1 for (loop=0; loop<MAX_RINTL; loop++)
958 1 {
959 2 pint_buf[loop] = 0;
960 2 }
961 1 }
962
963 /* 查询是否有系统消息 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -