MOV R4,#14H 1 秒定时用初值
START1: LCALL DISPLAY 调用显示子程序 JNB P3.7,SETMM1 P3.7 口为0 时转时间调整程序 SJMP START1 P3.7 口为1 时跳回START1
SETMM1:LJMP SETMM 转到时间调整程序SETMM1 秒计 时程序
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,#4CH 高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 秒数据放入A CLR C 清进位标志 CJNE A,#60H,ADDMM
ADDMM: JC OUTT0 小于60 秒时中断退出 河南科技大学毕业设计(论文) 18
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 大于或等于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, #00H 装定时器T1 定时初值 MOV TH1, #4CH
DJNZ R2,INTT1OUT 0.3 秒未到退出中断 河南科技大学毕业设计(论文) 19
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 显示单元,将不显示分数据 MOV 74H,78H MOV 75H,79H
AJMP INTT1OUT 转中断退出
FLASH2: MOV 72H,76H 01H 位为1 时,\熄灭符\数据放入 小时
MOV 73H,77H 显示单元,小时数据将不显示 MOV 74H,7AH MOV 75H,7AH
AJMP INTT1OUT 转中断退出 加1 子程序
ADD1: MOV A,@R0 取当前计时单元数据到A SWAP A A 中数据高四位与低四位交换 ORL A,@R0 前一地址中数据放入A 中低四位 ADD A,#01H A 加1 操作 DA A 十进制调整
MOV R3,A 移入R3 寄存器 ANL A,#0FH 高四位变0
河南科技大学毕业设计(论文) 20
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