有关外部中断的问题

2019-07-15 22:27发布

我刚开始学习单片机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时,向左的流水灯无法变为向右。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
qq729101414
2019-07-16 11:52
你这个貌似00H开始汇编,
  JMP   READY;     ;两个字节空间
  MOV   IE,#85H;  ;两个字节空间
   MOV  A,#80H;  ;两个字节空间
这3句占用6个字节  把外部中断0服务程序入口地址覆盖了吧。
   ORG   03H;  ;03H外部中断0服务程序入口
   JMP   INT_0;
你把第一行改成ORG 0100H 试试保护现场就是为了使中断服务子程序运行的时候不破话某些寄存器或者寄存单元的数据。以免在中断返回后主程序的运行受到影响。堆栈操作指针主要是用于“保护现场”和“现场恢复”的、希望对你有帮助。(PUSH --->入栈  POP--->出栈  太多了你百度吧。。。。。)

一周热门 更多>