利用AT89C2051制作的6位電子鐘
R0,#79H ;指向小時(shí)計(jì)時(shí)單元(78H-79H)
ACALL ADD1 ;小時(shí)計(jì)時(shí)單元加1小時(shí)
MOV A,R3 ;時(shí)數(shù)據(jù)放入A
CLR C ;清進(jìn)位標(biāo)志
CJNE A,#24H,HOUR
HOUR: JC OUTT0 ;小于24小時(shí)中斷退出
ACALL CLR0 ;大于或等于24小時(shí)小時(shí)計(jì)時(shí)單元清0
OUTT0: MOV 72H,76H ;中斷退出時(shí)將分、時(shí)計(jì)時(shí)單元數(shù)據(jù)移
MOV 73H,77H ;入對(duì)應(yīng)顯示單元
MOV 74H,78H
MOV 75H,79H
POP PSW ;恢復(fù)狀態(tài)字(出棧)
POP ACC ;恢復(fù)累加器
SETB ET0 ;開放T0中斷
RETI ;中斷返回
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 閃動(dòng)調(diào)時(shí) 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T1中斷服務(wù)程序,用作時(shí)間調(diào)整時(shí)調(diào)整單元閃爍指示
INTT1: PUSH ACC ;中斷現(xiàn)場(chǎng)保護(hù)
PUSH PSW
MOV TL1, #0B0H;裝定時(shí)器T1定時(shí)初值
MOV TH1, #3CH
DJNZ R2,INTT1OUT ;0.3秒未到退出中斷(50MS中斷6次)
MOV R2,#06H ;重裝0.3秒定時(shí)用初值
CPL 02H ;0.3秒定時(shí)到對(duì)閃爍標(biāo)志取反
JB 02H,FLASH1 ;02H位為1時(shí)顯示單元"熄滅"
MOV 72H,76H ;02H位為0時(shí)正常顯示
MOV 73H,77H
MOV 74H,78H
MOV 75H,79H
INTT1OUT:
POP PSW ;恢復(fù)現(xiàn)場(chǎng)
POP ACC
RETI ;中斷退出
FLASH1: JB 01H,FLASH2 ;01H位為1時(shí),轉(zhuǎn)小時(shí)熄滅控制
MOV 72H,7AH ;01H位為0時(shí),"熄滅符"數(shù)據(jù)放入分
MOV 73H,7AH ;顯示單元(72H-73H),將不顯示分?jǐn)?shù)據(jù)
MOV 74H,78H
MOV 75H,79H
AJMP INTT1OUT ;轉(zhuǎn)中斷退出
FLASH2: MOV 72H,76H ;01H位為1時(shí),"熄滅符"數(shù)據(jù)放入小時(shí)
MOV 73H,77H ;顯示單元(74H-75H),小時(shí)數(shù)據(jù)將不顯示
MOV 74H,7AH
MOV 75H,7AH
AJMP INTT1OUT ;轉(zhuǎn)中斷退出
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 加1子 程 序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
評(píng)論