现在在单片机中有不少延时的办法:
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;