单片机C语言延迟程序

单片机C语言延迟程序,第1张

下面的延时的基本程序(中断加计数器)

void

T0_int(void)

interrupt

1

{

TH0

=

0x4C;

//重新装载,50MS定时器初值

TL0

=

0x00;

T0_count++;

if(T0_count==20)

//1S到

{

T0_count

=

0;

//在这写程序

}

}

main()

{

TMOD

=

0x01;//定时器0,工作方式1,16位计数

TH0

=

0x4C;

//50MS定时器初值

TL0

=

0x00;

IE

=

0x82;

//开总中断,开T0中断

EA

=

1;

ET0

=

1;

TR0

=

1;

T0_count

=

0;

i

=

0;

loop:

goto

loop;

}

还有:

for(us=0;us<60;us++);

/延时500us/

for(us=0;us<1;us++);

/

延时15微秒/

for(us=0;us<5;us++);

/

延时51微秒/

一般单片机在c语言中很难得到精确的延时,所以一般对时间要求高的都用计时器中断来做了。如果时间要求不严格可以用for循环来做,你可以实际测试一下,把时间延时到大概一秒左右,然后烧进单片机里运行,比如一个灯亮灯灭的程序,看着灯计数,同时用秒表计时,几个几十次后取平均值就能知道大概时间了。

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

举个例子:

for(i=0;i<x;i++)

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

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

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

delay 延时

ms 解释为毫秒

毫秒和秒的换算率为1000。

因此,Delayms(1000) 实则是延时1 秒

5000则是5秒

10000则是10秒。

类似的函数有 Sleep(1000) c++里所有的时间单位,都是以毫秒计算的。

延时时间的计算与单片机的晶振频率有关。若晶振频率为12Mhz,那么单片机每震动一次所需要的时间是1/12M s。那么再来看看单片机执行一次自减所需要的振动次数是96次,假如我们对时间要求不是特别精确的话,可以约等于100来计算。现在通过上面两个数据可以得出:单片机每执行一次自减所需要的时间是1/12M 100(s),即1/120000 s,逆向计算一下,每1ms需要自减多少次?120次对吧。所以一个简单的延时功能就诞生了,我们只需要自减120次,就可以延时1ms,如果我们要延时50ms呢,那就自减50120=6000次。那么在程序上如何表达呢?我们可以用两套for循环

void delay(int i){

int x,y;

for(x=i;x>0;x--){

for(y=120;y>0;y--)

}

}

参数 i 代表该函数延时多少ms

你给的算法误差大,不同的计算机运算速度不同,等待时间不同。

暂停,可以用

Windowsh

里的

Sleep()

函数,也可以自己写。

Sleep(1000);

参数是1000毫秒,就是暂停

1

秒。一般人认为,Sleep函数,每秒可能有25毫秒误差。

自己写,可以利用

clock

()

函数,clock

()

函数送返从程序开始运行到调用时的时间间隔,单位是毫秒。暂停开始,用clock

()

取开始时间,然后,只要用clock

()再取时间,判断是否到结束时间,没到则继续暂停。

//

等待

多少秒:

void

wait

(

int

seconds

)

{

clock_t

endwait;

endwait

=

clock

()

+

seconds

CLOCKS_PER_SEC

;

while

(clock()

<

endwait)

{}

}

//

等待多少毫秒:

void

wait_ms

(

int

ms

)

{

clock_t

endwait;

endwait

=

clock

()

+

ms;

while

(clock()

<

endwait)

{}

}

精确计时算法见L_o_o_n_i_e

百度空间文章:C语言时间函数的应用

#include<dosh>

void fun()

{

delay(10000);

}

调用系统的延迟函数delay,该函数的延时单位是毫秒,所以括号内写10000毫秒,即延迟10秒

这个程序应该是板子上延时的程序。

a就是需要延迟的毫秒数(也可能是其他单位)。

就是说,执行 for(i=0;i<600;i++);的时间应该是一个单位长度(可能为1ms);

这样,你在调用的时候,赋值给a多少值,实际就是延时多少毫秒。

例如,延时10ms,就用

delay(10);

延时1ms,就用

delay(1);

以上就是关于单片机C语言延迟程序全部的内容,包括:单片机C语言延迟程序、单片机c语言的延时程序500ms、c语言的延迟函数 编写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9491283.html

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

发表评论

登录后才能评论

评论列表(0条)

保存