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\说了那么多希望你能明白吧。不明白可以翻查相关单片机外部中断相关资料。

中断是硬件入口的无须主程序调用,不同的单片机入口地址不同但地址固定,应该在头文件有定义。发生中断时硬件把当前地址入栈然后跳到中断地址去那里通常只是跳转指令,c编译时会把它指向中断子程序。返回时会返回到中断处继续执行。

中断处理函数,是不可以被调用的,只能由硬件激活(CPU响应然后转入到特定地址开始执行,处理完之后,返回断点,继续执行)。

因此,中断处理函数,相对于普通函数来说,开始执行的时刻,是随机的。你在写普通函数时,不能预测,在普通函数执行到哪一行,外部设备恰好就产生了一个事件

在程序执行时,可能在你的某个普通子程序(C中统一称为函数)执行期间,因为硬件激活了中断,CPU自动转到中断函数插进来执行了,形成执行顺序上的嵌套。但是,你在编写普通函数的时候,是无法预期的,所以,不可能把中断处理语句写到普通函数中。

在 *** 作系统开启了保护模式后,应用程序不能直接处理中断,而是要由设备驱动来完成。

在单片机之类的编程中,几乎是裸机编程,所以,可以按具体的C版本,写出自己的中断函数。

中断函数与普通函数之间,可以通过全程变量(标识,计数),建立起各种配合。

可以的。中断程序中可以设置一个状态标志进行区分是使用了定时器中断还是计数器中断!TO作为定时用和作为计数用要分别进行初始化的!在初始化程序中可以对状态标志进行置位或清零。子程序都是interrupt0 希望可以帮到你 就是说区分进入中断是定时中断还是计数中断。都可以放在interrupt0 中。只不过执行的时候区分开就可以

以上就是关于51单片机外部中断子程序为什么会执行两次全部的内容,包括:51单片机外部中断子程序为什么会执行两次、单片机使用C语言时,中断子程序在主程序中是怎样被调用的各位helpme!、c语言子程序中可以有中断吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/10070623.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存