C语言延时函数

C语言延时函数,第1张

C语言的延迟函数一般是利用无意义程序掘亮运行来洞纯控制时间从而达到延时的目的

举个例子判颤宽:

for(i=0i<xi++)

for(j=0j<120j++)

这是延时x毫秒的for循环语句。

值得注意的是记得最后的;一定得记得写。

在单片机中,要延时程序尽量准确,可以:

-延时循环尽量简单,尽量少开变量比如:

Delay(unsigned int uDelay) { while ( uDelay-- )}

-在主程序中用一个GPIO测试,如:

SetGPIOHigh()Delay(1000)SetGPIOLOW()

-用示波器测量该GPIO波形及频率

-调整Delay函数的调用值,大迹基可滚谨以用变量,在调试时实时修改变量值,找到延时1毫秒的值,把Delay函数改名为Delay1ms,之后调用这个函数完成精确延时

-其他的延时州慧函数也可以类似上述方法完成,但记住在调试和实际使用时要用同样的CPU主频。

-最精确的还是用定时器中断程序计时

假设一个延时函数如下:

void delay()

{

uint i

for(i=0i<20000i++)

}

我们怎么来算呢,先将20000转成16进制,得到4E20,然后将高字节4E乘以6得到468D,再将468+2=470,然后将470D*20HEX(即32D)=15040;所心这个延时函数总共要执行15040个周期,假设所用的晶振为12MHZ,则该段函数总延时:15.04ms。

有了这个公式我们如果想要设定指定的延时长度就可以用它的灶纤己知公式确定。即:总时间=[(6*i值的高8位)+2]*i的低8位。

例如:设要延时125ms。

我们将低字节先赋值200D*(即:C8),然后再算高低节的定值,由式中可知125ms=200*((i值的高字节*6)+2),又可推算出(高低节*6)+2的总延迟时间应等轮裂于625us,将625/6=104.1666,取整数得到104,将104转成16进制得到68H,再将高字节和低字节组合起来即得到了定值,即:68C8HEX,代入函数即如下:

void delay()

{

uint i

for(i=0i<0x68C8i++)

}

如果写直进行就要将68C8转成10进制,即:26824,代入后得到:

void delay()

{

uint i

for(i=0i<0x26824i++)

在c语言中嵌入一段汇编的延时程序呀,你自己看看书,很简单的

用在单片机里的可以C和汇编混合使用,因为用汇编编写延时要准确些,所以你不妨写一个汇编程序,然后再调用它好了,要用C来编精确的延时确实是比较难的哦.呵呵

谁说C语言不能精确延时,用51单片机的定时/计数器一或者用定时/计数器2的工作方式2,自动再装入8位计数器,就可以精确延时,别说1MS了就是100um也能精确做到。

其实很简单,采用定时器,将需要定时时间算好后写入单片机中断程序中即可,这种方法可以实现精确定时,最终的误差仅由晶振来隐桐仿确定了。

不错,用定时器最准确。但是定时器数量有限,有时候不见得能够用。比如温度检测(尤其是变化比较大、快的),一个定时器就得一直不停检测。这个时候如果另外一个定时器有正好分配的其他任务,就只有用其他方法延时了。

空循环就行了

如while(i--)根据i的不同决定了延时长短

不过C的延时不是非常准确,你得根据反汇编,看汇编语句的数量和指令周期来计算时间

也可以是

void mDelay(unsigned int Delay) //Delay = 1000 时间为1S

{

unsigned int i

for(Delay>0Delay--)

{

for(i=0i<124i++)

{}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12333952.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存