;
;******************
; 倒计时程序 ;
;******************
PGT0: CLR EA ;关中断
PUSH ACC ;保护现场
PUSH PSW
PUSH DPL
PUSH DPH
MOV PSW, #08H ;选用寄存器组1
CLR TR0 ;暂停计时
MOV A,#0B7H ;中断同步修正
ADD A,TL0
MOV TL0,A
MOV A,#3CH
ADD A,TH0
MOV TH0,A
SETB TR0 ;恢复计时
DEC TCOUNT ;定时器T0每50 000毫秒溢出一次,则
MOV A, TCOUNT ; 溢出10次为0.5秒
JNZ OUTT0 ;判断是否到半秒
MOV TCOUNT, #0AH ;
CPL LED4 ; 若到半秒LED取反
JNB LED4, OUTT0 ;LED每闪烁一次是一秒
MOV R0, #SH ;移入秒位的地址
SETB IFDEC ;BCD子程序参数,使其做减法
ACALL ADDBCD ;调用BCD子程序, 秒减1
CJNE R3, #99H, OUTT0 ;判断秒要否借位
MOV SH, #05H ;要借位则
MOV SL, #09H ; 送数据59(否则显示99)
MOV R0, #MH ;移入分位的地址
ACALL ADDBCD ;分减1
CJNE R3, #99H, OUTT0 ;判断分要否借位
MOV MH, #05H
MOV ML, #09H
MOV R0, #HH
ACALL ADDBCD
OUTT0: POP DPH ;恢复现场
POP DPL
POP PSW
POP ACC
SETB EA
RETI ;中断返回
NOP
NOP
LJMP ERR ;软件陷阱
;
;
;**************************
; BCD子程序(加1或减1 ) ;
;**************************
ADDBCD: MOV A, @R0 ;移入被操作数的高位
DEC R0 ;指针减一
SWAP A
ORL A, @R0 ;移入被操作数的低位
MOV B, #01H ;B寄存器送立即数#01H
MOV C, IFDEC ;若 减法标志位为1,则
MOV B.3, C ;
MOV B.4, C ; B寄存器的值被改为#99H
MOV B.7, C ;
ADD A, B ; 对一个压缩的BCD码加#99H等于对其减一
DA A ;BCD码调整
MOV R3, A ;暂存结果
ANL A, #0FH ;取低位码
上一页 [1] [2] [3] [4] [5] [6] [7] 下一页
本文关键字:单片机 程序 定时器 51单片机,单片机-工控设备 - 51单片机