|
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT_0
ORG 0030H
;==========主程序MAIN函數(shù)====LED流水燈===
MAIN: MOV SP, #40H ;設(shè)置棧底
MOV A,#0FEH ;送顯示模式字
MOV P0,#0FFH ;P0口等待輸入
SETB EA ;開(kāi)總中斷
SETB EX0 ;開(kāi)外部中斷0
SETB EX1 ;開(kāi)外部中斷1,可以直接寫MOV IE,#85H
LINE: MOV P2,A ;點(diǎn)亮二極管 P2=1111 1011B
ACALL DELAY500MS
RL A ;左移一位,改變顯示模式字A=1111 1011
ACALL DELAY500MS
SJMP LINE ;下面一個(gè)二極管
;==========外部中斷0中斷服務(wù)成程序=====
INT_0: CLR EA ;關(guān)中斷
PUSH ACC ;保護(hù)現(xiàn)場(chǎng)
PUSH PSW
JB P0.0,EXT0 ;中斷查詢
JB P0.1,EXT1
JB P0.2,EXT2
JB P0.3,EXT3
EXIT: POP PSW ;恢復(fù)現(xiàn)場(chǎng)
POP ACC
SETB EA
RETI ;中斷返回
EXT0: ; EXINT0中斷程序
MOV R3, #0FH ;LED亮滅8次
MOV A, #0FFH ;送LED滅
ON_OFF0:MOV P2, A
LCALL DELAY500MS
CPL A ;8個(gè)LED亮滅轉(zhuǎn)換
LCALL DELAY500MS
DJNZ R3, ON_OFF0
AJMP EXIT
EXT1: ; EXINT1中斷程序
MOV R3, #0FH ;LED亮滅8次
MOV A, #0FH ;送LED滅
ON_OFF1:MOV P2, A
LCALL DELAY500MS
CPL A ;8個(gè)LED亮滅轉(zhuǎn)換
LCALL DELAY500MS
DJNZ R3, ON_OFF1
AJMP EXIT
EXT2: ;EXINT2中斷程序
MOV R3, #0FH ;LED亮滅8次
MOV A, #33H ;送LED滅
ON_OFF2:MOV P2, A
LCALL DELAY500MS
CPL A ;8個(gè)LED亮滅轉(zhuǎn)換
LCALL DELAY500MS
DJNZ R3, ON_OFF2
AJMP EXIT
EXT3: ;EXINT3中斷程序
MOV R3, #0FH ;LED亮滅8次
MOV A, #55H ;送LED滅
ON_OFF3:MOV P2, A
LCALL DELAY500MS
CPL A ;8個(gè)LED亮滅轉(zhuǎn)換
LCALL DELAY500MS
DJNZ R3, ON_OFF3
AJMP EXIT
;==========延時(shí)0.5秒===================
DELAY500MS: ;@12.000MHz
PUSH 30H
PUSH 31H
PUSH 32H
MOV 30H,#2 ; 總時(shí)間=(3*255*255+215*255+100)*2μs ≈ 500ms
MOV 31H,#215
MOV 32H,#10
NEXT:
DJNZ 32H,NEXT
DJNZ 31H,NEXT
DJNZ 30H,NEXT
POP 32H
POP 31H
POP 30H
RET
END ;匯編程序結(jié)束
|
|