?? 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 + -