📄 smart_timer.c
字号:
/*************************************************/
/**************虚拟定时器*******************/
/*************2003年2月9日*********************/
/************WROTE BY WANGSW********************/
#include "reg52x2.h"
#include "define.h"
byte data SmartTimerNumber = 0;
MSGTYPE idata SmartTimerMsgPool[4][2];
word data wSmartTimerCounterPool[4];
word idata wSmartTimerCounterRestorePool[4];
byte idata SmartTimerSeveralPool[4];
/***************************************/
/******************************************************************************************
*函数名: smart_timer_server
*参数: 无
*返回值: 无
*描述: 智能定时器服务程序, 依次对智能定时器 中的定时任务进行
判定,到时的抛出消息,对于需多次运行的可以重载其定时计
数次数
*编写: 王绍伟
*版本信息: V1.0 2003年8月15日
******************************************************************************************/
extern void smart_timer_server(void)
{
byte idata i;
if(!SmartTimerNumber)
{
return; /*r若智能定时器个数为0,则退出*/
}
for(i = 0; i < 4; i++)
{
if(GETBIT(SmartTimerNumber,i))
{
if(!wSmartTimerCounterPool[i])
{
msg_queue_in(SmartTimerMsgPool[i][0], SmartTimerMsgPool[i][1]);
switch(SmartTimerSeveralPool[i])
{
case 0x00: /*无限次*/
wSmartTimerCounterPool[i] = wSmartTimerCounterRestorePool[i];
break;
case 0x01: /*一次*/
RESETBIT(SmartTimerNumber, i);
break;
default: /*多次*/
wSmartTimerCounterPool[i] = wSmartTimerCounterRestorePool[i];
SmartTimerSeveralPool[i]--;
break;
}
}
wSmartTimerCounterPool[i]--;
}
}
}
/******************************************************************************************
*函数名: smart_timer_idle_check
*参数: 无
*返回值: number
*描述: 智能定时器空闲检测,返回空闲定时器数目
*编写: 王绍伟
*版本信息: V1.0 2003年8月15日
******************************************************************************************/
extern byte smart_timer_idle_check(void)
{
byte idata i;
byte idata number=0;
for(i = 0; i < 4; i++)
{
if(!GETBIT(SmartTimerNumber, i))
{
number++;
}
}
return(number);
}
/******************************************************************************************
*函数名: smart_timer_start
*参数: msgType 消息类型
msgPoint 消息指针
wCounter 在此例中以5ms为最小计数单位值,设置等待多少
个5ms后抛出在智能计时器中的暂存任务消息
several 智能计时器重复计数次数,这样可以多次按某一
时间间隔抛出储存的消息
*返回值: 空闲定时器数目
*描述: 开启智能定时器,设置一个在若干时间后被抛出的消息,此消
可以重复多次经过一定延时后再次被抛出
*编写: 王绍伟
*版本信息: V1.0 2003年8月15日
******************************************************************************************/
extern byte smart_timer_start(MSGTYPE msgType, MSGPOINT msgPoint, word wCounter, byte several)
{
byte idata i;
for(i = 0; i < 4; i++)
{
if(!GETBIT(SmartTimerNumber, i))
{
SmartTimerMsgPool[i][0] = msgType;
SmartTimerMsgPool[i][1] = msgPoint;
wSmartTimerCounterPool[i] = wCounter;
SmartTimerSeveralPool[i] = several;
wSmartTimerCounterRestorePool[i] = wCounter;
SETBIT(SmartTimerNumber, i);
break;
}
}
return((smart_timer_idle_check() << 4) + i);
}
/******************************************************************************************
*函数名: smart_timer_stop
*参数: number
*返回值: 无
*描述: 终止相应的智能定时器 ,回收其资源
*编写: 王绍伟
*版本信息: V1.0 2003年8月15日
******************************************************************************************/
extern void smart_timer_stop(byte number)
{
if(number == ALL)
{
SmartTimerNumber = 0;
}
else
{
SmartTimerNumber &= ~((byte)1 << number);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -