累计60分钟的是时间值,需要用到以下几个寄存器:
R7:累计01s时间寄存器。T0每中断一次R7R71,计数10次向30H进位,并将R7置2。
30H:累计1s时间寄存器。当R060s时,向31H进位,然后将30H清零。
31H:累计60s时间寄存器。当31H60s时,当31H60时,将30H、31H清零。
30H、31H用于时钟计时,以下R6、R5用于跑表计时。R5:累计10S时间寄存器。当R5100时,向R6进位,然后将R5清零。R6:累计1000S时间寄存器。当R6100时,将R6清零。42H:为标志寄存器。42H1时,跑表、时钟计数器都计数,42H0时,仅时钟计数器计数。2)启动跑表时,T1计时到01s时,置42H1,跑表计数器也在工作,
8
f并将跑表计数器的值送到显示缓冲区显示。
跑表程序如下:
R60
WATCH
Y
CLRRS0CLRRS1CJNER60FFHTP;跑表程序
清标志位
显
时
钟
MOVR60H
;清标志位
R41
INCR4
CJNER4100TP;判是否到10s
MOV41HR4
;送41H单元
N
R4100?
MOVR40HINCR5
Y
R51,R40
CJNER5100HTP;判是否到1000s
MOV42HR5MOVR5,0H
N
R5100?
MOVR4,OH
Y
TPLCALLDIVID;调代码转换程序
R50
MOVA,
LCALLDISPLAY;调显示程序
返回
RET
图5跑表流程图
T0断程序流程图如下:
T1中断服务程序
A
9
f重置T1计数器初值
保护现场
R7R71
N
R70?
Y
置标志位
R72Y,R0R01
N
R060
?Y
R11,R00,R1→41H
N
R160?R21,R10,R2→42H
N
R260?
R31,R20,
N
R324?
Y
R30
恢复现场
RTTIA
图5T1定时器程序设计流程图
T1中断服务程序如下:INT_T0PUSHDPH
PUSHDPL
10
fPUSHACC
PUSHPSW
CLRTR1
;关T1
MOVTH04CH;重置T1初值
MOVTL000H
SETBTR0
;启动T1
CLRRS1
;选择0区工作寄存器
CLRRS0
DJNZR7EXIT;判断是否完成01s定时
MOVR72
;到01s
MOVR60FFH;置标志位
INCR0
CJNER010EXIT;判断是否到1s
MOVR00H
INCR1
MOV41HR1
;秒值送41H单元
CJNER160EXIT;判断是否到1mi
MOVR10H
INCR2
MOV42HR2
;分值送42H单元
CJNER260EXIT;判断是否到1h
MOVR20H
INCR3
MOV43HR3
;
CJNER324EXIT;
11
fMOVR30H
MOVR20H
MOVR10H
EXITPOPPSW
POPACC
POPDPL
POPDPH
RETI
3)代码转换程序:由于人们日常习惯使用十进制数,而计算机的键盘输
入、输出以及显示常采用二进制编码的十进制(即BCD码)或ASCII码。因
此,在程序设计中经常要进行代码转换。以下为代码转换程序:
DIVIDPUSHACC
MOVA41H
MOVB10
DIVAB
MOV51HA
;高位在51H
MOV50HB
;低位在50H
MOVA42H
MOVB10H
DIVAB
MOV53HA
MOV52HB
MOVA43H
MOVB10H
MOV55HA
12
fMOV54HB
POPACC
RET
4)显示程序
DISLED
;显示字符子程序
PUSHDPH;保存现场
PUSHDPr