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

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

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

中断是指CPU对系统发生的某个事件作出的一种反应:CPU暂停正在执行的程序,保留现场后自动转去执行相应的处理程序,处理完该事件后再返回断点继续执行被"打断"的程序

在我们所用的电脑中,所有的硬件都需要执行中断请求的动作,简单说它的作用就是用来停止其相关硬件的工作状态。我们可以举一个日常生活中的例子来说明,假如你正在给朋友写信,电话铃响了,这时你放下手中的笔去接电话,通话完毕再继续写信。这个例子就表现了中断及其处理的过程:电话铃声使你暂时中止当前的工作,而去处理更为急需处理的事情——接电话,当把急需处理的事情处理完毕之后,再回过头来继续原来的事情。在这个例子中,电话铃声就可以称为“中断请求”,而你暂停写信去接电话就叫作“中断响应”,那么接电话的过程就是“中断处理”。由此我们可以看出,在计算机执行程序的过程中,由于出现某个特殊情况(或称为“事件”),使得系统暂时中止现行程序,而转去执行处理这一特殊事件的程序,处理完毕之后再回到原来程序的中断点继续向下执行,而这个过程就被称为中断。

中断的作用

我们可以再举一个例子来说明中断的作用。假设有一个朋友来拜访你,但是由于不知何时到达,你只能在门口等待,于是什么事情也干不了;但如果在门口装一个门铃,你就不必在门口等待而可以在家里去做其他的工作,朋友来了按门铃通知你,这时你才中断手中的工作去开门,这就避免了不必要的等待。而计算机也一样,例如打印文稿的 *** 作。因为cpu传送数据的速度高,而打印机速度较慢,如果不采用中断技术,cpu将经常处于等待状态,这会使得电脑的工作效率极低。而采用了中断方式后,cpu就可以在打印的同时进行其他的工作,而只在打印机缓冲区内的当前内容打印完毕,而发出中断请求之后才予以响应,这时才暂时中断当前的工作转去执行停止打印的 *** 作,之后再返回执行原来的程序。这样就大大地提高了计算机系统的效率。

可以打个比方,每天上班你都随时需要知道你同事的工作进度情况,你是希望你不停地打个电话去问“你做完了吗”,还是希望他做完了主动打个电话给你讲“我做完了,我们谈谈吧”。这就是中断的意义,在不需要的时候不影响处理 器做其它的事情,提高效率,增强程序的实时性。

51单片机外部中断使用方法:

1、51单片机的外部中断int0对应的引脚为p32。

2、设置寄存器,打开终端并选择中断的触发方式。

EA为整体中断允许位,首先要将EA置1,打开中断。

EX0为外部中断INT0,置1开启。

IT0寄存器:置0为低电平触发,置1为下降沿触发。

3、编写中断函数,int0的中断编号为0,这里使用中断控制led的点亮与熄灭。

中断函数格式一般为:

void 函数名称(void) interrupt 中断编号 using 寄存器组编号{语句;}

4、编译程序,并导入单片机对程序进行测试。

中断分为4个步骤:中断请求→中断相应→中断处理→中断返回(先做更重要的事)

1、数据的输入/输出传送方式

外部中断要看对应引脚外部的电平状态。

例如:外部中断0(INT0)对应的引脚是P32,

当出现 低电平 ,即P32引脚连接的地方是 低电平 ,进入相应的中断函数;

当出现 下降沿 ,即P32引脚连接的地方 由高电平变为低电平 ,进入相应的中断函数

内部中断源要看单片机内部的定时器/计数器

中断允许寄存器IE

定时器/计数器0/1控制寄存器TCON

对同时发生多个中断申请时:

不同优先级的中断同时申请:先高后低

相同优先级的中断同时申请:按序执行

正处理低优先级中断又接到高级别中断:高打断低

正处理高优先级中断又接到低级别中断:高不理低

初始化的意思如图所示

实现思路

查看上方 P3第二功能各引脚功能定义 ,P33是外部中断1 (INT1)的外部输入引脚

编写一个程序,使得 S2按键按下 时,某个IO口(下面程序选择了P37这个IO口) 产生跳变沿 (由1变0)。P33与P37用跳线连接,使P33口与P37口同时产生跳变沿。

51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。

这个原理很好理解。但应用时需要特别注意的几点:

1) 电平触发方式时,中断标志寄存器不锁存中断请求信号。也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电平触发的中断被CPU响应并执行,必须保证外部中断源口线的低电平维持到中断被执行为止。因此当CPU正在执行同级中断或更高级中断期间,产生的外部中断源(产生低电平)如果在该中断执行完毕之前撤销(变为高电平)了,那么将得不到响应,就如同没发生一样。同样,当CPU在执行不可被中断的指令(如RETI)时,产生的电平触发中断如果时间太短,也得不到执行。

2) 边沿触发方式时,中断标志寄存器锁存了中断请求。中断口线上一个从高到低的跳变将记录在标志寄存器中,直到CPU响应并转向该中断服务程序时,由硬件自动清除。因此当CPU正在执行同级中断(甚至是外部中断本身)或高级中断时,产生的外部中断(负跳变)同样将被记录在中断标志寄存器中。在该中断退出后,将被响应执行。如果你不希望这样,必须在中断退出之前,手工清除外部中断标志。

3) 中断标志可以手工清除。一个中断如果在没有得到响应之前就已经被手工清除,则该中断将被CPU忽略。就如同没有发生一样。

4) 选择电平触发还是边沿触发方式,TCON 控制寄存器

设置。应从系统使用外部中断的目的上去考虑,而不是如许多资料上说的根据中断源信号的特性来取舍。比如,有的书上说(《Keil C51使用技巧及实战》),就有类似的观点。

程序中断方式的由来是指由于某种事件的发生(硬件或者软件的),计算机暂停执行当前的程序,转而执行另一程序,以处理发生的事件,处理完毕后又返回原程序继续作业的过程。中断是处理器一种工作状态的描述。我们把引起中断的原因,或者能够发出中断请求信号的来源统称为中断源。

中断源

一般来说,外部中断主要有以下几种:

一、I/O设备:如显示器、键盘、打印机等。

二、数据通道:软盘、硬盘、光盘等。

三、实时时钟:如外部的定时电路等。

四、用户故障源:如掉电、奇偶校验错误等。

产生于CPU内部的中断源有几种:

一、由CPU得运行结果产生:如除数为0、结果溢出、单步执行等。

二、执行中断指令INT:INT3

三、非法 *** 作或指令引起异常处理。

中断分为内部中断和外部中断,内部中断有很多种,比如定时器中断。外部中断指的是由外部信号触发的中断,单片机的特定引脚可以响应外部中断,当此引脚检测到信号时,可以进入中断程序。需要程序来配置中断寄存器,需要自己编写中断服务函数。网上例子很多的

以上就是关于51单片机外部中断子程序为什么会执行两次全部的内容,包括:51单片机外部中断子程序为什么会执行两次、中断技术的基本原理、51单片机中的外部中断有什么作用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/10211767.html

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

发表评论

登录后才能评论

评论列表(0条)

保存