while(1)和while(1);的区别是什么

while(1)和while(1);的区别是什么,第1张

这是程序执行的一种循环语句,有当值循环和直到型循环两种,它们的区别如下:

while(1)会循环执行后面的语句

while(1);表示一个死循环,循环一直运行下去,因为条件一直为真

while(1){}是让单片机一直执行{}中内容,防止程序跑飞,通常用于主程序主体,确保程序持续执行

while(1);是一条指令,它让单片机停在这个位置,一般用来检测中断,只有cpu收到中断指令,才会跳出while(1),进入中断服务子程序;

你只要记住whlie(1)本质是死循环,while(1)中的指令会不断重复执行,除非有中断,while(1);可以看作while(1){//空指令},它执行的是空指令,于是单片机就停在这行代码处

在51单片机中,程序是执行完后自动跳到开始执行,所以就出现了你所说的不停的发送的情况

如果你只想发送一次在发送完成后你得把程序停住啊,可以在末尾加条while(1);就行了;

顺便说一下从你程序来看你是采用查询方式,你对中断的所有设置都可以丢掉以简化程序,还有就是你最好再接个指示灯,发送完成后点亮指示灯

不是跑飞的问题,其实是选择语句上的问题,回答者: 碱杯已经看出来了,他只是没指明掉

if(CGQ==0)

{

delay(100);

if(!CGQ); //注意这个分号,这里的意思是CGQ=0时候,空 *** 作次,继续执行后面的

{

alarm_silencer(); //该指令不管CGQ为何值,都会被执行

}

}

delay(1000);

}

另外,CGQ值对alarm_silencer();影响的逻辑关系有点乱,所以我没看alarm_silencer();,但发现了以下问题,希望对你有帮助

1中断服务不用判断,或加延迟判断,已经下降沿触发了,进入中断的时候INTF就已经是0了;

2延迟

void delay(uint x) //#define uint unsigned int定义过,最大可以到65355,原来的int知道32677

{

uint y;

for(x;x>0;x--) //注意这里是没有分号的,加分号时间上就错了

for(y=10000;y>0;y--);

}

给你看看原子的外部时钟配置

//系统时钟初始化函数

//pll:选择的倍频数,从2开始,最大值为16

//CHECK OK

//091209

void Stm32_Clock_Init(u8 PLL)

{

unsigned char temp=0;   

MYRCC_DeInit();  //复位并配置向量表

RCC->CR|=0x00010000;  //外部高速时钟使能HSEON

while(!(RCC->CR>>17));//等待外部时钟就绪

RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;

PLL-=2;//抵消2个单位

RCC->CFGR|=PLL<<18;   //设置PLL值 2~16

RCC->CFGR|=1<<16;  //PLLSRC ON 

FLASH->ACR|=0x32;  //FLASH 2个延时周期

RCC->CR|=0x01000000;  //PLLON

while(!(RCC->CR>>25));//等待PLL锁定

RCC->CFGR|=0x00000002;//PLL作为系统时钟 

while(temp!=0x02)     //等待PLL作为系统时钟设置成功

{   

temp=RCC->CFGR>>2;

temp&=0x03;

}    

}

以上就是关于while(1)和while(1);的区别是什么全部的内容,包括:while(1)和while(1);的区别是什么、我写了个C51的串发送程序,但跑飞了,找不出原因、PIC单片机编程,程序运行总是出错,可能是程序跑飞了,求大虾指点迷津。还想加个定时器,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/10137475.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存