快捷搜索:

单片机精确延时的方法解析

今朝在单片机中有不少延时的措施:

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;

您可能还会对下面的文章感兴趣: