你们51单片机度不用用while(1)卡程序的吗 |
程序结束后跑飞了,然后自动自复位 |
我认为是超出单片机看门狗定时器时间造成的,如果你用的是STC单片机,建议在循环体中加喂狗就不会每次超时而重启,这样也就看出一直跳不出来,其实它已在一定时间后就重启了 |
不要让a初始化0,初始化放到for外边, |
程序原则上没有问题,但是最好加上while(1),然后自己设置停止点,不要让程序走出main 函数。如果是软件程序走出 main 就结束了。单片机很有可能会复位或者其他的原因再次进来。 |
限制循环的地方,不然一直跑就一直闪 |
要习惯性的写个while(1)。有内容要循环的,就写进while(1)循环里,没有要循环的,就在最后写个while(1). |
这不明摆着吗,跳出for循环后又进去了啊,你又没加限制,main函数会一直循环执行。 |
程序本身没有问题,看了说加while(1);的处理方法,是一种答案。但原则上没有while(1),程序也是执行到main的最后一个}结束。 |
设置断点 调试一下代码看看 |
#include<reg52.h> sbit LED=P2^0; void delay(int i) { while(i--); } void main() { int a; for(a=0;a<12;a++) { LED=~LED; delay(50000); } LED=0; while(1) { } } 加while(1),实测有效。 |
应该是没有while(1)导致程序跑飞 |
为什么不跟踪一下呢?将断点设在LED=0处,看程序有没有跳出for循环 |
应该是没有while(1)导致程序跑飞,建议改成这样 void main() { int a; for(a=0;a<12;a++) { LED=~LED; delay(50000); } while(1) { LED=0; } } |
我觉得程序是没问题的,但是可能仿真软件哪里有问题,你可以给程序里面加一个if(a==11)break;试试 |
这段代码中有一个最大的问题是没有主循环体,没有while循环体,而直接是main函数,有一种可能性就是函数执行完一次后,回到开头,重新执行,这就造成了一直闪烁 |
加入while,防止程序跑飞, |
main 函数一直在执行。led灯会一直闪烁。 |
void main() { int a; for(a=0;a<12;a++) { LED=~LED; delay(50000); } LED=0; while(1); } |