您的位置 首页 发布

单片机准确延时的办法解析

单片机精确延时的方法解析-1、使用循环函数延时:

void delay1ms(void) //误差 0us,延时1ms

{

unsigned char a,b;

for(b=199;b》0;b–)

for(a=1;a》0;a–);

}
这种延时方式虽然说可以比较精确的延时,但是他会一直占用cpu,延时期间cpu只能选择等待,无法执行其他事情,降低了cpu的使用效率。

现在在单片机中有不少延时的办法:

1、运用循环函数延时:

void delay1ms(void) //差错 0us,延时1ms

{

unsigned char a,b;

for(b=199;b》0;b–)

for(a=1;a》0;a–);

}

这种延时方法尽管说能够比较准确的延时,可是他会一向占用cpu,延时期间cpu只能挑选等候,无法履行其他工作,降低了cpu的运用功率。

2、运用定时器中止延时(C语言版)

void IinitTImer()

{

TMOD = 0x01; //工作方法1

TH0 = 0x0FC; //延时1ms的初值

TL0 = 0x18;

EA = 1; //敞开中止

ET0 = 1; //敞开定时器中止0

TR0 = 1; //敞开定时器0

}

void TImerInterrupt(void) interrupt 1 //中止方法1

{

TH0 = 0x0FC;

TL0 = 0x18;

}

3、不运用中止

void IinitTImer()

{

TMOD = 0x01; //工作方法1

TH0 = 0x0FC; //延时1ms的初值

TL0 = 0x18;

EA = 1; //敞开中止

ET0 = 1; //敞开定时器中止0

TR0 = 1; //敞开定时器0

}

void DelayMilliseconds(int TIme)

{

do

{

TH0 = 0x0FC;

TL0 = 0x18;

while(!TF0);

TF0 = 0;

}while(–time);

}

初值的核算:方法1

TH0 =(65536 – 时刻*晶振频率/12)/ 256;

TL0 =(65536 – 时刻*晶振频率/12)%256;

工作方法:

方法0:13位(8192 – 时刻*晶振频率/12)/ 256;

方法2:8位 (256 – 时刻*晶振频率/12)/ 16;

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/345071.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部