📄 hicj6.lst
字号:
614 3 Write1B(0,175+i); // Clear Break_Bak
615 3 }
616 2 for(i=200;i<240;i++)
617 2 {
618 3 Write1B(0x21,i);
619 3 }
620 2 for(i=240;i<255;i++)
621 2 {
622 3 Write1B(0xff,i);
623 3 }
624 2 Write1B(0x80,255); //Start
625 2 for(i=0;i<40;i++) //House Code
626 2 {
627 3 Write1B(1,i*3+0x100);
628 3 j=((i+1)/10)*16+(i+1)%10;
629 3 Write1B(j,i*3+1+0x100);
630 3 Write1B(0,i*3+2+0x100);
631 3 }
632 2 for(i=120;i<160;i++)
633 2 {
634 3 Write1B(0x36,i+0x100);
635 3 }
636 2 for(i=200;i<240;i++)
637 2 {
638 3 Write1B(0x87,i+0x100); //最大负荷
639 3 }
640 2
641 2
642 2 Write1B(1,240+0x100);
643 2 Write1B(0,241+0x100);
644 2
645 2 }
646 1
647 1 for(i=0;i<5;i++)
648 1 {
649 2 Hdd_En[i]=Read1B(250+i);
650 2 Short_En[i]=Read1B(240+i);
651 2 Break_En[i]=Read1B(245+i);
652 2 }
653 1 for(i=0;i<40;i++)
654 1 {
655 2 HddVal[i]=0;
656 2 }
657 1 Station=Read1B(164);
658 1 // Write1B(0x0,255);
659 1 House=House_Max-1;
660 1 Start=Read1B(255);
661 1 Relay_Station=Read1B(0x100+240);
662 1
663 1 }
664
665
666 /**********************************************************
667 *名 称:InitTimer
668 *功 能:定时器初始化
669 *说 明:
670 *调 用:
671 *入口参数:无
672 *返 回 值:无
673 ***********************************************************/
674 void InitTimer(void)
675 {
C51 COMPILER V7.50 HICJ6 07/20/2005 09:16:51 PAGE 12
676 1 TMOD=0x22; /*定时器1为模式2(8位自动重装),
677 1 定时器0为模式2(8位自动重装) */
678 1 PCON=00;
679 1
680 1 TR0=0; //在发送或接收才开始使用
681 1 TF0=0;
682 1 TH0=(256-192); //4800bps 就是 1000000/4800=208.333微秒 执行的
683 1 //timer是 208.333*11.0592/12= 192
684 1
685 1 TL0=TH0;
686 1
687 1
688 1
689 1 TH1=0xfa; //9600-FD 4800-FA 2400-F4 1200-E8 300-A0
690 1 TL1=0xfa;
691 1 SCON=0x50;
692 1
693 1 T2CON = 0x04; //定时器2为16位自动重装,递增计数
694 1 T2MOD = 0x00;
695 1 TH2 = 0xb8; //dc 10ms
696 1 TL2 = 0x00;
697 1 RCAP2H = 0xb8; //20ms定时
698 1 RCAP2L = 0x00; //11.0592M晶振,
699 1 //20000*11.0592/12=0x4800 0x100-0x48=0xb8
700 1
701 1 IP=0x10; //串口中断为高优先级,定时器2低优先级
702 1 ET2=1;
703 1
704 1 ET0=1;
705 1 // EX1=1;
706 1 ES=1;
707 1
708 1 TR1=1;
709 1 // ET1=1;
710 1
711 1 EA=1;
712 1 TI=0;
713 1
714 1 }
715 /**********************************************************
716 *名 称:InitDD
717 *功 能:电度口状态初始化
718 *说 明:
719 *调 用:
720 *入口参数:无
721 *返 回 值:无
722 ***********************************************************/
723 void InitDD(void)
724 {
725 1 BYTE data i,j,P1_Tmp;
726 1
727 1 for (i=0;i<5;i++) //初始化电度状态 Hdd_New[10][5]
728 1 {
729 2 for(j=0;j<8;j++)
730 2 {
731 3 P1_Tmp=1<<(i+3);
732 3 P1_Tmp=~P1_Tmp&0xf8;
733 3 P1=P1_Tmp|A8_A10[j];
734 3 long_delay();
735 3 if(Hdd==0)
736 3 {
737 4 Hdd_Old[i]|=(1<<j);
C51 COMPILER V7.50 HICJ6 07/20/2005 09:16:51 PAGE 13
738 4 }
739 3 else
740 3 {
741 4 Hdd_Old[i]&=~(1<<j);
742 4 }
743 3
744 3 }
745 2 Hdd_New_Bak[i]=Hdd_Old[i];
746 2 Hdd_Old_Bak[i]=Hdd_Old[i];
747 2 }
748 1
749 1 }
750
751
752 /**********************************************************
753 *名 称:WatchDog
754 *功 能:清看门狗
755 *说 明:
756 *调 用:
757 *入口参数:无
758 *返 回 值:无
759 ***********************************************************/
760 /*
761 void WatchDog(void)
762 {
763 WDT=0x1e;
764 WDT=0xe1;
765 }
766 */
767
768 /**********************************************************
769 *名 称:Init
770 *功 能:初始化
771 *说 明:
772 *调 用:
773 *入口参数:无
774 *返 回 值:无
775 ***********************************************************/
776
777 void Init()
778 {
779 1 BYTE data i;
780 1
781 1 for(i=0;i<40;i++)
782 1 {
783 2 Hdd10s[i]=0;
784 2 TrsOffCount[i]=0;
785 2 }
786 1 for(i=0;i<5;i++)
787 1 {
788 2 RelayOff[i]=0;
789 2 TrsRelayOff[i]=0;
790 2 Keep_Flag[i]=0;
791 2 }
792 1
793 1
794 1 Sp_Flag=0;
795 1 Key_Count=0;
796 1 Key_New=Key_Old=Key;
797 1 Ac_Old=~Ac_Check;
798 1 Press_Count=1000;
799 1 Rcv_Wp=0;
C51 COMPILER V7.50 HICJ6 07/20/2005 09:16:51 PAGE 14
800 1 Rcv_Rp=0;
801 1 Run_Count=0;
802 1 HddEn_Count=1;
803 1 ms500=0;
804 1 Hdd_Wp=0;
805 1 WriteOrder=0;
806 1 LedTest();
807 1 InitFram();
808 1 InitDD();
809 1 ShowVer();
810 1 InitTimer();
811 1 //WatchDog();
812 1
813 1 }
814
815 /**********************************************************
816 *名 称:Hdd_Check
817 *功 能:电度采集处理
818 *说 明:
819 *调 用:
820 *入口参数:无
821 *返 回 值:无
822 ***********************************************************/
823
824 void Hdd_Check(void)
825 {
826 1 BYTE i,j;
827 1 BYTE Hdd_Tmp[5];
828 1 // BYTE Constant_Range,Range;
829 1
830 1 for (i=0;i<5;i++)
831 1 {
832 2 /* if(Press_Count==101)
833 2 {
834 2 if(Short_New[i]^Short_Old[i]) Alarm_Check=1;
835 2 Short_Old[i]=Short_New[i];
836 2 }
837 2 */
838 2 // Run=1;
839 2 Hdd_Tmp[i]=Hdd_New[Hdd_Rp][i]^Hdd_Old[i];
840 2 Hdd_Old[i]=Hdd_New[Hdd_Rp][i];
841 2
842 2 if(Hdd_Tmp[i]) //有变位
843 2 {
844 3 for(j=0;j<8;j++)
845 3 {
846 4 if(Hdd_Tmp[i]&(1<<j))
847 4 {
848 5 Keep_Count[i*8+j]=0;
849 5 Keep_Flag[i]|=(1<<j);
850 5 //Ac_Count[i*8+j]++;
851 5 }
852 4 }
853 3
854 3 }
855 2 else //无变位
856 2 {
857 3 if(Keep_Flag[i])
858 3 {
859 4 for(j=0;j<8;j++)
860 4 {
861 5 if(Keep_Flag[i]&(1<<j))
C51 COMPILER V7.50 HICJ6 07/20/2005 09:16:51 PAGE 15
862 5 {
863 6 Keep_Count[i*8+j]++;
864 6 if(Keep_Count[i*8+j]>Smooth)
865 6 {
866 7 Keep_Count[i*8+j]=0;
867 7 Keep_Flag[i]&=~(1<<j);
868 7 Hdd_New_Bak[i]&=~(1<<j);
869 7 if (Hdd_New[Hdd_Rp][i]&(1<<j))
870 7 {
871 8 Hdd_New_Bak[i]|=(1<<j);
872 8 }
873 7 }
874 6 }
875 5 }
876 4 }
877 3 }
878 2 }
879 1
880 1
881 1 for(i=0;i<5;i++)
882 1 {
883 2 Hdd_Tmp[i]=Hdd_New_Bak[i]^Hdd_Old_Bak[i]&Hdd_New_Bak[i];
884 2 Hdd_Old_Bak[i]=Hdd_New_Bak[i];
885 2 if(Hdd_Tmp[i])
886 2 {
887 3 for(j=0;j<8;j++)
888 3 {
889 4 if(Hdd_Tmp[i]&(1<<j))
890 4 {
891 5 HddVal[i*8+j]++;
892 5 Hdd10s[i*8+j]++;
893 5 Pulse=1;
894 5 if(Press_Count<1000) Key_Press=1;
895 5
896 5
897 5 }
898 4 }
899 3 }
900 2 }
901 1
902 1 // Run=0;
903 1 Hdd_Rp++;
904 1 if(Hdd_Rp==10) Hdd_Rp=0;
905 1 }
906
907
908 /**********************************************************
909 *名 称:Bat_Check
910 *功 能:电池剩余电量显示
911 *说 明:
912 *调 用:
913 *入口参数:无
914 *返 回 值:无
915 ***********************************************************/
916 void Bat_Check(void)
917 {
918 1 BYTE data i,Battery;
919 1 Ac_Check=1;
920 1 Ac_New=Ac_Check;
921 1 Ac_Tmp=Ac_New^Ac_Old;
922 1 Ac_Old=Ac_New;
923 1
C51 COMPILER V7.50 HICJ6 07/20/2005 09:16:51 PAGE 16
924 1 //if (Ac_Tmp)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -