⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.h

📁 在单片机通过软件建立定时器
💻 H
字号:
/********************************************************************
*Copyright-(c) 2003,                                                *
*All rights reserved.                                               *
*                                                                   *
* 文件名称: TIMER.H                                                *
* 摘要    : Headfile of TIMER.C                                    *
*            for 80x86                                              *
*                                                                   *
* 当前版本: 2.1                                                    *
* 作者    : Liy-tj                                                 *
* 完成日期: 2004年3月3日                                           *
*********************************************************************/

/********************************************************************
                           全局变量外部引用
*********************************************************************/
#ifdef   TMR_GLOBALS
#define  TMR_EXT
#else
#define  TMR_EXT extern
#endif

/********************************************************************
                            常量、宏定义
*********************************************************************/
#define TMR_FREE          0xFE          //空计时器
#define TMR_EN            0x01          //有计时器
#define TMR_RUN           0x03          //运行
#define TMR_STOP          0xFD          //停止
#define TMR_FLG_UP        0x04          //触发标志位置高
#define TMR_FLG_DOWN      0xFB          //触发标志位置低
#define TMR_MOD           0x30          //工作模式
#define TMR_MOD_CONT      0x00          //连续工作
#define TMR_MOD_ONCE      0x10          //一次工作
#define TMR_MOD_DELAY     0x20          //延迟

#ifndef UNIT_TYP_DEF
    #define UNIT_NS             0
    #define UNIT_US             1           //定时单位,微秒(缺省)
    #define UNIT_MS             2           //定时单位,毫秒
    #define UNIT_S              3           //定时单位,秒
#endif

#define TMR_TICK_LENGTH   10000         //定义计时器节拍周期,单位为us
#define MAX_TMR           12            //定义系统需要最多计时器个数
#define TMR_LARG_RANG                  //计时器计时范围————大范围
/**************************模块功能裁减******************************/
//#define TMR_SET_EN                     //允许修改定时器
//#define TMR_DELAY_EN                   //允许延迟函数
#define TMR_DELET_EN                   //允许删除计时器
//#define TMR_INTR_FNCT_EN               //允许中断内调用任务函数
//#define TMR_SET_FNCT_EN                //允许计时器任务函数可以在运行中修改
//#define TMR_CALL_FNCT_EN               //允许直接调用计时器任务函数
#define TMR_RELOAD_EN                  //允许计时器重载

/********************************************************************
                            类型定义
*********************************************************************/
typedef  INT8U  TMR_ID;        //计时器ID类型

/********************************************************************
                             全局变量
*********************************************************************/
//#ifdef TMR_GLOBALS
TMR_EXT INT8U  TmrSta[MAX_TMR];          //计时器控制状态寄存器数组
                                         //bit0  : TMREN 计时器使能位
                                         //bit1  : TMRRUN计时器运行状态位
                                         //bit2  : TMRFLG计时器触发标志位
                                         //bit3  : 保留位
                                         //bit4~5: TMRMOD计时器工作模式
                                         //bit6~7: 保留位

#ifdef TMR_LARG_RANG
TMR_EXT INT32U TmrCtr [MAX_TMR];          //计时器计数值数组
TMR_EXT INT32U TmrInit[MAX_TMR];          //计时器初始值数组
#else
TMR_EXT INT16U TmrCtr [MAX_TMR];
TMR_EXT INT16U TmrInit[MAX_TMR];
#endif
#ifdef TMR_INTR_FNCT_EN
//指向在中断过程中运行的函数的指针数组
TMR_EXT void  (*TmrIntFnct[MAX_TMR])(void);
#endif
//指向在中断过程外运行的函数的指针 
TMR_EXT void  (*TmrFnct[MAX_TMR])(void);
//#endif

/**********************************************************************
                          模块接口函数
***********************************************************************/
#ifdef TMR_LARG_RANG
TMR_ID TMR_Create(INT32U tmrinit, INT8U tmrunit, INT8U tmrmod, 
                 void (*intfnct)(void), void (*fnct)(void));
void  TMR_SetLen(INT8U tmrid, INT32U tmrinit, INT8U tmrunit);
void  TMR_Set(INT8U tmrid, INT32U tmrinit, INT8U tmrunit, INT8U tmrmod,
              void (*intfnct)(void), void (*fnct)(void));                      
void  TMR_LongDelay(INT32U delaylen, INT8U tmrunit, void (*fnct)(void));
INT32U TMR_GetCtr(TMR_ID tmrid);
#else
TMR_ID TMR_Create(INT16U tmrinit, INT8U tmrunit, INT8U tmrmod, 
                 void (*intfnct)(void), void (*fnct)(void));
void  TMR_SetLen(INT8U tmrid, INT16U tmrinit, INT8U tmrunit);
void  TMR_Set(INT8U tmrid, INT16U tmrinit, INT8U tmrunit, INT8U tmrmod,
              void (*intfnct)(void), void (*fnct)(void));
void  TMR_LongDelay(INT16U delaylen, INT8U tmrunit, void (*fnct)(void));
INT16U TMR_GetCtr(TMR_ID tmrid);
#endif

INT8U TMR_GetSta(TMR_ID tmrid);
void  TMR_Init(void);
void  TMR_Start(INT8U tmrid);
void  TMR_Stop(INT8U tmrid);
void  TMR_Reload(INT8U tmrid);
#ifdef TMR_INTR_FNCT_EN
void  TMR_CallIntFnct(INT8U tmrid);
#endif
void  TMR_CallFnct(INT8U tmrid);
void  TMR_SetFnct(INT8U tmrid, INT8U tmrmod,
                  void (*intfnct)(void), void (*fnct)(void));
void  TMR_Delete(INT8U *ptmrid);
void  TMR_IntTask(void);
void  TMR_Task(void);

/********************************************************************
                                 宏定义
*********************************************************************/
#define TMR_CreateContMs(tmrinit,intfnct,fnct) TMR_Create((tmrinit),UNIT_MS,TMR_MOD_CONT,(intfnct),(fnct))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -