AVR单片机毫秒和微秒延时程序为什么不同?

voiddelay_us(inttime)//延时微秒级函数{do{time--;}while(time>1);}//==========================... void delay_us(int time) //延时微秒级函数
{
do{
time--;
}
while(time>1);
}
//==============================================================================
void delay_ms(uint time) //延时毫秒级函数
{
while(time!=0)
{
delay_us(1000); time--;
}
}

两次延迟函数中,为什么形参不是一个数据类型呢?为了扩大设定范围吗?还有个疑问就是判断跳出循环的语句为什么一个用time>1而另一个用time!=0呢。非常感谢,找了很久没有解释这个的,大家都默认了。
展开
 我来答
神马·似鸟非鱼
2011-05-09 · 超过11用户采纳过TA的回答
知道答主
回答量:20
采纳率:0%
帮助的人:0
展开全部
在这两个函数参数的类型没多大关系的(延时us用Int可能是因为us到ms是1000就足够了,延时ms用uint可以在调用一次该函数时的最大延时时间能更久点)
用while(time!=0)的意思是在循环中time--后time等于0 时退出循环(用什么请根据时钟来决定,你也可以用time>1啊,但延时的时间可能没while(time!=0)更接近需要延时ms的时间,实际和单片机的时钟有关)
百度网友a3795a7
2011-05-11 · TA获得超过513个赞
知道小有建树答主
回答量:384
采纳率:0%
帮助的人:188万
展开全部
从时间上看,如果你要延时2毫秒,delay_ms(2),如果条件是time>1,实际延时1毫秒以后,就退出了,所以要等到0。

至于int和uint是没什么特别含义的,我一般用无符号的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天涯行客633
2011-05-11 · 超过13用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:33.7万
展开全部
首先,数据类型决定了数据取值的范围,类型不一样那当然是出于取值范围的考虑了。其次控制循环条件不同,这有什么关系呢?只要达到目的就行了,不同的人会有不同的编程方法。你把time!=0,改为time>0,结果也是一样的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式