ORG 00H
START: MOV R0,#20
MOV R4,#60
LP0: MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV DPTR,#TABLE
SETB TR0
LP1: JBC TF0,LP2
ACALL DISP
AJMP LP1
LP2: DJNZ R0,LP0
CLR TR0
MOV R0,#20
MOV A,R4
CJNE A,#0,DEC1
MOV R4,#60
AJMP JP1
DEC1: DEC A
MOV R4,A
JP1: ACALL DISP
AJMP LP0
DISP: MOV A,R4
MOV B,#10
DIV AB ;當前值除以10
MOV 20H,A ;得出的商送給十位
MOV 21H,B ;得出的余數送給個位
MOV A,20H ;十位顯示
MOVC A,@A+DPTR
MOV P0,A
SETB P2.1
LCALL DELAY
CLR P2.1
MOV A,21H ;個位顯示
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY
CLR P2.0
RET
DELAY: ;誤差 0us
MOV R6,#10
DL0:
MOV R5,#50
DJNZ R5,$
DJNZ R6,DL0
RET
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H ;***陽極0-9顯示代碼
DB 92H,82H,0F8H,80H,90H
END
中斷方式:
ORG 00H
AJMP MAIN
ORG 0BH
AJMP T0INT
ORG 30H
MAIN:
MOV TMOD,#01H
MOV TH0,#3CH
MOV TL0,#0B0H ;50MS壹中斷
MOV R0,#20 ;20次為1S
MOV R4,#60 ;60S開始倒計時
SETB EA
SETB ET0
SETB TR0
MOV DPTR,#TABLE
MAIN1:
ACALL DISP
AJMP MAIN1
DISP:
MOV A,R4
MOV B,#10
DIV AB ;當前值除以10
MOV 20H,A ;得出的商送給十位
MOV 21H,B ;得出的余數送給個位
MOV A,20H ;十位顯示
MOVC A,@A+DPTR
MOV P0,A
SETB P2.1
LCALL DELAY
CLR P2.1
MOV A,21H ;個位顯示
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY
CLR P2.0
RET
T0INT:
MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,RTI
MOV R0,#20
DEC R4
CJNE R4,#0,RTI
MOV R4,#60
RTI:
RETI
DELAY: ;誤差 0us
MOV R6,#10
DL0:
MOV R5,#50
DJNZ R5,$
DJNZ R6,DL0
RET
TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H ;***陽極0-9顯示代碼
DB 92H,82H,0F8H,80H,90H
END