51单片机加不加while(1) 都能无限循环?不是说不加不循环吗?

我在写程序的时候把while(1)注释了灯还能闪烁
书上说加while(1)是无限循环,不加就是执行一次
从程序上分析,
点亮
延时
熄灭
延时
如果只执行一次,那么应该是亮→灭 永远的灭
如果无限循环就是亮灭亮灭永远的
可是加不加while(1)都能亮灭亮灭的循环,不解
附上//程序
#include<reg51.h> //包含单片机寄存器的头文件
/****************************************
函数功能:延时一段时间
*****************************************/
void delay()
{
unsigned int a;
for(a=0;a<5000;a++);
}
/*******************************************************
函数功能:主函数 (C语言规定必须有也只能有1个主函数)
********************************************************/
void main()
{
//while(1) //就是此处加不加都能无限循环
{
P1=0x00; //P1=1111 1110B, P1.0输出低电平
delay(); //延时一段时间
P1=0xff; //P1=1111 1111B, P1.0输出高电平
delay(); //延时一段时间
}
}

1、首先回答你,这个while(1)必须加,这点不用怀疑;
2、为什么去掉还能运行,你检查下屏蔽后是否有重新编译重新烧录程序,如果没有那么现运行的还是以前的程序。
3、不加while(1)的危害,在执行完第二个delay()函数后,pc指针(程序运行指针)即跳出了main函数,此刻程序指针就进入了一个未知的非法地址,也就是通常所说的程序跑飞了。那么跑飞了后为什么还能正常运行,这个原因是有的芯片在设计时有所就是对PC指针出了main函数后,进行了复位保护。
4、总结,就是必须加上while(1),不论是否有复位保护。
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-04-09
Keil会帮你加上,当main函数执行完后,会执行RET,跳转到0000H地址,有的编译器可能不会加RET,就只执行一次,不过还是建议加上while(1)比较安全
Keil可以把C转汇编,看一下就知道了
第2个回答  2014-10-05
程序从主函数main()开始执行,执行完后将从新开始。想不循环在最后加个while(1);就好本回答被提问者采纳
第3个回答  2018-04-09
不加while(1),程序逻辑上肯定是执行一次的,这个不需要怀疑,现出现循环需要分析一下问题:

1:确认是否程序编译成功?
2.确认是否模式开启开门狗
3.外部是否存在定时复位电路
第4个回答  2014-10-05
你注释掉后编译错误 根本没把程序烧进去 单片机里还是原来的程序- -追问

注释了以后还是编程成功,也能下载成功,图上是我编译后的提示

追答

你把while的那俩括号去掉试试

本回答被网友采纳

51单片机加不加while(1) 都能无限循环?不是说不加不循环吗?_百度...
1、首先回答你,这个while(1)必须加,这点不用怀疑;2、为什么去掉还能运行,你检查下屏蔽后是否有重新编译重新烧录程序,如果没有那么现运行的还是以前的程序。3、不加while(1)的危害,在执行完第二个delay()函数后,pc指针(程序运行指针)即跳出了main函数,此刻程序指针就进入了一个未知的非法地址...

为什么单片机程序总要加一个 while(1) ?
循环系统,如果不加,系统就成了 单次系统,执行一次就OVER 了

...想让其转一圈。为什么停不下来,没有while(1),求解答
单片机的程序,本身就是无限循环的。加上语句:while(1);,它才会停下来。

...这段代码可以在51单片机中无限循环,我没加循环语句啊,而且还是十 ...
是代码重复执行的原因,你的代码执行完毕后,单片机继续读取后续空白存储单元内容(空内容),全部执行完毕后,再从地地址为0处开始执行,所以才会重复执行以上代码。

单片机执行完程序不停下来?
这个不是死循环,不过51单片机执行完main函数后会自动重来,就像循环一样,不过还是有一点差别的,不要利用这点来无限循环,,有时会出错的。想程序停下来就在最后加一句while(1); void main (void) { int a; for(a=0;a<5000;a++) P1_6=0; for(a=0;a<5000;a++) ; P1_6=1; ...

单片机点亮一个二极管 led=0以后 加不加while(1) 二极管都是一直亮...
有区别,加上无限循环,程序一直在无限循环里面运行,否则程序会跑飞,跑到没有代区还好,要是跑到代码区就造成代码混乱了!代码运行不按照你理想的那样运行了,这在程序设计中是不允许出现的情况!

51单片机少写了一个循环语句,为什么还能执行循环,错在哪里呢?程序如下...
因为程序容量不大,运行速度又很快,人还没有感觉出停顿,程序就又从头执行了。只要有电源,复位正常,有时钟,PC指针就会按照时钟的振荡而不停的自加,除非程序中有改变PC指针的值的指令。所以当给一个内部没有程序的单片机上电,复位并供上时钟时,单片机不是静止的,而是一直在运行的,运行的方式是...

用proteus7.5仿真51单片机为啥我的for循环退不出来d1始终闪烁d2不亮
在程序的末尾加上一个while(1);就可以了。单片机程序的运行机制,你MAIN函数运行最后一条后,没有给它停住。单片机是会一直无限的循环整个ROM空间,也就会一直重复执行你的程序。这个用文字表达也不好说清楚。

单片机C语言中的while(1)是什么意思
while(1);意义:这是一个死循环,代码不再向下执行。用途:1. 一般在调试代码时,为了检测一部分代码是否OK,防止后面的代码干扰执行结果,会在观测点加上while(1);2. 有些代码检测到运行错误时,会抛出错误(打印、设置错误码),然后进入while(1);3. 机器需要复位时,停止喂看门狗,进入while(1...

单片机一条语句只在执行的时候执行一次完之后,只保持该值一个指令周期...
这是C语言的程序,对于单片机的主程序必须有while(1)语句,应该是由while(1)语句构成主循环结构。而你这个主程序只有一个语句,LED=0; 那就必须保留while(1); 一行,这是一个无限循环语句,单片机才能在这个语句上无限循环下去,相当于停止在这一行上。如果没有这一行,编译时就当成子程序,执行...

相似回答