原创 断电后还能运行的多时段开关定时器源程序

2009-12-27 23:10 2946 4 4 分类: MCU/ 嵌入式
                      汇编程序及注释

ORG 0000H ;程序执行开始地址


LJMP START ;跳到标号START执行


ORG 0003H ;外中断0中断程序入口


LJMP MENU


ORG 000BH ;定时器T0中断程序入口


LJMP INTT0 ;跳至INTTO执行


ORG 0013H ;外中断1中断程序入口


RETI ;外中断1中断返回


ORG 001BH ;定时器T1中断程序入口


RETI;LJMP INTT1 ;跳至INTT1执行


ORG 0023H ;串行中断程序入口地址


RETI ;串行中断程序返回



;; ;;



START: MOV R0,#30H ;30-7F 80个内存单元


MOV R7,#50H ;


CLEARDISP: MOV @R0,#00H ;


INC R0 ;


DJNZ R7,CLEARDISP ;


CLR 00H ;清转存位


CLR 01H ;清是否改定时判断位


CLR 02H ;清第1路定时判断位


CLR 03H ;清第2路定时判断位


CLR 04H ;清第3路定时判断位


CLR 05H ;清第4路定时判断位


CLR 06H ;清第5路定时判断位


CLR 07H ;清第6路定时判断位


CLR 08H ;清第7路定时判断位


CLR 09H ;清第8路定时判断位


CLR 0AH ;清第9路定时判断位


CLR 0BH ;清第10路定时判断位


CLR 0CH ;清第11路定时判断位


CLR 0DH ;清第12路定时判断位


CLR P3.6 ;清输出口


MOV IP,#02H;时钟优先


MOV TMOD,#01H ;T0T116位定时器


MOV TL0,#0B0H ;50MS定时初值(T0计时用)


MOV TH0,#3CH ;50MS定时初值


SETB EA ;总中断开放


SETB EX0 ;允许外部中断即调试


SETB ET0 ;允许T0中断


SETB TR0 ;开启T0定时器


MOV R4,#14H ;1秒定时用初值(50MS×20


   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;;;时间显示主程序包括对定时判断程序的调用;;;;


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




TIMER:



MOV 30H,#14


      MOV 31H,#14;第七八位不显示


      ;把小时存储区70H解析到第56显示位缓冲区


      LCALL DISPLAY         ;


      MOV A,70H


      ANL A,#0FH ;高四位变0


      MOV 33H,A


      MOV A,70H


      SWAP A ;A中数据高四位与低四位交换


      ANL A,#0FH ;高四位变0


      MOV 32H,A


     ;把分存储区71H解析到第34显示位缓冲区


      MOV A,71H


      ANL A,#0FH ;高四位变0


      MOV 35H,A


      MOV A,71H


      SWAP A ;A中数据高四位与低四位交换


      ANL A,#0FH ;高四位变0


      MOV 34H,A


      ;把秒存储区72H解析到第12显示位缓冲区


      MOV A,72H


      ANL A,#0FH ;高四位变0


      MOV 37H,A


      MOV A,72H


      SWAP A ;A中数据高四位与低四位交换


      ANL A,#0FH ;高四位变0


      MOV 36H,A


      LCALL DISPLAY;调用显示程序


       LCALL TIMERCOMPARE;调用定时判断程序


      AJMP  TIMER ;返回循环执行



  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;;;定时器中断处理程序包括对秒分时的增长处理;;;;


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



INTT0:


MOV 76H,R0 ;R0内数据暂存到76H


PUSH ACC ;累加器入栈保护


PUSH PSW ;状态字入栈保护


CLR ET0 ;T0中断允许


CLR TR0 ;关闭定时器T0


MOV A,#0B7H ;中断响应时间同步修正


ADD A,TL0 ;8位初值修正


MOV TL0,A ;重装初值(低8位修正值)


MOV A,#3CH ;8位初值修正


ADDC A,TH0 ;


MOV TH0,A ;重装初值(高8位修正值)


SETB TR0 ;开启定时器T0


DJNZ R4, OUTT0 ;20次中断未到中断退出


ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值


MOV R0,#72H ;指向秒计时单元(71H-72H


ACALL ADD1 ;调用加1程序(加1秒操作)


MOV A,72H ;秒数据放入AR32位十进制数组合)


CLR C ;清进位标志


CJNE A,#60H,ADDMM ;


ADDMM: JC OUTT0 ;小于60秒时中断退出


ACALL CLR0 ;大于或等于60秒时对秒计时单元清0



MOV R0,#71H ;指向分计时单元(76H-77H


ACALL ADD1 ;分计时单元加1分钟


MOV A,71H ;分数据放入A


CLR C ;清进位标志


CJNE A,#60H,ADDHH ;


ADDHH: JC OUTT0 ;小于60分时中断退出


ACALL CLR0 ;大于或等于60分时分计时单元清0


MOV R0,#70H ;指向小时计时单元(78H-79H


ACALL ADD1 ;小时计时单元加1小时


MOV A,70H ;时数据放入A


CLR C ;清进位标志


CJNE A,#24H,HOUR ;


HOUR: JC OUTT0 ;小于24小时中断退出


ACALL CLR0 ;大于或等于24小时小时计时单元清0


OUTT0: MOV R0,76H


POP PSW ;恢复状态字(出栈)


POP ACC ;恢复累加器


SETB ET0 ;开放T0中断


RETI ;中断返回




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;; 1 ;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;


ADD1: MOV A,@R0 ;取当前计时单元数据到A


ADD A,#01H ;A1操作


DA A ;十进制调整


MOV @R0,A


RET ;子程序返回



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;; 清零子程 ;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;


CLR0: CLR A ;清累加器


MOV @R0,A ;清当前地址单元


RET ;子程序返回



 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;调整时间子程序;;;;;;;;;;;;;;;;;;


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


  MENU:


  LCALL DISPLAY


  LCALL DISPLAY ;延时


   JB P3.2,BACK ;判断是否是干扰,是则返回


 JUDJE1:LCALL DISPLAY


      JNB P3.2 ,JUDJE1 ;等待按键松开,否则只调用显示程序


      MOV 3DH,#00H   ;3DH清零


 MENU2:  ;把路存储区3DH解析到第7显示位缓冲区


      MOV A,3DH


      ANL A,#0FH ;高四位变0


      MOV 31H,A


      MOV 30H,#16 ;第八位显示F


       ;把小时存储区70H解析到第56显示位缓冲区


      MOV A,70H


      ANL A,#0FH ;高四位变0


      MOV 33H,A


      MOV A,70H


      SWAP A ;A中数据高四位与低四位交换


      ANL A,#0FH ;高四位变0


      MOV 32H,A


    ;把分存储区71H解析到第34显示位缓冲区


      MOV A,71H


      ANL A,#0FH ;高四位变0


      MOV 35H,A


      MOV A,71H


      SWAP A ;A中数据高四位与低四位交换


      ANL A,#0FH ;高四位变0


      MOV 34H,A


       ;把秒存储区72H解析到第12显示位缓冲区


      MOV A,72H


      ANL A,#0FH ;高四位变0


      MOV 37H,A


      MOV A,72H


      SWAP A ;A中数据高四位与低四位交换


      ANL A,#0FH ;高四位变0


      MOV 36H,A


      LCALL DISPLAY  ;调用显示程序


      JNB P3.2,TIME12 ;路选择按键按下跳到12路定时设置程序


      MOV R0,#70H      ;把小时地址移到R0内准备相加


      JNB P3.0,ADDSPOT1; 跳到小时加1程序


      MOV R0,#71H      ;把分地址移到R0内准备相加


      JNB P3.1,ADDSPOT2 ; 跳到分加1程序


      MOV R0,#72H       ;把秒地址移到R0内准备相加


      JNB P3.3,ADDSPOT3 ;跳到秒加1程序


      JNB P3.4,BACK     ;返回键按下中断返回


        AJMP MENU2      ;MENU2循环执行


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;; 中断返回程 ;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



      BACK: LCALL DISPLAY


                      ;等待按键松开


           JNB P3.4,BACK


         SETB TR0      ;开起定时器



            RETI       ; 中断返回



