51单片机外部中断子程序为什么会执行两次?

51单片机外部中断子程序为什么会执行两次?,第1张

你的外部中断应该是属于下降沿触发,当有一个下降沿到来时外部中断请求标志IE0或IE1(外部中断0或外部中断1请求中断标志,下面简称为IEx)就会置1,当进入中断程序后IEx由硬件归零。也就是说单片机当检测到IEx为1的时候就会进入到外部中断程序。\x0d\x0a现在来分析一下为什么你的程序会执行两次中断。\x0d\x0a当单片机外部中断引脚第一次接收到一个下降沿时,IEx被置1,进入中断程序,随即IEx被硬件清零。然而由于你用杜邦线接触P3.2口存在抖动(你感觉不到),外部中断引脚再次接受到一个下降沿,IEx又被置1,单片机又要响应中断,但此时由于上一个中断程序未执行完,单片机将等待外部中断程序执行完(你可以理解为有两个中断事件,但这两个事件优先级相同,所有按顺序响应)。在这个过程中,你的接触仍然会产生很多下降沿,但因为IEx只有响应了中断事件后才会清零,因此IEx一直为1。当第一次的中断程序执行结束后,单片机检测到IEx又是1,马上又再次进入中断。因为你的接触时间远远小于你的中断程序执行时间,因此在第二次执行中断程序前已不存在下降沿,所以进入第二次中断程序后,IEx就被清零了,这样执行完第二次中断程序后就不会再次进入中断了。\x0d\x0a说了那么多希望你能明白吧。不明白可以翻查相关单片机外部中断相关资料。

一、主体不同

1、内部中断:断是一个算法指令,是由软中断指令启动的中断。

2、外部中断:是单片机实时地处理外部事件的一种内部机制。

二、机制不同

1、内部中断:执行除法指令时,出现除数为0或商超过寄存器所能表达的范围,则产生类型为0 的内部中断。是优先级最高的内部中断。

2、外部中断:当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去。

三、特点不同

1、内部中断:由一条指令INT n产生中断类型码或者由指令规定,或者是预定的。不执行INTA总线周期,CPU也不发出响应信号INTA。

2、外部中断:在实时控制中,现场的各种参数、信息均随时问和现场而变化。这些外界变量可根据要求随时向CPU发出中断申请。请求CPU及时处珲中断请求,如中断条件。

参考资料来源:百度百科-外部中断

参考资料来源:百度百科-内部中断

外部中断0设置为低电平触发,去掉while循环后一直按下按键实际代码为

delay()

P1=0xfe

delay()

EX0=0

P1=_crol_(P1,1)

delay()

EX0=1

P1=0X00

一直重复.

之前的代码进入中断后会一直循环,并不会退出中断。正确做法中断应该改为:

void

tx0()

interrupt

0

using

0

{

unsigned

char

i

delay()

P1=0xfe

delay()

EX0=0

while(1)

{

P1=_crol_(P1,1)

delay()

if(P3&0x04)

//判断是否松开中断0的按键

{

break

}

}

EX0=1

P1=0X00

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10948840.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存