因为单片机执行的速度过快,也由于程序的复杂程度使程序走到部分代码阶段会出不去,出不去就一直执行在你按按键和执行中断的时候刚好走进这个循环里,程序判断当然是进入中断,然后中断完了回来这个循环造成这个循环变死循环了也就是你中断改变了一些因子使程序原本那个循环的因子突然遭到改变而出不去然后死循环了
我估计是你 *** 作不熟练造成的, *** 作顺序是:先点击PC端下载,再给单片机开发板上电。当然也可能是USB-232造成的,如果是WIN7系统的话更有可能,XP一般问题不大,所以最好用串口线,如果你计算机有RS232串口的话。
估计还是你没有真正的烧录程序,你说下进了,怎么知道的?是看烧录软件的显示吗?
也许你烧录的程序代码不对,你写的这个程序没有错,但不等于烧录的就是这个。这需要编译成HEX代码文件,再用烧录软件烧录的。再有,烧录时,打开的HEX代码,你能确定就是这个程序编译的吗?
所以,怀疑你的 *** 作过程有错。
首先没有中断
子程序
,其次主程序在while(1)处循环。在程序中加入中断子程序void
int0()
interrupt
0
在中断程序中使P1电平翻转,不要忘了给定时器赋值。就可以了。另外你的TMOD设置的和你后面的描述不符。
稍微调整一下下载时看看是串口直接下载还是
USB转串口
,不要忘了安装驱动,难度不大,再试一下!
我没遇到过这情况,但我尽管说说我的看法:因为你的定时中断,外部中断和DMA中断都处于不同的优先级,这势必会出现中断嵌套的现象(所谓中断嵌套就是一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源)。
而因为单片机堆栈的深度是有限的,当你的中断嵌套得比较多,而中断里又有调用别的函数,函数里又有函数,这样层层嵌套,就会把很多东西压到堆栈里面,当堆栈满载后就会溢出,堆栈溢出的结果就是程序跑飞。
所以解决办法就是:把定时中断,外部中断和DMA中断都设为同一优先级别,这样就不存在中断嵌套了,堆栈就不会溢出。
这是我的个人看法,说错了请原谅。
现在的单片机大多采用FLASH作为程序存放介质,而FLASH一是有擦写寿命,二是有一定的数据丢失率,虽然很少见,所以遇到FLASH保存的数据丢失问题,单片机的程序就丢了。
另外如果单片机本身有改写内部FLASH的 *** 作能力的话,程序跑飞也可能异常改写了FLASH,造成程序丢失。
剩下的情况就比较少见了,强烈的电离辐射可能也会导致这个问题,比如遇到核d爆炸啥的,这个估计咱是遇不上。
当然别的可能也许还有,不过大概比上边这条多不了哪去。
以上就是关于单片机使用按键时,为什么会出现中断停止现象全部的内容,包括:单片机使用按键时,为什么会出现中断停止现象、我是51单片机菜鸟,我买了一块开发板,最近总是偶尔烧不上程序。、单片机下程序不运行原因等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)