;; AT89C2051时钟程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;定时器T0、T1溢出周期为50MS,T0为秒计数用, T1为调整时闪烁用,
;P3.7为调整按钮,P1口 为字符输出口,采用共阳显示管。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 中断入口程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG0000H ;程序执行开始地址
LJMPSTART;跳到标号START执行
ORG0003H ;外中断0中断程序入口
RETI;外中断0中断返回
ORG000BH ;定时器T0中断程序入口
LJMPINTT0;跳至INTTO执行
ORG0013H ;外中断1中断程序入口
RETI;外中断1中断返回
ORG001BH ;定时器T1中断程序入口
LJMPINTT1;跳至INTT1执行
ORG0023H ;串行中断程序入口地址
RETI;串行中断程序返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 主 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START:MOVR0,#70H ;清70H-7AH共11个内存单元
MOVR7,#0BH
CLEARDISP:
MOV@R0,#00H
INCR0
DJNZR7,CLEARDISP
MOV20H,#00H ;清20H(标志用)
MOV7AH,#0AH ;放入"熄灭符"数据
MOVTMOD,#11H ;设T0、T1为16位定时器
MOVTL0,#0B0H ;50MS定时初值(T0计时用)
MOVTH0,#3CH ;50MS定时初值
MOVTL1,#0B0H ;50MS定时初值(T1闪烁定时用)
MOVTH1,#3CH ;50MS定时初值
SETBEA ;总中断开放
SETBET0 ;允许T0中断
SETBTR0 ;开启T0定时器
MOVR4,#14H ;1秒定时用初值(50MS×20)
START1:LCALLDISPLAY;调用显示子程序
JNBP3.7,SETMM1;P3.7口为0时转时间调整程序
SJMPSTART1;P3.7口为1时跳回START1
SETMM1:LJMPSETMM;转到时间调整程序SETMM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 1秒计时程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中断服务程序
INTT0:PUSHACC ;累加器入栈保护
PUSHPSW ;状态字入栈保护
CLRET0