您现在的位置: 主页 > MCU > 单片机应用 > 单片机精确延时几种方式 -
本文所属标签:
为本文创立个标签吧:

单片机精确延时几种方式 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-08 

[导读]
目前在单片机中有不少延时的方法:1、使用循环函数延时:void delay1ms(void) //误差 0us,延时1ms{ unsigned char a,b; for(b=199;b>0;b--) for(a=1;a>0;a--);}可以用单片机精灵来获取更

目前在单片机中有不少延时的方法:

本文引用地址: http://www.21ic.com/app/mcu/201806/764524.htm

1、使用循环函数延时:

void delay1ms(void) //误差 0us,延时1ms
{
unsigned char a,b;
for(b=199;b>0;b--)
for(a=1;a>0;a--);
}

可以用单片机精灵来获取更多延时,下载地址https://pan.baidu.com/s/1qYQeoig

这种延时方式虽然说可以比较精确的延时,但是他会一直占用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;




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机应用 > 单片机精确延时几种方式 -
 

"单片机精确延时几种方式 -"的相关文章

网站地图

围观()