在单片机裸编程时经常要用到延时函数,下面是一个非独占式延时的思路
bool delay_ms_flag = 0;
bool delay(unsigned int time)
{
static unsigned int count = 0;
if(delay_ms_flag)
{
delay_ms_flag = 0;
count ++;
if(count == time)
{
return 1;
}
}
return 0;
}
其中delay_ms_flag 为此函数独占,在定时器中断服务函数中置位,至于整个函数则使用状态机的思想实现,如下:
void func()
{
static unsigned char step=0;
switch(step)
{
case 0: //延时前
step ++;
break;
case 1: if(delay(delayTime))
{
step ++;
}
break;
case 2: //延时后
step = 0;
break;
default: step = 0;
break;
}
}
这个思路在长时间延时的函数中应该有用