📄 timer.h
字号:
/*************************************************************************
* Point RTOS(51) *
* The Real-Time Kernel(For Keil c51) *
* *
* (c) Copyright 2005, PenGH *
* All Rights Reserved *
* *
* V0.9.1 *
* *
* File : TIMER.H *
* Author : 彭光红 *
* History : *
* 2005/08 By PenGH *
*************************************************************************/
/*----------------------------------------------------------------------*/
#ifndef _TIMER_HEAD_
#define _TIMER_HEAD_
#include ".\OS_CFG.H"
#include "..\..\..\8051CPU\OS_CPU.H"
#include "..\..\..\OS\Os_Core.h"
/*************************************************************************
*
* DESCRIPTION : 定义日期时间类型
*
*************************************************************************/
#define OS_DATETIME_EN 1 /* 时间模块是否有效 */
#define OS_SYSTENSTICK_EN 0 /* 系统滴哒是否有效 */
#define OS_SHORT_TIME_EN 1
#if OS_SHORT_TIME_EN==0
typedef UINT32 TDateTime;
#else
typedef UINT16 TDateTime;
#endif
#ifdef __IN_TIMER_FILE__
#define TIMER_EXT
#else
#define TIMER_EXT extern
#if OS_SYSTENSTICK_EN > 0
TIMER_EXT TDateTime Os_Running_Times;
#endif
#endif
/*************************************************************************
*
* DESCRIPTION : 定义系统定时器的中断程序入口号,本系统使用定时器0,如有
* 更改,用户应同时更新此定义
*
*************************************************************************/
#define OS_TIMER_NO 1
/*************************************************************************
*
* DESCRIPTION : 定义定时器的宽度,即是十六定时器还是八位定时器或其它
* 用户应根据应用的具体设定进行修改。
*
*************************************************************************/
#define OS_TIMER_WIDTH 16
/*************************************************************************
*
* DESCRIPTION : 定义系统的每一个指令周期所耗时间,实际就是时钟晶振频率
* 本系统使用的是11.0592晶振,用户应根据实际的晶振频率进行
* 调整。
*
*************************************************************************/
#define OS_CLOCK_CYCLES 1085
/*************************************************************************
*
* DESCRIPTION : 定义应用中定时器的最小时间分度,根据应用不同,用户可以
* 按要求设定。
*
*************************************************************************/
#define OS_TIME_SCALE 50
/*************************************************************************
*
* DESCRIPTION : 定义时间常数,此常与上面的定义参数相关联,定义此常数
* 是为了更方便用户进行时间参数设定而不必去修改内核代码。
*
*************************************************************************/
#if OS_TIMER_WIDTH==16
#define OS_TIME_CONST ( 65536-( (OS_TIME_SCALE*1000000)/(OS_CLOCK_CYCLES) ) )
#else
#if OS_TIMER_WIDTH==8
#define OS_TIME_CONST ( 256-( (OS_TIME_SCALE*1000000)/(OS_CLOCK_CYCLES) ) )
#endif
#endif
/*************************************************************************
*
* DESCRIPTION : 系统定时器初始化
*
*************************************************************************/
#define OS_TIMER_INIT() do{\
TL0=OS_TIME_CONST%256;\
TH0=OS_TIME_CONST/256;\
TR0 = 1;/*定时器启动*/\
ET0 = 1;/*定时器中断打开*/\
}while(0)
/*************************************************************************
*
* DESCRIPTION : 定时器设置
*
*************************************************************************/
#define OS_TIMER_SET() do{\
TL0=OS_TIME_CONST%256;\
TH0=OS_TIME_CONST/256;\
}while(0)
/*时间模块函数定义*/
#if OS_DATETIME_EN>0
#define OS_DATETIME_TASK_DLY 5 /*定时器任务调用周期*/
#define TIMER_DATA_TYPE xdata
#define OS_DATETIME_COUNT 5 /*定时器个数,最多八个*/
#define OS_DATETIMEFUNARG_EN 0 /*调用函数是否有参数,如果有
此参数则使能此选区项*/
typedef struct{
UINT8 tmrCtrl; /*定时器控制,即计数器*/
void (*tmrCall)(void); /*定时器到调用函数指针*/
#if OS_DATETIMEFUNARG_EN>0
void *tmrArg; /*指向函数的参数,调用都应当设置此参数*/
#endif
}TTMR;
typedef struct{
UINT8 tmrTbl; /*计时器表*/
TTMR timer[OS_DATETIME_COUNT]; /*计时器*/
}TTIMER;
#ifndef __IN_TIMER_FILE__
TIMER_EXT TTIMER TIMER_DATA_TYPE OSTmr;
#endif
TIMER_EXT void TmrTask(void);
TIMER_EXT void TmrInit(UINT8 task_prio);
TIMER_EXT void TmrStart(UINT8 ind,UINT8 cnt);
TIMER_EXT void TmrStop(UINT8 ind);
TIMER_EXT void TmrSetFunc(UINT8 ind,UINT8 cnt,void *pt);
TIMER_EXT void TmrStep(UINT8 ind);
#endif
#endif
/* The end of file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -