Friday, January 22, 2010

关于单片机自动复位

前几天在使用单片机的时候,改完程序后发现主函数会不断的从头开始执行。起初怀疑是复位电路出问题了。但是烧写别的程序的话不会出现这种问题,于是仔细看了一下修改过的代码。最后找到原因如下:
我在代码中开了一个中断,但是并没有添加相应的服务程序。而单片机复位上电默认会到中断向量表的起始处进行跳转然后执行,如果没有定义某个中断的ISR的话,相当于对应与这个中断的那部分是空着的。但是一旦中断触发,他还是会跳转到那个地方去查找ISR的地址,而这时候地址处并没又出现跳转到ISR的指令,于是会往下继续执行,在我的那个应用程序中接下来就执行到了主函数的地址,从结果上看起来就是单片机自动复位了。
所以,一旦开了中断,就要定义相应的中断处理程序以避免不必要的麻烦。实际上使用的时候还需要注意中断的开关、中断的嵌套等问题。

No comments:

Post a Comment