|
如下程序,在實(shí)驗(yàn)板上調(diào)試的時(shí)候出現(xiàn)這種情況:
當(dāng)按下k3時(shí)候,外部中斷0觸發(fā),燈向右移動(dòng),接著按下k4,外部中斷1觸發(fā)(設(shè)置了中斷0低優(yōu)先級(jí),中斷1高優(yōu)先級(jí)),燈向左移動(dòng),
接著再按k3按鍵,就不再實(shí)現(xiàn)中斷0觸發(fā)了。仍然在執(zhí)行k4程序。這是為什么呢?
我在k3,K4程序內(nèi)交替設(shè)置了中斷0和中斷1優(yōu)先級(jí)別,這樣執(zhí)行循環(huán)是否有問題?
在keil里面仿真的時(shí)候如圖
;==============================================================
;實(shí)驗(yàn)名稱:中斷實(shí)驗(yàn)程序
;實(shí)驗(yàn)功能:利用外部中斷p3.2,p3.3,按下k3時(shí)候,燈右移動(dòng),按下k4時(shí)候燈左移動(dòng),數(shù)碼管利用p2
;
;==============================================================
ORG 000H
AJMP MAIN
ORG 0003H ;中斷0入口地址
AJMP K3 ;右移程序
ORG 0013H ;中斷1入口地址
AJMP K4 ;左移程度
GPIO_LED EQU P2
ORG 0030H ;主函數(shù)
MAIN:
SETB EA ;開總中斷
CLR IT0 ;設(shè)置外部中斷觸發(fā)方式為低電平觸發(fā)
SETB EX0 ;外部中斷允許
CLR IT1
SETB EX1
MOV A,#11111110B ;給累加器一個(gè)初始值,第一個(gè)燈亮
HERE:SJMP HERE
ORG 0060H
K3:
SETB PX1
CLR PX0
MOV GPIO_LED,A
ACALL DELAY
RR A ;累加器所有數(shù)字左移一位
MOV GPIO_LED,A ;將累加器值送到p2
AJMP K3
RETI
ORG 0090H
K4:
SETB PX0
CLR PX1
MOV GPIO_LED,A
ACALL DELAY
RL A ;累加器所有數(shù)字左移一位
MOV GPIO_LED,A ;將累加器值送到p2
AJMP K4
RETI
DELAY: ;延時(shí)程序
MOV R1,#255
D1:
MOV R2,#255
DJNZ R2,$
DJNZ R1,D1
RET
END
|
-
111.jpg
(2.85 MB, 下載次數(shù): 134)
下載附件
2013-8-29 16:20 上傳
|