在单片机编程中,最主要的是掌握单片机工作的时间节拍,最大限度地利用CPU资源,下面提供一种基于基准定时器进行软件定时、任务执行采用分时复用的方法,规定每个任务执行的时间,执行时间到后切换下一任务。
u16 Timer_Count = 0,Timer_Count_OverFlow = 0;
u16 this_time = 0,last_time = 0,time_overflow = 0;
#define Timer_Period 60000
#define OutofRunningTime(time) (Timer_Period*Timer_Count_OverFlow+this_time-last_time >= time)
#define TIME_MS(x) (1*x)
#define TIME_S(x) (1000*x)
#define TOTAL_TASK 3 //定义任务总数
enum {TASK1,TASK2,TASK3};
void 26 interrupt PIT0(void) //中断定时器,1ms进入一次
{
Timer_Count ++;
if(Timer_Count >= Timer_Period)
{
Timer_Count = 0;
Timer_Count_OverFlow ++;
}
}
static u8 task1(void)
{
last_time = Timer_Count;
Timer_Count_OverFlow = 0;
for(;;)
{
this_time = Timer_Count;
do_some_thing();
if(OutofRunningTime(TIME_S(2)))
return TASK2;
}
}
static u8 tas