1ms延时程序
delay(3);//延时0.311ms,懂了吗?
delay(10);//延时1.011ms
delay(100);//延时10.011ms,数值很大的话,这误差就可以忽略不计了
/*******************************************************************************
*函数名: delay()
*函数功能:精确延时
*输入: x
*输出:无
*******************************************************************************/
一、
void delay(unsigned int x) //延时0.14ms,无误差(实测12mhz时延时0.12ms,
误差16us,此为网上较为精确的延时程序)
{
uchar i;
while(x--)
{ห้องสมุดไป่ตู้
for (i = 0; i<13; i++)
{}
}
}
二、
void delay(uint i)//12MHZ延时0.1ms,误差11us(调用子程序所需时间)
{uchar j,k;
for (j=i; j>0; j--)
for(k=0;k<30;k++);
}
注:误差都是由于调用子程序需要时间引起的,不是程序里面的误差,这是必然的,
不可避免的,所以单片机精灵的延时都是固定的延时程序(新手用延时,高手都是用定时器的)。
比如第二个程序:
delay(2);//误差仍未11us,即延时0.1×2+0.011=0.211ms