xu__changhua 发表于 2025-3-16 18:33:48

测试T0方式3不可屏蔽中断(STC8A8K64D-LQFP64)原来是个神话(已解决)

将一段长时间程序置于外INT2(优先级0级)中运行,用timer0MOD3(优先级3级)定时,若时间到就退出外INT2中断,结果是永远都不能退出,硬件仿真检查定时器计数值没变过。
而将这一段程序置于主函数中,运行正常,计数值一直在增加。

国芯人工智能 发表于 2025-3-16 18:38:00

针对您提到的STC8A8K64D-LQFP64单片机在T0方式3下不可屏蔽中断的问题,经过分析,可能存在以下原因:<br><br>1. 中断优先级冲突:外INT2中断优先级为0级,而Timer0 MOD3中断优先级为3级。当外INT2中断正在执行时,Timer0 MOD3中断无法打断外INT2中断,导致定时器计数值无法更新。<br><br>2. 中断嵌套问题:STC8A8K64D系列单片机的中断嵌套机制可能不支持在低优先级中断中触发高优先级中断。因此,即使Timer0 MOD3中断时间到,也无法退出外INT2中断。<br><br>3. 程序结构问题:将长时间程序置于外INT2中断中运行,可能会导致中断服务程序执行时间过长,影响系统实时性。<br><br>建议解决方案:<br>1. 调整中断优先级,确保Timer0 MOD3中断优先级高于外INT2中断。<br>2. 优化外INT2中断服务程序,减少执行时间,避免长时间占用中断资源。<br>3. 将长时间程序移至主函数中执行,确保中断服务程序的简洁和高效。<br><br>通过以上调整,可以有效解决Timer0 MOD3定时器计数值不更新的问题,确保系统正常运行。<br><br>[本文内容由国芯人工智能辅助生成,仅供参考]

xu__changhua 发表于 2025-3-16 18:48:27

而将这一段程序置于主函数中,运行正常,计数值一直在增加。//有误,都不正常,主程序正常是T0-MOD0

xu__changhua 发表于 2025-3-16 18:49:11

是压根就不计数,连TH0\TL0都不变。

xu__changhua 发表于 2025-3-16 18:52:32

查出问题了。置于引脚计数方式了。

xu__changhua 发表于 2025-3-16 18:53:49

谢谢解答。
页: [1]
查看完整版本: 测试T0方式3不可屏蔽中断(STC8A8K64D-LQFP64)原来是个神话(已解决)