找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2341|回复: 4
打印 上一主题 下一主题
收起左侧

关于51单片机的中断程序执行

[复制链接]
跳转到指定楼层
楼主
ID:378990 发表于 2021-10-30 08:52 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果INT0设置为下降沿中断,那么当中断发生后,INT0立即变为高电平,然后在中断程序结束之前又变成低电平。结果会如何?(单片机开发版不在手边,只好求教大家了)
第一种可能:单片机继续执行中断程序,不管新的下降沿信号。
第二种可能:单片机重新执行中断程序。

结果会是哪一种?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:624769 发表于 2021-10-30 13:39 | 只看该作者
继续执行, 直道结束后再次运行INT0中断。 但是,如果在中断结束前有 IE0 = 0; 的语句,并且INT0的再次下降沿发生在这句与句之前,那么,退出后中断后也不会再次执行中断。
回复

使用道具 举报

板凳
ID:123289 发表于 2021-10-30 13:44 | 只看该作者
本帖最后由 yzwzfyz 于 2021-11-1 08:11 编辑

经楼下提醒,订正一下:
是否发生中断响应需要三个条件:
1、中断被允许。
2、IE0=1
3、当前程序未运行在本级或更高级的中断服务条件中。
INT0下沿发生后,仅仅是让IE0=1,并不决定是否响应中断。
下面回复你的问题,假设(1、)已成立:
【如果INT0设置为下降沿中断,那么当中断发生后,INT0立即变为高电平,然后在中断程序结束之前又变成低电平】:这时仅让IE0=1。由于条件(3、)的原因(程序在本级中断服务程序中),所以不会立即响应。
当中断退出时(以RETI指令为界定条件),会检测到IE0=1,但需要在下一个指令周期才能被响应,所以会再执行一条指令,如果此时(1、)(3、)也满足条件,则会再次进行中断服务程序。

回复

使用道具 举报

地板
ID:624769 发表于 2021-10-30 19:14 | 只看该作者
yzwzfyz 发表于 2021-10-30 13:44
是否发生中断响应需要三个条件:
1、中断被允许。
2、IT0=1

纠正一下:
IT0是 选择 中断方式,下降沿还是低电平触发。 IE0才是中断标志位。
回复

使用道具 举报

5#
ID:401564 发表于 2021-10-30 23:23 | 只看该作者
进入中断之后,硬件自动清除IE0标志位
在中断程序执行期间.只要还没有退出中断程序,当前中断不会被自己中断
也就是说,当程序还在执行INT0 中断的时候,INT0在执行期间又被触发了一次(不管是下降沿还是低电平,又或者是上升沿),INT0还是会在继续执行当前的代码
但是,IE0会被重新置位.当你执行完ITN0之后,退出了就会再次进入INT0中断
所以,一般在退出之前先清除IE0
另外,IT0在传统的AT8051和STC8051中的功能是不一样的,要看数据手册
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表