C语言编程中的延时

来源:百度知道 编辑:UC知道 时间:2024/09/19 18:58:19
void delay(int d)
{
for(; d; --d);
}
d=1000的话
执行一次延时多少个时钟周期?
记得好像说C语言中作定时并不好用,为什么我看到的代码中还要有这样的延时函数呢》?

如果你指的是嵌入式方面的,这样的延迟是有作用的,也是一种非精确计时器的一个实现方法。

我以12M的晶振为例,给你讲一下:
12M的晶振的机器周期是1/12M*12,就是1us

不同的单片机执行语句的机器周期也不一定一样(比如:Atmel 51系列及大多数51的一个机器周期是12个时钟周期,华邦的只需要4个时钟周期)。不过大体来说,一条for循环大概8个机器周期,在12M晶振下,通常用以下代码实现1ms的延时:
void delayms(unsigned int ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
大概算一下,120*8*1us=1ms,如果需要精确的定时,还是得用基于Tick定时器。

如果是
void delay(int d)
{
for(; d; --d);
}
d=1000的话,
那么
大概算一下,1000*8*1us=8ms
所以,这可以实现一个大体8ms的延迟

这种是在延时不精密的情况下用的,比起汇编准确的延时来说比较简单。但是误差比较大,具体延时时间可以看它转换成汇编语言是执行了多少语句。
用C语言写出来程序非常的简练,它是一种模块化的语言,一种比汇编更高级的语言,但是就是这样一种语言也还是有它不足之处:它的延时很不好控制,我们常常很难知道一段延时程序它的精确延时到底是多少,这和汇编延时程序没法比。但有时后写程序又不得不要用到比较精确的延时,虽然说可以用混合编程的方式解决,但这种方式不是每个人都能掌握,且写起来也麻烦。

您好 这个延时函数很不稳定的,没有固定的时间

如果您使用tc 您可以用sleep(微秒)来延时

使用vc的话有5种常用方式:
方式一:VC中的WM_TIMER消息映射能进行简单的时间控制。首先调用函数SetTimer()设置定时间隔,如SetTimer