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

2024-01-09 15:33:28

请认真看看以下延时函数是否正确,并且指出错误:(考考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是否有问题,还加了晶振电路
在这里插入图片描述
研究Keil是否配置错误
在这里插入图片描述

重复编写代码。。。。

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

文章来源:https://blog.csdn.net/m0_48808835/article/details/135480001
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。