ADDSPOT1:CLR TR0


  JB P3.0,SHORTD


     AJMP LONGD  ;按键松开时间判断延时的长短



ADDSPOT2:CLR TR0


  JB P3.1,SHORTD


     AJMP LONGD ;按键松开时间判断延时的长短



ADDSPOT3:CLR TR0


      JB P3.3,SHORTD


     AJMP LONGD  ;按键松开时间判断延时的长短



  SHORTD:MOV R5,#1 ;置短延迟系数


        AJMP DISPLAYD ;跳到加一延时程序


  LONGD:MOV R5,#15   ; 置长延迟系数


        AJMP DISPLAYD ;跳到加一延时程序



DISPLAYD :LCALL DELAYJUST;调用延时判断程序


     LCALL ADD1 ;调用加一子程序


     LCALL OVERFLOWCLE ;调用到进位时清零程序


     JNB P3.2,TIME12  ;键按下后跳到调定时程序


      AJMP MENU2  ;返回MENU2循环程序


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;; 延时判断程 ;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



 DELAYJUST:LCALL DISPLAY;调用显示程序


 DJNZ R5 ,DELAYJUST     ;走延迟系数


 RET   ;  返回



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;; 调整12路定时程 ;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



  TIME12:


  LCALL DISPLAY   ;延时消抖


  JNB P3.2,TIMGOONQQ;判断键


  AJMP MENU2      ; 是干扰返回


  TIMGOONQQ:MOV 3DH,#01;路指示为一


  AJMP TIMGOON0  ;跳到调整12路定时程


TIMGOON0 :


  LCALL DISPLAY


  JNB P3.2,TIMGOON0 ;按键松开否


  CLR 01H          ;清是否改了定时开或关标志01H


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;; 第一路定时开关处理程序 ;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



 TIMGOON1:  MOV R0,#40H ;置第一路定时数据初始地址


JNB  01H,SUSSE1  ;是否改关或开定时


 MOV C,00H      ; 把缓冲位移到C


 MOV 02H,C       ;C标志位移到第一路标志02H


SUSSE1: JB 02H,REALYDIS ;标志位为一进入开状态


  CLR C        ;清标志c


  LJMP  NOTIMOP ;跳到没定时显示



 ; 2路定时开关处理程序


 TIMGOON2:MOV R0,#44H;置第2路定时数据初始地址


 JNB 01H,SUSSE2      ;是否改关或开定时


 MOV C,00H           ; 把缓冲位移到C


 MOV 03H,C           ;C标志位移到第2路标志03H


 SUSSE2: JB 03H,REALYDIS ;标志位为一进入开状态


 CLR C   ;清标志c


 LJMP  NOTIMOP          ;跳到没定时显示



 ; 3路定时开关处理程序


 TIMGOON3: MOV R0,#48H  ;置第3路定时数据初始地址


 JNB 01H,SUSSE3        ;是否改关或开定时


  MOV C,00H            ; 把缓冲位移到C


  MOV 04H,C            ;C标志位移到第3路标志04H


SUSSE3:JB 04H,REALYDIS ;标志位为一进入开状态


  CLR C                ;清标志c


 LJMP  NOTIMOP         ;跳到没定时显示



 ; 4路定时开关处理程序


 TIMGOON4: MOV R0,#4CH  ;置第4路定时数据初始地址


  JNB 01H,SUSSE4        ;是否改关或开定时


  MOV C,00H             ; 把缓冲位移到C


  MOV 05H,C             ;C标志位移到第4路标志05H


SUSSE4: JB 05H,REALYDIS ;标志位为一进入开状态


  CLR C             ;清标志c


  LJMP  NOTIMOP      ;跳到没定时显示



; 5路定时开关处理程序


TIMGOON5:MOV R0,#50H  ;置第5路定时数据初始地址


  JNB 01H,SUSSE5      ;是否改关或开定时


  MOV C,00H     ; 把缓冲位移到C


  MOV 06H,C     ;C标志位移到第5路标志06H


SUSSE5:JB 06H,REALYDIS ;标志位为一进入开状态


  CLR C        ;清标志c


 LJMP  NOTIMOP     ;跳到没定时显示



 ; 6路定时开关处理程序


TIMGOON6:MOV R0,#54H   ;置第6路定时数据初始地址


  JNB 01H,SUSSE6       ;是否改关或开定时


  MOV C,00H   ; 把缓冲位移到C


  MOV 07H,C   ;C标志位移到第6路标志07H


SUSSE6:  JB 07H,REALYDIS  ;标志位为一进入开状态


  CLR C         ;清标志c


  LJMP  NOTIMOP    ;跳到没定时显示



  ; 7路定时开关处理程序


  TIMGOON7:MOV R0,#58H   ;置第7路定时数据初始地址


   JNB 01H,SUSSE7 ;是否改关或开定时


   MOV C,00H   ; 把缓冲位移到C


   MOV 08H,C   ;C标志位移到第7路标志08H


SUSSE7:JB 08H,REALYDIS ;标志位为一进入开状态


   CLR C         ;清标志c


   LJMP  NOTIMOP     ;跳到没定时显示



 


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;N路定时开的设置和显示子程序;;;


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



REALYDIS:


  CLR 01H ;清标志缓冲区


   MOV 78H,R0 ;把小时数据地址存入 78H


   INC R0  ; 指向分地址


   MOV 79H,R0 ;把分数据地址存入 79H


UTENSIL:LCALL DISPLAY; 延时显示


  LCALL DISPLAY ; 延时显示


JNB P3.2,UTENSIL;等待键松下


 ;定时开时显示循环程序


REALYDIS1:


   LCALL  FISTDISP ;调用显示第七八位分配显示缓存区程序


   MOV R1,78H       ;把时初值移到R1


   LCALL TIMERDISP  ;调用显示定时时间分配显示缓存区程序


   MOV 36H,#10


   MOV 37H,#11    ;显示OP


   LCALL DISPLAY   ;调用显示程序


   JNB P3.4,BACK1      ;P3.4键按下返回


   JNB P3.0,DELAYJUS1   ;调时键按下延时


   JNB P3.1,DELAYJUS2   ;调分键按下延时


TIMG2:JB P3.2, TIMG3   ;


        AJMP REALYDIS2   ; 路键松开否


TIMG3 :JB P3.5,REALYDIS1  ;


     CANCLE:LCALL DISPLAY ;


        JNB P3.5,CANCLE  ;取消定时键松开否


        SETB 01H      ;   置改定时标志


        CLR 00H       ;置定时开关标志


        LJMP  FINDROUT;寻找对应的路



DELAYJUS1:        ;小时延时判断程序


     JB P3.0, SHORTD1 ;如松开是短定时


     MOV R5,#20       ;一直按下是长定时


     AJMP DISPLAYD1   ;跳到延时带加一和到位溢出


     SHORTD1:MOV R5,#1 ; 短延时


     AJMP DISPLAYD1  ;跳到延时带加一和到位溢出



DISPLAYD1 :      ;延时带加一和到位溢出


     MOV R0,78H  ;时地址到R0


  LCALL ADD1     ;时加一


  LCALL OVERFLOWCLE ;满位否


  LCALL DELAYJUST  ;延时


  AJMP REALYDIS1  ; 回到循环




DELAYJUS2:          ;分延时判断程序


     JB P3.1,SHORTD2 ;如松开是短定时


   AJMP DISPLAYD2   ;跳到延时带加一和到位溢出


  SHORTD2:MOV R5,#1  ; 短延时


  AJMP DISPLAYD2     ;跳到延时带加一和到位溢出




 DISPLAYD2 :       ;延时带加一和到位溢出


      MOV R5,#20


     MOV R0,79H   ;时地址到R0


  LCALL ADD1      ;分加一


  LCALL OVERFLOWCLE  ;满位否


  LCALL DELAYJUST ;延时


  AJMP REALYDIS1 ; 回到循环



; 8路定时开关处理程序


TIMGOON8: MOV R0,#5CH  ;置第8路定时数据初始地址


    JNB 01H,SUSSE8   ;是否改关或开定时


    MOV C,00H     ; 把缓冲位移到C


    MOV 09H,C    ;C标志位移到第8路标志09H


SUSSE8:JB 09H,REALYDISRELAY;标志位为一进入开状态


  CLR C       ;清标志c


 LJMP  NOTIMOP   ;跳到没定时显示



 ; 9路定时开关处理程序


TIMGOON9:MOV R0,#60H    ;置第9路定时数据初始地址


   JNB 01H,SUSSE9     ;是否改关或开定时


   MOV C,00H    ; 把缓冲位移到C


   MOV 0AH,C      ;C标志位移到第9路标志0AH


SUSSE9:JB 0AH,REALYDISRELAY ;标志位为一进入开状态


   CLR C         ;清标志c


   LJMP  NOTIMOP   ;跳到没定时显示



  BACK1 :RETI



; 10路定时开关处理程序


TIMGOON10:MOV R0,#64H     ;置第10路定时数据初始地址


   JNB 01H,SUSSE10        ;是否改关或开定时


   MOV C,00H        ; 把缓冲位移到C


   MOV 0BH,C      ;C标志位移到第10路标志0BH


SUSSE10:JB 0BH,REALYDISRELAY ;标志位为一进入开状态


   CLR C            ;清标志c


   LJMP  NOTIMOP     ;跳到没定时显示



; 11路定时开关处理程序


TIMGOON11: MOV R0,#68H    ;置第11路定时数据初始地址


   JNB 01H,SUSSE11        ;是否改关或开定时


   MOV C,00H  ; 把缓冲位移到C


   MOV 0CH,C   ;C标志位移到第11路标志0CH


SUSSE11:JB 0CH,REALYDISRELAY ;标志位为一进入开状态


  CLR C           ;清标志c


 LJMP  NOTIMOP     ;跳到没定时显示


 ; 12路定时开关处理程序


TIMGOON12:MOV R0,#6CH     ;置第12路定时数据初始地址


JNB 01H,SUSSE12  ;是否改关或开定时


 MOV C,00H   ; 把缓冲位移到C


MOV 0DH,C     ;C标志位移到第12路标志0DH


SUSSE12:JB 0DH,REALYDISRELAY ;标志位为一进入开状态


  CLR C           ;清标志c


 LJMP  NOTIMOP    ;跳到没定时显示



FINDROUTRELAY :AJMP FINDROUT ;FINDROUT 跳转接力


REALYDISRELAY:AJMP REALYDIS  ;REALYDIS 跳转接力



 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;N路定时关的设置和显示子程序;;;


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



  REALYDIS2:


  CLR 01H


 LCALL DISPLAY


 JNB P3.2,NA3


 AJMP  REALYDIS


NA3:


  LCALL DISPLAY


  JNB P3.2,NA3 ;按键


 INC 79H


 MOV 78H,79H


 INC 79H


 REALYDIS2A:


  LCALL  FISTDISP


   MOV R1,78H


   LCALL TIMERDISP


   MOV 36H,#12


   MOV 37H,#13


   LCALL DISPLAY


   JNB P3.4,BACK1


   JNB P3.0,DELAYJUS3


   JNB P3.1,DELAYJUS4


   TIMG22:JB P3.2, TIMG33


         MOV R0,#3DH


         LCALL ADD1


         MOV A,3DH


         CJNE A,#13H,FINDROUTRELAY


         AJMP BACK2


   TIMG33 :JB P3.5  ,REALYDIS2A


CANCLE1: LCALL DISPLAY


   JNB P3.5,CANCLE1


           SETB 01H


           CLR 00H


           LJMP  FINDROUT



 DELAYJUS3:


     JB P3.0,SHORTD3


     MOV R5,#15


   AJMP DISPLAYD3


  SHORTD3:MOV R5,#1


  AJMP DISPLAYD3



DISPLAYD3 :LCALL DELAYJUST


     MOV R0,78H


  LCALL ADD1


  LCALL OVERFLOWCLE


  AJMP REALYDIS2A




DELAYJUS4:


     JB P3.1,SHORTD4


      MOV R5,#15


   AJMP DISPLAYD4


  SHORTD4:MOV R5,#1


  AJMP DISPLAYD4



 DISPLAYD4 :LCALL DELAYJUST


     MOV R0,79H


  LCALL ADD1


  LCALL OVERFLOWCLE


  AJMP REALYDIS2A


  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;;没有设置定时显示子程序;;;;;;;;;;;


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




 NOTIMOP:CLR 01H


      MOV A,3DH


      ANL A,#0FH ;高四位变0


      MOV 31H,A


      MOV A,3DH


      SWAP A ;A中数据高四位与低四位交换


      ANL A,#0FH ;高四位变0


      MOV 30H,A


      MOV 32H,#15


      MOV 33H,#15


       MOV 34H,#15


       MOV 35H,#15


       MOV 36H,#15


       MOV 37H,#15


       LCALL DISPLAY


   NN2: LCALL DISPLAY


         JNB P3.2,NN2


  LOOP1: JNB P3.4,BACK2


         JB P3.2,NN1


     MOV R0,#3DH


     LCALL ADD1


    MOV A,3DH


    CJNE A,#13H,FINDROUT


     AJMP BACK2



   NN1:LCALL DISPLAY


       JB P3.5,LOOP1


CANCLE2:LCALL DISPLAY


       JNB P3.5,CANCLE2


       SETB 01H


       SETB 00H


       AJMP  FINDROUT



 BACK2:RETI



 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;;寻找定时第几路子程序;;;;;;;;;;;;


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



 FINDROUT: MOV A,3DH


 CJNE A,#01, N1


LJMP TIMGOON1


N1:CJNE A,#02, N2


LJMP TIMGOON2


 N2:CJNE A,#03, N3


LJMP TIMGOON3


N3:CJNE A,#04, N4


LJMP TIMGOON4


 N4:CJNE A,#05, N5


LJMP TIMGOON5


N5:CJNE A,#06, N6


LJMP TIMGOON6


 N6:CJNE A,#07, N7


LJMP TIMGOON7


N7:CJNE A,#08, N8


LJMP TIMGOON8


N8:CJNE A,#09, N9


LJMP TIMGOON5


N9:CJNE A,#10H, N10


LJMP TIMGOON6


 N10:CJNE A,#11H, N11


LJMP TIMGOON11


N11:CJNE A,#12H, N12


LJMP TIMGOON12


N12:CJNE A,#00,N13


N13:LJMP BACK1














  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;;定时路即前两位放入显示缓冲区子程序


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



 FISTDISP:MOV A,3DH


      ANL A,#0FH ;高四位变0


      MOV 31H,A


      MOV A,3DH


      SWAP A ;A中数据高四位与低四位交换


      ANL A,#0FH ;高四位变0


      MOV 30H,A


      RET



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;;;小时和分四位放入显示缓冲区子程序


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


TIMERDISP: MOV A,@R1


      ANL A,#0FH


      MOV 33H,A


      MOV A,@R1


      SWAP A


      ANL A,#0FH


      MOV 32H,A


      INC R1


      MOV A,@R1


      ANL A,#0FH


      MOV 35H,A


      MOV A,@R1


      SWAP A


      ANL A,#0FH


      MOV 34H,A


       RET



 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;;;后两位OP放入显示缓冲区子程序;;;


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


  FOURTHOP:MOV 36H,#10


       MOV 37H,#11


       RET


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;;;后两位CL放入显示缓冲区子程序;;;


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


  FOURTHCL:  MOV 36H,#12


       MOV 37H,#13


       RET




 ;;;;显示程序;;;;;;



; P0口输出段码数据,P2口作为位扫描


; 扫描控制,每个LED数码管亮1MS时间再逐位循环。


  DISPLAY:MOV A,30H


        CJNE A,#00,NOCONTRAST


        MOV 30H,#14


   NOCONTRAST: MOV 3BH,#8


        MOV 3CH,#0FEH


        MOV R1,#37H


        MOV DPTR,#TAB


  LOOP: MOV A,@R1


        MOVC A,@A+DPTR


        MOV P0,A


        MOV P2,3CH


        LCALL DELAY


        DEC R1


        MOV A,3CH


        RL A


        MOV 3CH,A


        DJNZ 3BH,LOOP


        MOV P0,#0FFH ;P1口复位



          RET


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;;小时2460后清零判断子程序;;;;;;


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



