?? 微電腦倒計(jì)時(shí)器.asm
字號(hào):
; FILE NAME:GJ-02.ASM
ORG 0000H ;程序入口地址
AJMP MAIN
ORG 0003H ;外部中斷INT0入口地址
AJMP PINT0 ;轉(zhuǎn)中斷服務(wù)子程序
ORG 000BH ;T0中斷入口
AJMP WT0 ;定時(shí)器T0入口地址
ORG 20H
MAIN: MOV SP,#40H ;設(shè)置棧指針
MOV 20H,#0H ;把定時(shí)數(shù)據(jù)單元清零
MOV 21H,#0
MOV 22H,#0
MOV 23H,#15
MOV 24H,#0
MOV TH0,#5 ;裝入定時(shí)初值
MOV TL0,#5
MOV TMOD,#02H ;設(shè)T0為方式2
SETB EA ;開CPU中斷
SETB ET0 ;允許T0中斷
CLR TR0 ;啟動(dòng)T0計(jì)數(shù)
SETB IT0 ;設(shè)定INT0觸發(fā)方式
SETB EX0 ;INT0請(qǐng)求中斷
MOV 34H,#1
MOV 35H,#5
NOP ;第二位顯示數(shù)據(jù) │
M: NOP
ACALL LED
ACALL SON
JNB 00H,M
MM: NOP
ACALL ZH1
ACALL DSP
ACALL LED
AJMP M
;顯示子程序
DSP: MOV R7,#0AFH
DSP0: MOV R0,#30H
MOV DPTR,#TAB
NOP
MOV A,@R0
MOVC A,@A+DPTR
RX1: MOV P1,A
CLR P3.0
DJNZ R7,RX1
MOV R7,#0afh
INC R0
MOV P1,#0FFH
SETB P3.0
MOV A,@R0
MOVC A,@A+DPTR
RX2: MOV P1,A
CLR P3.1
DJNZ R7,RX2
MOV R7,#8
SETB P3.1
; DJNZ R7,DSP0
RET
DSP1: MOV R7,#0FH
DSP01: MOV R0,#34H
MOV DPTR,#TAB
MOV A,@R0
MOVC A,@A+DPTR
RX01: MOV P1,A
CLR P3.1
DJNZ R7,$
MOV R7,#0FH
INC R0
SETB P3.1
MOV A,@R0
MOVC A,@A+DPTR
MOV P1,A
CLR P3.0
DJNZ R7,$
SETB P3.0
RET
ZH1: MOV R2,#0
MOV R3,23H
ACALL BCD
MOV A,R6
ANL A,#0FH
MOV 30H,A
MOV A,R6
ANL A,#0F0H
SWAP A
MOV 31H,A
RET
;十進(jìn)制轉(zhuǎn)換為二進(jìn)制子程序
DTOB:
MOV 32H,#0
MOV 33H,#0
MOV R0,#32H
MOV R2,#3
ACALL IDTB
MOV A,R4
MOV 23H,A
RET
IDTB: MOV R3,#0
MOV A,@R0
MOV R4,A
IDTL: MOV A,R4
MOV B,#10
MUL AB
MOV R4,A
MOV B,#10
XCH A,B
XCH A,R3
MUL AB
ADD A,R3
XCH A,R4
INC R0
ADD A,@R0
XCH A,R4
ADDC A,#0
MOV R3,A
DJNZ R2,IDTL
RET
;二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)子程序
BCD: CLR A
MOV R4,A
MOV R5,A
MOV R6,A
MOV R7,#16
IBTL2: CLR C
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R6
ADDC A,R6
DA A
MOV R6,A
MOV A,R5
ADDC A,R5
DA A
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
DJNZ R7,IBTL2
RET
;延時(shí)子程序
DL: MOV R7,#02H
DL1: MOV R6,#0FFH
DL2: DJNZ R6,DL2
DJNZ R7,DL1
RET
;外部中斷服務(wù)子程序
PINT0: CLR EX0
PUSH ACC
PUSH PSW
SETB P3.5
ACALL DSP1
PK: JB P3.2,TOEXT
pk0: acall dsp1
JNB P3.2,pk0
PK2: JB P3.3,PK3 ;判K2按下否,未按則轉(zhuǎn)到判K3狀態(tài)
ACALL DSP1
INC 34H
MOV A,34H
CJNE A,#0AH,PK22
MOV 34H,#0
PK22: ACALL DSP1 ;K2按下,30H加1
JNB P3.3,PK22
AJMP PK2
PK3: ACALL DSP1
JB P3.4,PK1 ;判K3按下否,未按則轉(zhuǎn)到判K1狀態(tài)
INC 35H
MOV A,35H
CJNE A,#0AH,PK33
MOV 35H,#0
PK33: ACALL DSP1
JNB P3.4,PK33
AJMP PK3
PK1: ACALL DSP1
JB P3.2,PK2 ;K1未按則轉(zhuǎn)判K2和K3
pk10: acall dsp1
JNB P3.2,pk10
ACALL DTOB
SETB 00H
TOEXT: SETB EX0 ;開中斷
SETB TR0
POP PSW ;恢復(fù)現(xiàn)場(chǎng)
POP ACC
RETI
LED: JB 01H,LED0
CLR P3.5
RET
LED0: SETB P3.5
RET
SON: JB 02H,SON0
CLR P3.7 ;
RET
SON0: SETB P3.7 ;
RET
;段碼表
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
;定時(shí)中斷服務(wù)子程序
WT0: PUSH ACC
PUSH PSW
INC 21H ;0.5ms
MOV A,21H
CJNE A,#0C8H,TORETI ;200D=C8H
MOV 21H,#0
INC 22H ;100ms
MOV A,22H
CJNE A,#10,TORETI
MOV 22H,#0
DEC 23H
MOV A,23H
; CJNE A,#60,TORETI
; MOV 23H,#0
; DEC 24H
CPL 01H
; MOV A,24H
CJNE A,#0,TORETI
CLR TR0
SETB 02H
CLR 01H
CLR 00H
TORETI: POP PSW
POP ACC
RETI
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -