AVR 程序里想打开全局中断,为什么用sei()之后,再执行一条就又回到程序开始了,不想回去怎么解决?

2024-12-01 03:01:04
推荐回答(3个)
回答1:

检查下是否有中断被使能却为编写中断服务函数。
或者为每个中断源编写空的服务函数

原因是AVR中断服务向量在单片机的低段,与main函数,处在相近位置,如无中断服务函数,据会跳到主函数中,这个与中用的编译器也有关系,winavr(gcc) , 就会这样。

在给你推荐一个调试方法,分块屏蔽sei() 前面的程序语句以方便定位,误使能中断的位置。

个人意见仅供参考,如若有误欢迎批评指正。

回答2:

如果是icc_avr编译的话,我记得如果开启了中断后,但并未申请中断内容(就是没写中断处理函数),会导致中断触发后系统自动复位

回答3:

我也遇到这样的问题了,sei()之后程序从main函数重新执行了,问题找到了吗?