|
如下程序,在实验板上调试的时候出现这种情况:
当按下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
|
|