请求单片机delay延时函数

来源:百度知道 编辑:UC知道 时间:2024/06/17 21:30:21
1、单片机Atmega128,外部晶振20MHz,ICCAVR编译,C语言!
2、延时函数为:ms级和us级的
四楼的,我的studio搞不定啊,能不能好事做到低,帮忙测试一下,就用for循环测试。

void delay1(unsigned int j)
{unsigned char i;
do{for(i=0;i<2;i++);
j--;
asm("nop");}
while(j);
}
这是us延时,有误差,j的值越大相对误差越小。不过相信误差应该在你的可接受范围内。
void delay1(unsigned int j)
{unsigned int i;
do{for(i=0;i<2853;i++);
j--;}
while(j);
}
这是ms延时,有误差,j的值越大相对误差越小。不过相信误差应该在你的可接受范围内。
你可以试试,不行我再给你调

我只晓得51
精确的用定时器
感觉很好
unsigned int TIMERCOUTER;

timer0() interrupt 1
{
TIMERCOUTER++;
TH0=0Xff;
TL0=0Xed;
}

void Delay10us(unsigned int Delaytime)
{
TMOD=TMOD|0XF1;
TH0=0Xff;
TL0=0Xed;

TIMERCOUTER=0;

EA=1;
TR0=1;
ET0=1;

while(TIMERCOUTER<Delaytime) ;

TR0=0;

}

//************微秒级延时程序**************************************
void delay_us(int time)
{
asm("wdr");//看门狗清零
do
{
time--;
}