单片机电子钟汇编程序
单片机电子钟汇编程序及程序解读
学号:1106012040    姓名:王林宋  班级:11机制(2)班
ORG 0000H                      ;程序执行开始地址
              LJMP      START  ;跳到标号START执行
              ORG 0003H        ;外中断0中断程序入口
              RETI              ;外中断0中断返回
              ORG 000BH        ;定时器T0中断程序入口
          LJMP      INTT0    ;跳至INTTO执行
              ORG 0013H        ;外中断1中断程序入口
          RETI                ;外中断1中断返回
          ORG 001BH          ;定时器T1中断程序入口
          LJMP      INTT1    ;跳至INTT1执行
          ORG 0023H          ;串行中断程序入口地址
              RETI            ;串行中断程序返回

            START: MOV  R0,#70H          ;70H-7AH11个内存单元
                  MOV  R7,#0BH          ;
      CLEARDISP:  MOV  @R0,#00H      ;
                  INC  R0                ;
                  DJNZ  R7,CLEARDISP  ;
                  MOV  20H,#00H          ;20H(标志用)
                  MOV  7AH,#0AH          ;放入"熄灭符"数据
                  MOV      TMOD,#11H    ;T0T116位定时器
                  MOV  TL0,#0B0H          ;50MS定时初值(腾讯T0计时用)
                  MOV  TH0,#3CH          ;50MS定时初值
                  MOV  TL1,#0B0H          ;50MS定时初值(T1闪烁定时用)
                  MOV  TH1,#3CH          ;50MS定时初值
                  SETB  EA            ;总中断开放
                  SETB  ET0            ;允许T0中断
                  SETB  TR0            ;开启T0定时器
                  MOV  R4,#14H        ;1秒定时用初值(50MS×20
          START1: LCALL DISPLAY        ;调用显示子程序
                  JNB  P3.7,SETMM1    ;P3.7口为0时转时间调整程序
                  SJMP  START1        ;P3.7口为1时跳回START1
            SETMM1:    LJMP SETMM    ;转到时间调整程序SETMM
1秒计时程序                 
T0中断服务程序
            INTT0: 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,#71H      ;指向秒计时单元(71H-72H
                  ACALL ADD1              ;调用加1程序(加1秒操作)
                  MOV  A,R3              ;秒数据放入AR32位十进制数组合)
                  CLR      C              ;清进位标志
                  CJNE  A,#60H,ADDMM      ;
          ADDMM:  JC        OUTT0        ;小于60秒时中断退出
                  ACALL CLR0                ;大于或等于60秒时对秒计时单元清0
                  MOV      R0,#77H        ;指向分计时单元(76H-77H
                  ACALL ADD1                ;分计时单元加1分钟
                  MOV      A,R3            ;分数据放入A
                  CLR  C                  ;清进位标志
                  CJNE  A,#60H,ADDHH      ;
            ADDHH: JC      OUTT0        ;小于60分时中断退出
                  ACALL CLR0              ;c系坦克大于或等于60分时分计时单元清0
                  MOV      R0,#79H      ;指向小时计时单元(78H-79H
                  ACALL ADD1              ;小时计时单元加1小时
                  MOV  A,R3              ;时数据放入A
                  CLR  C                ;清进位标志
                  CJNE  A,#24H,HOUR      ;
            HOUR: JC    OUTT0            ;小于24水壶水垢小时中断退出
                  ACALL CLR0              ;大于或等于24小时小时计时单元清0
            OUTT0: MOV  72H,76H          ;中断退出时将分、时计时单元数据移
                  MOV  73H,77H          ;入对应显示单元
                  MOV  74H,78H          ;
                  MOV  75H,79H          ;
                  POP      PSW              ;恢复状态字(出栈)
                  POP  ACC              ;恢复累加器
                  SETB  ET0              ;开放T0中断
                  RETI                    ;中断返回
