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

📄 otimer.c

📁 一种51单片机嵌入式系统SMALL RTOS 51的应用
💻 C
字号:

//#define OTimer_Macro_10msTH   (65536 - (11059200 / 12) / 900) / 256		//定时450HZ
//#define OTimer_Macro_10msTL   (65536 - (11059200 / 12) / 900) % 256		//定时450HZ
#define OTimer_Macro_10msTH   0xf8//0xFC		//定时450HZ
#define OTimer_Macro_10msTL   0x00//0x00		//定时450HZ
/*
#define OTIMER_MEM_SEL		idata
#define OTimer_Macro_MaxLogicTimerNum  4    //最大逻辑定时器数量//

#define OTimerID0              0
#define OTimerID1              1
#define OTimerID2              2
#define OTimerID3              3
#define OTimerID4              4
#define OTimerID5              5
#define OTimerID6              6
#define OTimerID7              7

uchar OTIMER_MEM_SEL OTimer_RD_1msCounter    ;  		//1ms计数器

uchar OTIMER_MEM_SEL OTimer_RD_Status;           		//逻辑定时器状态 1:发生了  0:未发生
uchar OTIMER_MEM_SEL OTimer_RD_Enable;           		//逻辑定时器允许位 1:启动  0:为启动
uchar OTIMER_MEM_SEL OTimer_RD_Mode;             		//逻辑定时器模式 1:重载   0:单次
uchar OTIMER_MEM_SEL OTimer_RD_Interval[OTimer_Macro_MaxLogicTimerNum];		//逻辑定时器定时值
uchar OTIMER_MEM_SEL OTimer_RD_DecCounter[OTimer_Macro_MaxLogicTimerNum];
*/
/************************************************
Name      : 定时器初始化. 
Date      : 10:29PM  03/05/02
*************************************************/
void Sys_TimerInit()
{
    ET1 = 0; /* Forbid T0 INT */
    TMOD = (TMOD & 0x0f) | 0x10; /*方式1*/
     
    TF1 = 0; /* Reset */
    TH1 = OTimer_Macro_10msTH;       /* VER 99 */
    TL1 = OTimer_Macro_10msTL;   
/*    OTimer_RD_1msCounter = 0 ;
	OTimer_RD_Status = 0;
    OTimer_RD_Enable = 0;
    OTimer_RD_Mode = 0 ;
*/	
    ET1 = 1; // Permit T0 INT //
    PT1 = 0; // Lower Priority //
    TR1 = 1; // Start T0 /
    
    return ;
}

void  OTimer_Interrupt()
{
//	uchar i,temp ;
	TH1 = OTimer_Macro_10msTH;//1.1ms定时
	TL1 = OTimer_Macro_10msTL;
/*	
	if(Sign_Music_flag == 1)
		SWMUISC = !SWMUISC ;
	Check_Mode_Conter() ;
	Phone_ToneCheck() ;
	
	OTimer_RD_1msCounter++ ;
	if(OTimer_RD_1msCounter >= 90)			//100ms 定时到
	{
		OTimer_RD_1msCounter = 0 ;
		temp = 1;
		for(i = 0; i < 4; i++)
		{
		  	if(((OTimer_RD_Enable >> i) & 1) == 1)
		   	{
		   		OTimer_RD_DecCounter[i] --;
		   		if(OTimer_RD_DecCounter[i] == 0)    //定时到
		   		{
		   			OTimer_RD_Status |= (temp << i);
		   			if(((OTimer_RD_Mode >> i) & 1) == 1)  //重载定时器
		   			{
		   				OTimer_RD_DecCounter[i] = OTimer_RD_Interval[i];
		   			}	
		   			else //释放定时器
		   			{
		   				OTimer_RD_Enable &= ((temp << i) ^ 0xFF);
		   			}	
		   		}	
		   	}	
		}	
	}*/
}	

/************************************************
Name      : Sys_TimerReqire
Describ   : 逻辑定时器申请. 定时误差为1个TICK.
*************************************************
uchar Sys_TimerReqire(uchar  OTimerID, uchar  Interval, uchar Mode)     
{
	uchar temp_ret;
    temp_ret = 0x01;
    //申请空余定时器/
    if(OTimerID > OTimerID4)
    {
        return (FALSE) ;
    }	
    if (Interval == 0)  // 立即执行
	{
		OTimer_RD_Status |= (temp_ret << OTimerID);
        return (TRUE) ;
	}    

    OTimer_RD_Interval[OTimerID] = Interval;
    OTimer_RD_DecCounter[OTimerID] = Interval;
	OTimer_RD_Enable |= (temp_ret << OTimerID);
	OTimer_RD_Status &= ((temp_ret << OTimerID) ^ 0xFF);
	if(Mode == 0)
	    OTimer_RD_Mode &= ((temp_ret << OTimerID) ^ 0xFF);
	else
	    OTimer_RD_Mode |= (temp_ret << OTimerID);
    return (TRUE) ;
}
*/
/************************************************
Name      : 释放定时器. 
Describ   : 释放指定逻辑定时器.
************************************************
void Sys_TimerRelease(uchar  OTimerID)    
{
	uchar  temp_ret  ;
	temp_ret = 0x01;
    if(OTimerID > OTimerID4)
    {
        return;
    }	
    OTimer_RD_Enable &= ((temp_ret << OTimerID) ^ 0xFF);
    OTimer_RD_Status &= ((temp_ret << OTimerID) ^ 0xFF);
    return ;
}
*/
/**********************************
        逻辑定时器查询
输入:无
输出:逻辑定时器号
**********************************
uchar Analyse_OTimerID()
{
	uchar i,temp_buffer;
	uchar temp_ret;
	temp_ret = 1;
	temp_buffer = OTimer_RD_Status;
	for(i = 0; i < 4; i++)
	{
		if((temp_buffer & 1) == 1)
		    break;
		temp_buffer >>= 1;
	}	
	if(i < 8)
		OTimer_RD_Status &= ((temp_ret << i) ^ 0xFF);
	return(i);
}
*/
/************************************************
Name      : 清除定时器. 
Describ   : 清除所有逻辑定时器. (不建议使用)
Input	  : 无
Output    : 无
************************************************
void Sys_TimerClear()    
{
    OTimer_RD_Enable = 0;
    OTimer_RD_Status = 0;
}

void time(uint delaytime)
{
	while(--delaytime) ;
}
*/

⌨️ 快捷键说明

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