POP 02H DJNZ R2, DEYS RET
若将0字循环改为4字循环只需将0字七段码0C0H改为4字七段码99H即可。
六、实验源程序
ORG 0000H LJMP S08 ORG 0A10H S08: MOV 20H, #02H MOV A, 20H MOV R1, A RL A ADD A, R1 MOV DPTR, #PTAB JMP @A+DPTR PTAB: LJMP PM0 LJMP PM1 LJMP PM2 LJMP PM3 PM0: MOV 21H, #0C0H SJMP LEDO PM1: MOV 21H, #0F9H SJMP LEDO PM2: MOV 21H, #0A4H SJMP LEDO PM3: MOV 21H, #0B0H SJMP LEDO LEDO: MOV A, 21H MOV R0, #0DCH MOV R1, #0DDH
MOVX @R0, A MOV A, #01H S1: MOVX @R1, A
;取来7段码 ;显示器段地址
;显示器位地址 ;将7段码输出
;最\右\边的位发光
-12-
MOV R2, #20H ;准备延时
LCALL DEYS ;调用延时子程序 RL A SJMP S1
DEYS: PUSH 02H ;延时子程序 DEY0: PUSH 02H DEY1: PUSH 02H DJNZ R2, $ POP 02H DJNZ R2, DEY1 POP 02H DJNZ R2, DEY0 POP 02H DJNZ R2, DEYS RET ;返回 END
;左移显示的位 ;无穷循环
实验十 电脑时钟(定时器、中断器综合实验)
一、实验目的
熟悉MCS-51定时器,串行口和中断初始化编程方法,了解定时器的应用实时程序的设计与调试技巧。
二、实验内容
编写程序,从本实验系统键盘上输入时间初值,用定时器产生0.1S定时中断,对时钟计数器计数,并将数值实时地送数码管显示。
三、程序框图
-13-
四、实验过程
在与PC联机状态下,编译、连接、下载se10.asm,用连续方式运行该程序。在键盘上输入时间初值,按执行键EXEC执行,数码管上实时显示时间值。按“暂停图标”或实验箱上的“暂停按钮”,系统无条件退出该程序运行返回监控状态。
五、实验结果及分析
键入起始时刻小时分钟后,秒显示器从11开始逐次加1,至60进位分显示器,最后到小时显示器,到24小时后全部清零循环往复。
问题回答:使定时器工作方式实现12小时制,只需要将CLOCK子程序中倒数第二句语句CJNE A,#24H,DONE改为CJNE A,#12H,DONE即可。
六、实验源程序
;电脑时钟(定时器、中断综合实验) ORG 0000H SJMP CHK00 ORG 000BH
LJMP CLOCK;INT_T0 ORG 0030H CHK00: MOV SP,#60H LCALL LEDP
CHK0: LCALL LCK0 ;键扫,显示子程序 LCALL PTDS0 ;显示缓冲区放数子程序 MOV TMOD,#01H
ORL IE,#10000010b ;EA=1, IT0=1 MOV TL0,#0
MOV TH0,#4ch ;定时中断初始化 MOV 23H,#00H
SETB TR0 ;开定时 LOO5: LCALL DIS LCALL PTDS0 SJMP LOO5 PTDS0: MOV R0,#79H MOV A,22H ACALL PTDS MOV A,21H ACALL PTDS MOV A,20H
;SSEE ;显示
-14-
ACALL PTDS RET
;---------------------------------------
PTDS: MOV R1,A ;拆送显示缓冲区 ACALL PTDS1 MOV A,R1 SWAP A PTDS1: ANL A,#0FH MOV @R0,A INC R0 RET
;--------------------------------------- CLOCK: MOV TL0,#0B7H
MOV TH0,#3CH PUSH PSW PUSH ACC
SETB 0D3H INC 23H MOV A,23H
CJNE A,#20,DONE MOV 23H,#00H MOV A,22H
INC A DA A
MOV 22H,A CJNE A,#60H,DONE MOV 22H,#00H MOV A,21H INC A
DA A MOV 21H,A
CJNE A,#60H,DONE MOV 21H,#00H ;恢复初值 ;保护 ;0.1秒加1 ;1秒到吗? ;清0.1秒单元 ;秒加1 ;十进制调整 ;60秒到吗? ;秒单元清零 ;分加1.十进制调整 ;60分到吗? ;分单元清零
-15-