微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 有关外部中断的问题

有关外部中断的问题

时间: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时,向左的流水灯无法变为向右。

没有保护现场。然后就是在中断里一直循环这样不好吧。

我就是想验证一下当外部中断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里的语句

谢谢你了     我试试

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top