软件定时器和分时复用的实现

本文介绍了如何在单片机编程中利用基准定时器实现软件定时和任务分时复用。通过记录Timer_Count值并监测溢出次数,确保每个任务在规定时间后切换到下一个任务,提高CPU资源利用率。该方法适用于单片机任务调度,实际应用时需结合1ms定时中断进行移植。
摘要由CSDN通过智能技术生成

在单片机编程中,最主要的是掌握单片机工作的时间节拍,最大限度地利用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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值