微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于中断返回的问题,新手求教

关于中断返回的问题,新手求教

时间:10-02 整理:3721RD 点击:
# include<REG51.H>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar i;
//= = = = = = = = = = = =
void DelayMS(uint x) //延时
{
uchar i;
while(x--) for(i=0;i<120;i++);
}
//= = = = = = = = =  = = =
int1() interrupt 2  //K1中断程序
{char k;
for(k=0;k<=2;k++)
    {P0=0x00;   //发光二极管全亮
     DelayMS(150);
     P0=0xFF;  //发光二极管全灭
     DelayMS(150);
   }
}
//= = = = = = = = = = = = = =
void main()
  {
   IT1=0;
   EX1=1;
   EA=1;
   P0=0xfe;
    while(1)
  {DelayMS(150);
     P0=_crol_(P0,1); //P0 的值向左循环移动
     DelayMS(150);
  }  }

void int1() interrupt 2  //K1中断程序
{
  uchar k;
for(k=0;k<=2;k++)
    {P0=0x00;   //发光二极管全亮
     DelayMS(150);
     P0=0xFF;  //发光二极管全灭
     DelayMS(150);
   }
P0=0xfe;
}
初值加这里,把while(1)里的初值去掉试试

中断 了回不来了。就不动了

进了,中断,起码要先清一下中断标志吧

我图是用一个按钮,按一下中断一下。不是应该可以自己回去的吗。


你选择电平触发,如果电平不改变,则出了中断就又再次进入中断,如果判断没错的话,你现在的情况应该是发光管交替全亮、全灭,如果是这样的话,把中断触发方式改成边沿触发

那是外部,单片机 寄存器 里的状态也需要清空一下

那你看应该怎么改呢

跟触发没关系。改了还是一样

是什么现象,怎么判断是
中断 了回不来了。就不动了

中断的返回值类型必须为void,中断函数不向主函数返回任何值
你的中断函数没有声明void返回类型,你声明一下试试

外中断的标志位可以由硬件清除,一般不需要人为干预

就是正常循环跑,然后中断后闪5次。就1个灯也不亮了

如果你的单片机是早期的8051,外部中断只支持下降沿和低电平触发,如果是下降沿触发,当你按下按键时,中断触发,当你松开按键,INT1回到高电平时,退出中断,同时中断标志位会在响应中断后由硬件清零,多看看官方的数据手册,讲的很详细

void int1() interrupt 2  //K1中断程序
{
  uchar k;
for(k=0;k<=2;k++)
    {P0=0x00;   //发光二极管全亮
     DelayMS(150);
     P0=0xFF;  //发光二极管全灭
     DelayMS(150);
   }
}
         改成这样了,仿真起来还是和原来一样。

void int1() interrupt 2  //K1中断程序
{
  uchar k;
for(k=0;k<=2;k++)
    {P0=0x00;   //发光二极管全亮
     DelayMS(150);
     P0=0xFF;  //发光二极管全灭
     DelayMS(150);
   }
}
         改成这样了,仿真起来还是和原来一样。

正常啊,中断要改成边沿触发,你的中断里只闪了灯3次,但你现在是闪了5次,也就是多进了中断,而且中断退出后是灯全灭,而回到主程序后有没有给P0重新赋值,这时候P0就按着全灭的状态循环,就算循环了,灯不亮,你也看不到

我说错了。不是5次是3次。你说的应该是有道理的。可是如果我在下面也加个初值。
void main(void)
  {
   IT1=0;
   EX1=1;
   EA=1;
   P0=0xfe;
    while(1)
  {     P0=0xfe;
    DelayMS(1500);
     P0=_crol_(P0,1); //P0 的值向左循环移动
     DelayMS(1500);
  }
}

就会最初不是8个灯循环走,是2个灯了。虽然中断后能回来了。

可以了也。实在感谢

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

网站地图

Top