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