/**********
* Copyright (c++)
* 目的:定时器多处复用
* 1.初始化定时器,假设定时器中断为1ms
*/
//定义宏、数值
#define TASK_SUM (3) //表示有三个任务会使用此定时器。
uint16 TaskCount[TASK_SUM]; //存放定时值
uint8 TaskMark[TASK_SUM]; //标志位,0表示时间没到,1表示定时时间到。
//定时器中断服务函数中添加:
/****
* @description: 定时终端服务函数
* 在中断中逐个判断,如果定时值为0,表示没有使用此定时器或定时器已经完成定时,不做处理。
* 否则定时器减1,直到为0时相应标志位置1,表示任务的定时值到了。
*/
void TimerInterrupt(void)
{
uint8_t i;
for(i = 0; i < TASK_SUM; i++){
if(TaskCount[i]){
TaskCount[i]--;
if(TaskCount[i] == 0){
TaskCount[i] = 0x01;
}
}
}
}
//应用程序中需要定时的地方添加如下代码:
//这样只需要在任务判断TaskMask[0]是否为0x01即可。
//至此1个定时器的复用问题就实现了。
TaskCount[0] = 20; //延时20ms
TaskMask[0] = 0x00; //启动此任务的定时器