南华大学机械工程学院毕业设计(论文)
程序如下:
PITO:MOV TL0,#0DCH 计数器重新加载 MOV TH0,#0BH MOV A,30H
DEC A 循环次数减1 MOV 30H,A
JNZ RET0 MOV 30H,#08H MOV R0,#70H ACALL DAAD1 MOV A,R2 XRL A,#60H JNZ RET0 ACALL CLR0 MOV R0,#72H ACALL DAAD1 MOV A,R2
XRL A,#60H JNZ RET0
ACALL CLR0 MOV R0,#74H ACALL DAAD1 INC R3 MOV R4,R3
ACALL ABC MOV A,R2
XRL A,#24H JNZ RET0
ACALL CLR0 不满8次,转RETO返回 满8次,开始计时操作 秒显示缓冲单元地址 秒加1
加1后秒值在R2中 判断是否到60S 不到,则转RETO返回
到60S,则秒显示缓冲单元清0 分显示缓冲单元地址 分加1 判断是否到60MIN 到60MIN,则分显示缓冲单元清0 时显示缓冲单元地址 时加1 跳转到报时程序 判断是否到24H 到24H,则时显示缓冲单元清0
第 26 页 共 66 页
南华大学机械工程学院毕业设计(论文)
RET0:RETI
CLR0:CLR A 清缓冲单元子程序 MOV @R0,A 10位数缓冲单元清0 DEC R0
MOV @R0,A 个位数缓冲单元清0 RET
4.1.3加1子程序DAAD1
加1子程序用于完成对秒,分,时的加1操作,中断服务程序中在秒,分,时加1共有3处调用次子程序。流程图如下:
加1子程序的操作共包括以下3项内容:
1.合数。由于每位LED显示器对应一个8位缓冲单元,因此,由两位BCD码表示的时间值各占用一个缓冲单元,且只占其低4位。所以在加1运算前需要把两个缓冲单元中存放的数值合起来,构成一个字节,然后才能进行加1运算。所以也称为“合字”。
2.十进制调整。加1后须进行十进制调整。
3.分数。把加1后的时间值再拆分成两个字节,送回各自的缓冲单元中。
第 27 页 共 66 页
南华大学机械工程学院毕业设计(论文)
DAAD1 取十位数 使十位数占A高半字节 程序如下:
DAAD1:MOV A,@R0