OVERFLOWCLE:


 MOV 73H,#24


 MOV 74H,#24


 MOV A,70H


 MOV R0,#70H


 CJNE A,#24H,GOON1


 LCALL CLR0


 GOON1: MOV A,71H


  MOV R0,#71H


  CJNE A,#60H,GOON2


 LCALL CLR0


 GOON2:MOV A,72H


 MOV R0,#72H


 CJNE A,#60H,GOON3


 LCALL CLR0


GOON3:MOV R0,#40H


GOON5: MOV A,@R0


       CJNE A,#24H,GOON6


       LCALL CLR0


 GOON6:INC R0


       INC R0



       DJNZ 73H,GOON5



       MOV R0,#41H


GOON7: MOV A,@R0


       CJNE A,#60H,GOON8


       LCALL CLR0


 GOON8:INC R0


       INC R0


       DJNZ 74H,GOON7


       RET


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;;;定时判断开关输出口子程序;;;;;;;


 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;




 TIMERCOMPARE:JNB 02H,ANTHERCOM1


       MOV A,40H


       CJNE A,70H,ANTHERCOM1


       MOV A,41H


       CJNE A,71H,ANTHERCOM1


       SETB P3.6


ANTHERCOM1:JNB 03H,ANTHERCOM2


       MOV A,44H


       CJNE A,70H,ANTHERCOM2


       MOV A,45H


       CJNE A,71H,ANTHERCOM2


       SETB P3.6


ANTHERCOM2:JNB 04H,ANTHERCOM3


       MOV A,48H


       CJNE A,70H,ANTHERCOM3


       MOV A,49H


       CJNE A,71H,ANTHERCOM3


       SETB P3.6


 ANTHERCOM3:JNB 05H,ANTHERCOM4


       MOV A,4CH


       CJNE A,70H,ANTHERCOM4


       MOV A,4DH


       CJNE A,71H,ANTHERCOM4


       SETB P3.6


ANTHERCOM4:JNB 06H,ANTHERCOM5


       MOV A,50H


       CJNE A,70H,ANTHERCOM5


       MOV A,51H


       CJNE A,71H,ANTHERCOM5


       SETB P3.6


 ANTHERCOM5:JNB 07H,ANTHERCOM6


       MOV A,54H


       CJNE A,70H,ANTHERCOM6


       MOV A,55H


       CJNE A,71H,ANTHERCOM6


       SETB P3.6


ANTHERCOM6:JNB 08H,ANTHERCOM7


       MOV A,58H


       CJNE A,70H,ANTHERCOM7


       MOV A,59H


       CJNE A,71H,ANTHERCOM7


       SETB P3.6


 ANTHERCOM7:JNB 09H,ANTHERCOM8


       MOV A,5CH


       CJNE A,70H,ANTHERCOM8


       MOV A,5DH


       CJNE A,71H,ANTHERCOM8


       SETB P3.6


ANTHERCOM8:JNB 0AH,ANTHERCOM9


       MOV A,60H


       CJNE A,70H,ANTHERCOM9


       MOV A,61H


       CJNE A,71H,ANTHERCOM9


       SETB P3.6


 ANTHERCOM9:JNB 0BH,ANTHERCOM10


       MOV A,64H


       CJNE A,70H,ANTHERCOM10


       MOV A,65H


       CJNE A,71H,ANTHERCOM10


       SETB P3.6


ANTHERCOM10:JNB 0CH,ANTHERCOM11


       MOV A,68H


       CJNE A,70H,ANTHERCOM11


       MOV A,69H


       CJNE A,71H,ANTHERCOM11


       SETB P3.6


 ANTHERCOM11:JNB 0DH,CLOSECOMP


       MOV A,6CH


       CJNE A,70H,CLOSECOMP


       MOV A,6DH


       CJNE A,71H,CLOSECOMP


       SETB P3.6


CLOSECOMP:JNB 02H, CLOSECOMP1


       MOV A,42H


       CJNE A,70H,  CLOSECOMP1


       MOV A,43H


       CJNE A,71H,  CLOSECOMP1


     CLR P3.6


       CLOSECOMP1:JNB 03H,CLOSECOMP2


       MOV A,46H


       CJNE A,70H,CLOSECOMP2


       MOV A,47H


       CJNE A,71H,CLOSECOMP2


       CLR P3.6


CLOSECOMP2:JNB 04H,CLOSECOMP3


       MOV A,4AH


       CJNE A,70H,CLOSECOMP3


       MOV A,4BH


       CJNE A,71H,CLOSECOMP3


       CLR P3.6


 CLOSECOMP3:JNB 05H,CLOSECOMP4


       MOV A,4EH


       CJNE A,70H,CLOSECOMP4


       MOV A,4FH


       CJNE A,71H,CLOSECOMP4


       CLR P3.6


CLOSECOMP4:JNB 06H,CLOSECOMP5


       MOV A,52H


       CJNE A,70H,CLOSECOMP5


       MOV A,53H


       CJNE A,71H,CLOSECOMP5


       CLR P3.6


 CLOSECOMP5:JNB 07H,CLOSECOMP6


       MOV A,56H


       CJNE A,70H,CLOSECOMP6


       MOV A,57H


       CJNE A,71H,CLOSECOMP6


       CLR P3.6


CLOSECOMP6:JNB 08H,CLOSECOMP7


       MOV A,5AH


       CJNE A,70H,CLOSECOMP7


       MOV A,5BH


       CJNE A,71H,CLOSECOMP7


       CLR P3.6


 CLOSECOMP7:JNB 09H,CLOSECOMP8


       MOV A,5EH


       CJNE A,70H,CLOSECOMP8


       MOV A,5FH


       CJNE A,71H,CLOSECOMP8


       CLR P3.6


CLOSECOMP8:JNB 0AH,CLOSECOMP9


       MOV A,62H


       CJNE A,70H,CLOSECOMP9


       MOV A,63H


       CJNE A,71H,CLOSECOMP9


       CLR P3.6


 CLOSECOMP9:JNB 0BH,CLOSECOMP10


       MOV A,66H


       CJNE A,70H,CLOSECOMP10


       MOV A,67H


       CJNE A,71H,CLOSECOMP10


       CLR P3.6


CLOSECOMP10:JNB 0CH,CLOSECOMP11


       MOV A,6AH


       CJNE A,70H,CLOSECOMP11


       MOV A,6BH


       CJNE A,71H,CLOSECOMP11


       CLR P3.6


 CLOSECOMP11:JNB 0DH,ACCOMPLISH


       MOV A,6EH


       CJNE A,70H,ACCOMPLISH


       MOV A,6FH


       CJNE A,71H,ACCOMPLISH


       CLR P3.6


   ACCOMPLISH:  RET


 ;;;;;;;;;;;;;;;;;;;;;;;


 ;;;;;;延时程序;;;;;;;;;


 ;;;;;;;;;;;;;;;;;;;;;;


DELAY: MOV R6,#20H


DL1: MOV R7,#19H


DL2: DJNZ R7,DL2


DJNZ R6,DL1


RET


DELAY2: MOV R6,#50H


DL3: MOV R7,#19H


DL4: DJNZ R7,DL4


DJNZ R6,DL3


RET



TAB: DB      0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,9CH,8CH,0C6H,0C7H,0FFH,0BFH,8EH  ; 共阳数码管段码表



              ;3FH,006H,05BH,04FH,66H,6dH,7dH,007H,7fH,6fH,63H,73H,39H,38h,00H, 40H,71H   ; 共阴数码管段码表


 ;段码表依次代表 "0" "1"  "2" "3""4" "5" "6" "7"  "8" "9" "O" "P" "C" "L""不亮""-" "F"



PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
4
关闭 站长推荐上一条 /3 下一条