打印

51定时器中断执行程序未完,又来定时器中断会如何变化?

[复制链接]
2127|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dyx8899|  楼主 | 2023-11-14 21:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
8051程序中的中断问题:
当一段程序在中断响应后执行,如定时器0中断,当程序正在执行中,相同定时器又产生了新的中断请求,
接下来程序该如何响应?
因为是同一个定时器,优先级相同。很多书面解答是相同优先级的中断不会中止同级别中断正在执行的程序。
那么它是在后面排队等待上一次中断程序完成后马上进入再一次执行程序吗?这样子会不会造成了一个深沉的循环当中,反复的就只执行这中断里面的程序了?中断外面的程序有没有机会执行了?

使用特权

评论回复
沙发
yueguang3048| | 2023-11-15 09:45 | 只看该作者
造成了一个深沉的循环当中,反复的就只执行这中断里面的程序

使用特权

评论回复
板凳
ayb_ice| | 2023-11-15 13:29 | 只看该作者
51中断返回后,至少执行一条后才会响应新的中断,所以主循环的程序还会执行,只是很慢而已

使用特权

评论回复
地板
coody| | 2023-11-15 14:45 | 只看该作者
本帖最后由 coody 于 2023-11-16 00:12 编辑

正在执行时器中断过程中,本中断又来N次,则在RETI后清除(有些厂家是在刚进入就清除)中断标志。

使用特权

评论回复
5
ayb_ice| | 2023-11-15 17:32 | 只看该作者
coody 发表于 2023-11-15 14:45
正在执行时器中断过程中,本中断又来N次,则在RETI后清除(游侠厂家是在刚进入就清除)中断标志。 ...

51进入中断时已经清除了标志,不是RETI后清除

使用特权

评论回复
6
zlf1208| | 2023-11-17 10:07 | 只看该作者
本帖最后由 zlf1208 于 2023-11-17 10:20 编辑

中断标志只有一位,不会累加,所以同一个中断,如果在执行中断程序时又发生N次中断,那么在退出中断程序后,最多再执行一次,中间的N-1次被忽略。

一个设计良好的程序架构,中断程序因尽可能简短,不要在中断程序中完成一项复杂的任务,应当只在中断程序中建立相关标志,然后在中断程序的外面根据相关标志去完成相关的任务。

另外,定时器中断的周期不应该比完成任务所需的时间还短,否则中断会不断嵌套,直至堆栈溢出,程序发生混乱。



使用特权

评论回复
7
dyx8899|  楼主 | 2023-11-17 20:19 | 只看该作者
我通过下载到单片机程序,观察到它似乎像死机了一样,半天没有反应,于是在主程序加入一个LED反复亮灭语句来观察,确实能响应到,会灭很久,也会亮很久,很久很久。。。。。不是一般的久。
也同意ayb_ice的说法,他会在中断一次后运行主程序至少一条指令,然后在跳入中断运行里面的程序。
谢谢大家的解答,我想以后在编写程序时应该避免发生这样子的情况发生。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

421

帖子

1

粉丝