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