C语言delay延时时间怎么算,说的详细点谢谢
比如这个:voidDelayMS(uintx){uchart;while(x--)for(t=0;t<120;t++);}DelayMS(300);...
比如这个:
void DelayMS(uint x)
{
uchar t;
while(x--) for(t=0;t<120;t++);
}
DelayMS(300); 展开
void DelayMS(uint x)
{
uchar t;
while(x--) for(t=0;t<120;t++);
}
DelayMS(300); 展开
4个回答
展开全部
DelayMS(300)表示希望系统delay 300毫秒,系统有自己的RTC,根据硬件的晶振(Hz)可以计算出一次振荡大约多少耗时,这样就能大约算出1ms需要多少次振荡;
简单比喻一次振荡需要1us,那1ms就是1000次振荡,300ms就是300x1000次振荡,这样就能大概的计算出300ms delay;
这得看你的CPU运行一条指令得多久,像单片机89C51一般一条1us。
展开全部
DelayMS(300)表示希望系统delay 300毫秒,那系统如何来计算这300毫秒呢?首先,系统有自己的RTC,根据硬件的晶振(Hz)可以计算出一次振荡大约多少耗时,这样就能大约算出1ms需要多少次振荡,简单比喻一次振荡需要1us,那1ms就是1000次振荡,300ms就是300x1000次振荡,这样就能大概的计算出300ms delay.
追问
那直接写DelayMS(300);这一句话行吗 不写那个循环了
追答
我上面的回答是说明一个系统计算RTC的原理,下面这个函数是DelayMS的实现,
void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); }
这是一种DelayMS的实现方法。你直接写DelayMS当然不行啊,因为没有实现,肯定会链接出错。这个DelayMS的方法的原理是:
你首先知道系统一次最简单的for循环大约耗时,这里可以看出是 300/120=2.5ms,所以循环120次刚好是300MS。那为什么一次for循环是2.5ms呢?主要原理就是我上面说的原理
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以调用库函数来获取前后时间差,计算出具体的延迟时间。如果这个是在嵌入式驱动里面的,可大概地按照CPU频率及循环次数来大概估算延迟,但这个延迟不太精确。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
执行for里面的时间再乘以x就是延时时间
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询