有关外部中断的问题
时间:10-02
整理:3721RD
点击:
我刚开始学习单片机AT89S51,正在练习外部中断,有一个问题不明白请大家指教,当外部中断INT1发生并执行相应的中断子程序时,外部中断INT0如果发生的话,会执行相应的中断子程序吗?汇编程序如下:
ORG 00H;
JMP READY;
ORG 03H;
JMP INT_0;
ORG 13H;
JMP INT_1;
READY:
MOV IE,#85H;
MOV A,#80H;
MAIN:
MOV P0,#0F0H;
JMP MAIN;
INT_0: ;向右的流水灯
RR A;
MOV P0,A;
CALL DELAY;
JMP INT_0;
RETI
INT_1: ;向左的流水灯
RL A;
MOV P0,A;
CALL DELAY;
JMP INT_1;
RETI
DELAY: ;延时
MOV R5,#50;
D1:
MOV R4,#20;
D2:
MOV R3,#248;
DJNZ R3,$
DJNZ R4,D2
DJNZ R5,D1
RET
END
我的实验现象是:分别响应外部中断INT0和INT1时均能实现设定的目标,但当我先响应外部中断INT1,再响应外部中断INT0时,向左的流水灯无法变为向右。
ORG 00H;
JMP READY;
ORG 03H;
JMP INT_0;
ORG 13H;
JMP INT_1;
READY:
MOV IE,#85H;
MOV A,#80H;
MAIN:
MOV P0,#0F0H;
JMP MAIN;
INT_0: ;向右的流水灯
RR A;
MOV P0,A;
CALL DELAY;
JMP INT_0;
RETI
INT_1: ;向左的流水灯
RL A;
MOV P0,A;
CALL DELAY;
JMP INT_1;
RETI
DELAY: ;延时
MOV R5,#50;
D1:
MOV R4,#20;
D2:
MOV R3,#248;
DJNZ R3,$
DJNZ R4,D2
DJNZ R5,D1
RET
END
我的实验现象是:分别响应外部中断INT0和INT1时均能实现设定的目标,但当我先响应外部中断INT1,再响应外部中断INT0时,向左的流水灯无法变为向右。
没有保护现场。然后就是在中断里一直循环这样不好吧。
我就是想验证一下当外部中断INT1响应时,能否再响应外部中断INT0,这种顺序不是符合中断的优先级吗?对了,什么是保护现场啊?还请赐教
你这个貌似00H开始汇编,
JMP READY; ;两个字节空间
MOV IE,#85H; ;两个字节空间
MOV A,#80H; ;两个字节空间
这3句占用6个字节 把外部中断0服务程序入口地址覆盖了吧。
ORG 03H; ;03H外部中断0服务程序入口
JMP INT_0;
你把第一行改成ORG 0100H 试试保护现场就是为了使中断服务子程序运行的时候不破话某些寄存器或者寄存单元的数据。以免在中断返回后主程序的运行受到影响。堆栈操作指针主要是用于“保护现场”和“现场恢复”的、希望对你有帮助。(PUSH --->入栈 POP--->出栈 太多了你百度吧。)
看不懂汇编,但是如果执行INT1时,如果来了INT0会先执行INT0的,执行结束后会继续执行刚才INT1里的语句
谢谢你了 我试试