闪动调时程序
T1中断服务程序,用作时间调整时调整单元闪烁指示
INTT1:          PUSH    ACC                ;中断现场保护
                PUSH    PSW                ;
                MOV    TL1,  #0B0H      ;装定时器T1定时初值
                MOV    TH1,  #3CH              ;
                DJNZ    R2,INTT1OUT        ;0.3秒未到退出中断(50MS中断6次)
                MOV    R2,#06H            ;重装0.3秒定时用初值
                CPL    02H                  ;0.3秒定时到对闪烁标志取反
                JB      02H,FLASH1          ;02H位为1时显示单元"熄灭"
                MOV    72H,76H      ;02H位为0时正常显示
                MOV    73H,77H      ;
                MOV    74H,78H      ;
                MOV    75H,79H      ;
INTT1OUT:      POP    PSW          ;恢复现场
                POP    ACC          ;
                RETI                    ;中断退出
FLASH1:        JB      01H,FLASH2    ;01H位为1时,转小时熄灭控制
                MOV    72H,7AH      ;01H位为0时,"熄灭符"数据放入分
                MOV    73H,7AH      ;显示单元(72H-73H),将不显示分数据
                MOV    74H,78H      ;
                MOV    75H,79H      ;
                AJMP    INTT1OUT      ;转中断退出
FLASH2:        MOV    72H,76H      ;01H位为1时,"熄灭符"数据放入小时
                MOV    73H,77H      ;显示单元(74H-75H),小时数据将不显示
                MOV    74H,7AH      ;
                MOV    75H,7AH      ;
                AJMP    INTT1OUT      ;转中断退出
1子程序 
            ADD1: MOV      A,@R0      ;取当前计时单元数据到A
                  DEC      R0          ;指向前一地址
                  SWAP  A              ;A中数据高四位与低四位交换
                  ORL      A,@R0      ;前一地址中数据放入A中低四位
                  ADD      A,#01H      ;A1操作
                  DA      A            ;十进制调整
                  MOV  R3,A            ;移入R3寄存器
                  ANL      A,#0FH      ;高四位变0
                  MOV      @R0,A      ;放回前一地址单元
                  MOV      A,R3        ;取回R3中暂存数据
                  INC      R0          ;指向当前地址单元
                  SWAP      A          ;A中数据高四位与低四位交换
                  ANL      A,#0FH      ;高四位变0
                  MOV      @R0,A    ;数据放入当削地址单元中
                  RET                  ;子程序返回
清零程序           
;对计时单元复零用
            CLR0: CLR            A            ;清累加器
                  MOV            @R0,A      ;清当前地址单元
                  DEC            R0          ;指向前一地址
                  MOV            @R0,A      ;前一地址单元清0
                  RET                          ;子程序返回
时钟调整程序     
当调时按键按下时进入此程序
          SETMM:  cLR        ET0            ;关定时器T0中断
                  CLR        TR0              ;关闭定时器T0
                  LCALL        DL1S          ;调用1秒延时程序
                  JB    P3.7,CLOSEDIS  ;键按下时间小于1秒,关闭显示(省电)
                  MOV        R2,#06H        ;进入调时状态,赋闪烁定时初值
                  SETB      ET1              ;允许T1中断
                  SETB      TR1              ;开启定时器T1
            SET2:  JNB    P3.7,SET1          ;P3.7疫情补助金怎么申请口为0(键未释放),等待
                  SETB        00H            ;键释放,分调整闪烁标志置1
            SET4:  JB        P3.7,SET3        ;等待键按下
                  LCALL        DL05S          ;有键按下,延时0.5
                  JNB          P3.7,SETHH    ;按下时间大于0.5秒转调小时状态
                  MOV            R0,#77H      ;按下时间小于0.5秒加1分钟操作青岛好玩的地方
                  LCALL      ADD1            ;调用加1子程序
                  MOV            A,R3          ;取调整单元数据
                  CLR            C            ;清进位标志
                  CJNE      A,#60H,HHH      ;调整单元数据与60比较
              HHH: JC            SET4        ;调整单元数据小于60SET4循环
                  LCALL      CLR0          ;调整单元数据大于或等于60时清两只老虎儿歌0
                  CLR            C          ;清进位标志
                  AJMP        SET4          ;跳转到SET4循环
        CLOSEDIS:  SETBET0            省电(LED不显示)状态。开T0中断

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。