同一个定时器实现不同的定时功能
2014-11-01 11:04
169 查看
最近在学习VC 的时候使用到了UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT*lpfnTimer)(HWND, UINT, UINT, DWORD) );函数。nIDEvent定时器非零标识,nElapse定时器的溢出时间。于是就想把这个思想用到单片机上。
void SetTime(UINT uiTime,UCHAR ucIntFun)
{
uiMaxCount = uiTime;
ucIntFunFlag = ucIntFun;
uiTimeCount = 0;
TM00_Start(); //启动定时器
}
其中uiTime为定时时长的设置值、ucIntFun为功能标志位。通过这个方式可以方便的实现同一个定时器,实现不同的定时功能。
__interrupt void MD_INTTM000(void) //定时器中断
{
if(uiTimeCount < uiMaxCount)
{
uiTimeCount ;
if(uiTimeCount == uiMaxCount)
{
uiTimeCount = 0;
switch(ucIntFunFlag)
{
case 0:
break;
case 1:
break:
case 2:
break;
default:
break;
}
}
}
}
通过定时器设定初值是计时的最小单位。通过这种方式的好处就是简单方便在定时器不复用的情况下实现不同的定时功能。但是这样做的缺点也很明显。将时间切割为小的时间片之后每个小的时间片会有一定的误差。如果计时时间比较长误差就会比较大。所以应该只试用于对计时要求不严格的场合。
void SetTime(UINT uiTime,UCHAR ucIntFun)
{
uiMaxCount = uiTime;
ucIntFunFlag = ucIntFun;
uiTimeCount = 0;
TM00_Start(); //启动定时器
}
其中uiTime为定时时长的设置值、ucIntFun为功能标志位。通过这个方式可以方便的实现同一个定时器,实现不同的定时功能。
__interrupt void MD_INTTM000(void) //定时器中断
{
if(uiTimeCount < uiMaxCount)
{
uiTimeCount ;
if(uiTimeCount == uiMaxCount)
{
uiTimeCount = 0;
switch(ucIntFunFlag)
{
case 0:
break;
case 1:
break:
case 2:
break;
default:
break;
}
}
}
}
通过定时器设定初值是计时的最小单位。通过这种方式的好处就是简单方便在定时器不复用的情况下实现不同的定时功能。但是这样做的缺点也很明显。将时间切割为小的时间片之后每个小的时间片会有一定的误差。如果计时时间比较长误差就会比较大。所以应该只试用于对计时要求不严格的场合。
相关文章推荐
- 一个表单中多个按钮实现不同功能
- 如何在一个工程里面实现不同的功能打入不同的日志文件中【log4net】
- quartz实现定时功能实例详解(servlet定时器配置方法)
- 编写一个程序库,实现定时器的功能,它能为用户提供在同一进程中多次使用的定时器。
- Linux使用一个定时器实现设置任意数量定时器功能
- 定时器实现定时功能
- quartz实现定时功能实例详解(servlet定时器配置方法)
- 如何在一个工程里面实现不同的功能打入不同的日志文件中【log4net】
- jQuery插件timers定时器实现javascrip定时或按钮控制功能
- 移动uiView 缩放uiView+一个View实现不同子view的功能
- GCD 开启一个定时器实现倒计时功能
- quartz实现定时功能实例详解(servlet定时器配置方法)
- Web小功能1——jquery实现一个按钮两个功能(触发不同事件)
- 实现s3c2440的硬件定时器驱动(顺带分析不同定时要求需要用何种方式)
- 同一个表单中使用多个不同submit将不同功能提交到同一servlet中的不同操作的实现
- 使用Quartz实现定时功能
- 一个使用监听器模式实现的J2ME网络编程框架,包括一个简单的登录功能实现(含源代码)
- 一个实现查询功能的asp.net控件
- StringWriter实现的一个功能
- 利用JOB和SQL邮件功能实现对数据库的定时备分