【51单片机】延时函数delay的坑——关于无符号整型数据for语句“x >= 0“变成死循环

请认真看看以下延时函数是否正确,并且指出错误:(考考C语言功底)

void delay_ms(unsigned int xms) //delay x ms
{
	unsigned int x,y;
	for(x=xms;x>=0;x--)
	for(y=124;y>=0;y--);
}

废话少说,上正确代码:

void delay_ms(unsigned int xms) //delay x ms
{
	unsigned int x,y;
	for(x=xms;x>0;x--)
	for(y=124;y>0;y--);
}

原因分析:
x和y定义的是无符号整形,如果等于0的话它还在执行一次减一,以至于for变成while死循环。

我懒得写delay函数,直接去csdn嫖代码,我一直以为别人肯定是跑通了才发出来,就一直奉为圭臬。

于是我花了大量的时间去研究:
Proteus是否有问题,还加了晶振电路
【51单片机】延时函数delay的坑——关于无符号整型数据for语句“x >= 0“变成死循环_第1张图片
研究Keil是否配置错误
【51单片机】延时函数delay的坑——关于无符号整型数据for语句“x >= 0“变成死循环_第2张图片

重复编写代码。。。。

只能说,网上的东西是个人都能写(比如像我这种废物csdn就有好几万的访问量,经不住考验,一定要持有怀疑的态度。也请大家以后把代码跑通了再发上去吧,毕竟像我这种新手真的很痛苦。

你可能感兴趣的:(STC51单片机,51单片机,嵌入式硬件,单片机)