51单片机的5种延时函数
1个回答
关注
展开全部
51单片机常用的5种延时函数如下:粗略延时函数
咨询记录 · 回答于2023-03-26
51单片机的5种延时函数
51单片机常用的5种延时函数如下:粗略延时函数
void delay(unsigned int t){ while(t--);}
这种延时函数的精度较低,但是简单易用,可以用于一些不需要很高精度的场合。2. 精确延时函数
void delay_us(unsigned int us){ while(us--) { _nop_(); _nop_(); _nop_(); _nop_(); }}void delay_ms(unsigned int ms){ while(ms--) { delay_us(1000); }}
这种延时函数的精度较高,可以实现微秒级和毫秒级的延时,但是会消耗较多的CPU资源。3. 定时器延时函数
void timer_delay(unsigned int t){ TMOD = 0x01; //设置定时器0为工作方式1 TH0 = (65536 - t) / 256; //设置定时器初值 TL0 = (65536 - t) % 256; TR0 = 1; //启动定时器 while(TF0 == 0); //等待定时器溢出 TR0 = 0; //停止定时器 TF0 = 0; //清除溢出标志}
这种延时函数利用定时器来实现,可以实现较高精度的延时。4. 外部中断延时函数
void exti_delay(unsigned int t){ EX0 = 1; //使能外部中断0 IT0 = 1; //设置外部中断0为下降沿触发 while(t--) { EA = 1; //开启中断总开关 _nop_(); //等待中断 EA = 0; //关闭中断总开关 } EX0 = 0; //禁止外部中断0}
这种延时函数利用外部中断来实现,可以实现较高精度的延时,但是需要外部电路的支持。5. 软件定时器延时函数
void soft_timer_delay(unsigned int t){ static unsigned int cnt = 0; while(cnt < t) { if(TF0 == 1) //定时器溢出一次 { cnt++; //计数器加1 TF0 = 0; //清除溢出标志 TH0 = (65536 - 50000) / 256; //重新设置定时器初值,实现50ms的定时 TL0 = (65536 - 50000) % 256; } } cnt = 0; //计数器清零}
这种延时函数利用软件定时器来实现,可以实现较高精度的延时,但是需要占用一定的CPU资源。