做了個電子時鐘,不知為何中斷程序不能計時,只顯示開機時間。請各位高手賜教。。。

程序代碼如下:
DISSEC EQU 20H ;定義秒顯示單元
DISMIN EQU 21H ;定義分鐘顯示單元
DISHOR EQU 22H ;定義小時顯示單元
CLKSEC EQU 23H ;定義秒走時單元
CLKMIN EQU 24H ;定義分鐘走時單元
CLKHOR EQU 25H ;定義小時走時單元
SECSIG EQU 29H ;定義一秒鐘到標志位
ORG 000H
LJMP START
ORG 000BH
LJMP INT_B
ORG 0030H
START: MOV SP ,#70H ;堆棧指針賦初值
MOV SECSIG,#2 ;2*500ms=1s
MOV TMOD,#01H ;使用定時器1定時500ms
MOV TH0,#3CH ;對定時器賦初值
MOV TL0,#0B0H
SETB EA ;開總中斷
SETB ET0 ;開定時器0中斷
SETB TR0 ;啟動定時器0
CLR A ;將開機時鐘顯示設(shè)置為12:00:00
MOV CLKSEC,A
MOV CLKMIN,A
MOV CLKHOR,#12
DISPLY: ;顯示程序
MOV DISSEC,CLKSEC ;將走時單元數(shù)據(jù)傳送到顯示單元
MOV DISMIN,CLKMIN
MOV DISHOR,CLKHOR
MOV A,DISSEC ;轉(zhuǎn)換顯示程序
MOV B,#10
DIV AB
MOV 42H,B ;秒位轉(zhuǎn)換
MOV 43H,A
MOV A,DISMIN
MOV B,#10
DIV AB
MOV 44H,B ;分鐘轉(zhuǎn)換
MOV 45H,A
MOV A,DISHOR
MOV B,#10
DIV AB
MOV 46H,B ;小時轉(zhuǎn)換
MOV 47H,A
MOV DPTR,#TABLE
MOV A,42H ;秒位顯示
MOV P2,#0FEH ;將位選碼送P2
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY2ms
MOV A,43H
MOVC A,@A+DPTR
MOV P2,#0FDH ;將位選碼送P2
MOV P0,A
LCALL DELAY2ms
MOV A,44H ;分鐘顯示
MOVC A,@A+DPTR
MOV P2,#0FBH ;將位選碼送P2
MOV P0,A
LCALL DELAY2ms
MOV A,45H
MOVC A,@A+DPTR
MOV P2,#0F7H ;將位選碼送P2
MOV P0,A
LCALL DELAY2ms
MOV A,46H ;小時顯示
MOVC A,@A+DPTR
MOV P2,#0EFH ;將位選碼送P2
MOV P0,A
LCALL DELAY2ms
MOV A,47H
MOVC A,@A+DPTR
MOV P2,#0DFH ;將位選碼送P2
MOV P0,A
LCALL DELAY2ms
LJMP DISPLY
INT_B:PUSH PSW ;中斷程序
PUSH ACC ;入棧保護現(xiàn)場
MOV TH0,#3CH ;對計數(shù)器重新賦值
MOV TL0,#0B0H
DJNZ SECSIG,TT ;判斷 1秒時間到否,不到轉(zhuǎn)向TT
MOV SECSIG,#2 ;一秒到時對標志位重新賦值
MOV A,CLKSEC ;對秒數(shù)據(jù)進行加一處理
ADD A,#1
CJNE A,#60,TT
MOV A,#0
MOV CLKSEC,A
MOV A,CLKMIN ;對分鐘數(shù)據(jù)進行加一處理
ADD A,#1
CJNE A,#60,TT
MOV A,#0
MOV CLKMIN,A
MOV A,CLKHOR ;對小時數(shù)據(jù)進行加以處理
ADD A,#1
CJNE A,#24,TT
MOV A,#0
MOV CLKHOR,A
TT:POP ACC ;TT為恢復(fù)現(xiàn)場中斷返回
POP PSW
RETI
DELAY2ms:MOV 40H,#4 ;2MS延時程序
D1:MOV 41H,#248
DJNZ 41H,$
DJNZ 40H,D1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;顯示數(shù)碼表0~9
END
|