利用AT89C2051制作的6位電子鐘
SETB ET0 ;允許T0中斷
SETB TR0 ;開啟T0定時器
MOV R4,#14H ;1秒定時用初值(50MS×20)
START1: LCALL DISPLAY ;調(diào)用顯示子程序
JNB P3.7,SETMM1 ;P3.7口為0時轉(zhuǎn)時間調(diào)整程序
SJMP START1 ;P3.7口為1時跳回START1
SETMM1: LJMP SETMM ;轉(zhuǎn)到時間調(diào)整程序SETMM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 1秒計時程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;T0中斷服務程序
INTT0: PUSH ACC ;累加器入棧保護
PUSH PSW ;狀態(tài)字入棧保護
CLR ET0 ;關T0中斷允許
CLR TR0 ;關閉定時器T0
MOV A,#0B7H ;中斷響應時間同步修正
ADD A,TL0 ;低8位初值修正
MOV TL0,A ;重裝初值(低8位修正值)
MOV A,#3CH ;高8位初值修正
ADDC A,TH0
MOV TH0,A ;重裝初值(高8位修正值)
SETB TR0 ;開啟定時器T0
DJNZ R4, OUTT0;20次中斷未到中斷退出
ADDSS: MOV R4,#14H ;20次中斷到(1秒)重賦初值
MOV R0,#71H ;指向秒計時單元(71H-72H)
ACALL ADD1 ;調(diào)用加1程序(加1秒操作)
MOV A,R3 ;秒數(shù)據(jù)放入A(R3為2位十進制數(shù)組合)
CLR C ;清進位標志
CJNE A,#60H,ADDMM
ADDMM: JC OUTT0 ;小于60秒時中斷退出
ACALL CLR0 ;大于或等于60秒時對秒計時單元清0
MOV R0,#77H ;指向分計時單元(76H-77H)
ACALL ADD1 ;分計時單元加1分鐘
MOV A,R3 ;分數(shù)據(jù)放入A
CLR C ;清進位標志
CJNE A,#60H,ADDHH
ADDHH: JC OUTT0 ;小于60分時中斷退出
ACALL CLR0 ;大于或等于60分時分計時單元清0
MOV
評論