标题:
关于51单片机的中断程序执行
[打印本页]
作者:
沟里郭嘉
时间:
2021-10-30 08:52
标题:
关于51单片机的中断程序执行
如果INT0设置为下降沿中断,那么当中断发生后,INT0立即变为高电平,然后在中断程序结束之前又变成低电平。结果会如何?(单片机开发版不在手边,只好求教大家了)
第一种可能:单片机继续执行中断程序,不管新的下降沿信号。
第二种可能:单片机重新执行中断程序。
结果会是哪一种?
作者:
188610329
时间:
2021-10-30 13:39
继续执行, 直道结束后再次运行INT0中断。 但是,如果在中断结束前有 IE0 = 0; 的语句,并且INT0的再次下降沿发生在这句与句之前,那么,退出后中断后也不会再次执行中断。
作者:
yzwzfyz
时间:
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、)也满足条件,则会再次进行中断服务程序。
作者:
188610329
时间:
2021-10-30 19:14
yzwzfyz 发表于 2021-10-30 13:44
是否发生中断响应需要三个条件:
1、中断被允许。
2、IT0=1
纠正一下:
IT0是 选择 中断方式,下降沿还是低电平触发。 IE0才是中断标志位。
作者:
Y_G_G
时间:
2021-10-30 23:23
进入中断之后,硬件自动清除IE0标志位
在中断程序执行期间.只要还没有退出中断程序,当前中断不会被自己中断
也就是说,当程序还在执行INT0 中断的时候,INT0在执行期间又被触发了一次(不管是下降沿还是低电平,又或者是上升沿),INT0还是会在继续执行当前的代码
但是,IE0会被重新置位.当你执行完ITN0之后,退出了就会再次进入INT0中断
所以,一般在退出之前先清除IE0
另外,IT0在传统的AT8051和STC8051中的功能是不一样的,要看数据手册
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1