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