AVR 程序里想打开全局中断,为什么用sei()之后,再执行一条就又回到程序开始了,不想回去怎么解决?
3个回答
展开全部
检查下是否有中断被使能却为编写中断服务函数。
或者为每个中断源编写空的服务函数
原因是AVR中断服务向量在单片机的低段,与main函数,处在相近位置,如无中断服务函数,据会跳到主函数中,这个与中用的编译器也有关系,winavr(gcc) , 就会这样。
在给你推荐一个调试方法,分块屏蔽sei() 前面的程序语句以方便定位,误使能中断的位置。
个人意见仅供参考,如若有误欢迎批评指正。
或者为每个中断源编写空的服务函数
原因是AVR中断服务向量在单片机的低段,与main函数,处在相近位置,如无中断服务函数,据会跳到主函数中,这个与中用的编译器也有关系,winavr(gcc) , 就会这样。
在给你推荐一个调试方法,分块屏蔽sei() 前面的程序语句以方便定位,误使能中断的位置。
个人意见仅供参考,如若有误欢迎批评指正。
追问
你的意思是说,如果我只写了sei() 却没有interrupt service routine,就一定会发生这种情况是吧?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询