[PIC®/AVR®/dsPIC®产品] PIC18F87K22开全局中断之后,入中断管理程序之后出来又进入,其他程序不执行

[复制链接]
2548|16
 楼主| jcky001 发表于 2024-12-10 10:49 | 显示全部楼层 |阅读模式
PIC18F87K22开全局中断之后,入中断管理程序之后出来又进入,其他程序不执行,什么设置没设好,用xc8。

XC8。
ynwa 发表于 2024-12-10 15:04 | 显示全部楼层
你描述的太笼统。既然可以进中断服务程序,也能退出中断,那无非就是有某个中断源一直在产生中断条件。你可以在ISR中先判断一下是哪个中断源引起的中断,再检查反复产生中断的原因。
mxkw0514 发表于 2024-12-12 09:54 | 显示全部楼层
ynwa 发表于 2024-12-10 15:04
你描述的太笼统。既然可以进中断服务程序,也能退出中断,那无非就是有某个中断源一直在产生中断条件。你可 ...

请教一下UP,如果中断里面加一个While(1),这个时候一个更高优先级的中断发生后,会跳出这个While(1)吗?
ynwa 发表于 2024-12-12 14:21 | 显示全部楼层
mxkw0514 发表于 2024-12-12 09:54
请教一下UP,如果中断里面加一个While(1),这个时候一个更高优先级的中断发生后,会跳出这个While(1)吗? ...

PIC18中没有你假设的这种中断情形。

如果你没有使能PIC18F87K22的高低中断优先级特性,那么就不存在高优先级中断。

如果你使能了的PIC18F87K22的高低中断优先级特性。那么PIC18的中断机制是这样的:有两个中断服务程序分别对应高/低中断优先级(一个高优先级中断服务程序和一个低优先级中断服务程序)。如果在执行低优先级中断服务程序时发生一个高优先级的中断,那么高优先级中断会中断当前正在执行的低优先级中断服务程序,并在高优先级中断服务程序完成后,继续执行低优先级中断服务程序。

mxkw0514 发表于 2024-12-12 14:23 | 显示全部楼层
ynwa 发表于 2024-12-12 14:21
PIC18中没有你假设的这种中断情形。

如果你没有使能PIC18F87K22的高低中断优先级特性,那么就不存在高优 ...

好的,谢谢
wutaosamuel 发表于 2024-12-12 14:30 | 显示全部楼层
mxkw0514 发表于 2024-12-12 09:54
请教一下UP,如果中断里面加一个While(1),这个时候一个更高优先级的中断发生后,会跳出这个While(1)吗? ...

严格意义上来说不会。
如果更高优先级中断发生后,现阶段while(1)中正在执行的代码环境会被保存,这个保存的环境包括cpu寄存器的值,while(1)代码执行的位置pc值等等。
等更高优先级的中断执行完之后,它又会回到原来while(1)代码的位置,继续运行。
所以它跳出后,又会跳进了,严格意义上是不会的跳出while(1)循环的
gejigeji521 发表于 2024-12-15 14:12 来自手机 | 显示全部楼层
退出时候要清理标志位呀
yiy 发表于 2025-1-26 15:42 | 显示全部楼层
这是没清理中断标志的现象啊,导致一直在中断函数里运行。
自动化陈稳 发表于 2025-4-27 01:37 | 显示全部楼层
如果中断处理程序中没有正确清除中断标志,中断可能会重复触发。
单片小菜 发表于 2025-4-27 15:57 | 显示全部楼层
mxkw0514 发表于 2024-12-12 09:54
请教一下UP,如果中断里面加一个While(1),这个时候一个更高优先级的中断发生后,会跳出这个While(1)吗? ...

这样程序就跑飞了
破晓战神 发表于 2025-4-28 17:56 | 显示全部楼层
这个问题可能是由于中断优先级设置不当或者中断服务例程中没有正确清除中断标志导致的。请检查你的中断服务例程,确保在处理完中断后正确地清除了中断标志。
迷雾隐者 发表于 2025-4-28 22:33 | 显示全部楼层
看起来像是中断优先级或者中断服务程序(ISR)的问题。确保在ISR中正确地清除了中断标志位。
快乐制造机 发表于 2025-4-29 14:38 | 显示全部楼层
看起来像是中断优先级或者中断服务程序的返回处理有问题。检查一下你的中断服务程序是否正确地使用了`RETFIE`指令来返回。
魔法森林精灵 发表于 2025-4-29 17:57 | 显示全部楼层
看起来像是中断优先级设置或者中断清除的问题。检查一下你的中断服务程序是否正确地清除了中断标志位。
野玫瑰 发表于 2025-8-29 12:14 | 显示全部楼层
这种情况多因中断标志位未清除导致。进入中断后,若未在程序中手动清除对应中断标志位,退出后标志位仍为有效状态,会立即再次触发中断,形成死循环。需在中断服务程序末尾,显式清除触发中断的标志位,确保一次中断仅响应一次。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1650

主题

5706

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部