?? timer.c
字號:
count = SYSCLK/freq/12;
timer3.t = -(count%65536);
timer3.n = count/65536;
timer3.k = timer3.n;
if (timer3.k==0)
{
TMR3RLL = timer3.t&0x00ff;
TMR3RLH = (timer3.t>>8)&0x00ff;
TMR3L = TMR3RLL;
TMR3H = TMR3RLH;
}
else if(timer3.k==1)
{
TMR3RLL = timer3.t&0x00ff;
TMR3RLH = (timer3.t>>8)&0x00ff;
TMR3L = 0;
TMR3H = 0;
}
else
{
TMR3RLL = 0;
TMR3RLH = 0;
TMR3L = 0;
TMR3H = 0;
}
}
/***********************************************************************************
* 函數名稱: Timer3_Enable;
*
* 函數功能描述: Timer3使能函數,Timer3開始工作;
*
* 輸入參數: 無
*
* 返回數據: 無
*
* 注意: 無
************************************************************************************/
void Timer3_Enable(void)
{
TMR3CN |= TR3;
}
/***********************************************************************************
* 函數名稱: Timer3_Disable;
*
* 函數功能描述: Timer3關閉函數,Timer3停止工作;
*
* 輸入參數: 無
*
* 返回數據: 無
*
* 注意: 無
************************************************************************************/
void Timer3_Disable(void)
{
TMR3CN &= ~TR3;
}
/***********************************************************************************
* 函數名稱: Timer3_SetValue;
*
* 函數功能描述: 設置定時或計數寄存器值
*
* 輸入參數: value:定時或計數寄存器值
*
* 返回數據: 無
*
* 注意: 無
************************************************************************************/
void Timer3_SetValue(unsigned int value)
{
TMR3RLL = value&0x00ff;
TMR3RLH = (value>>8)&0x00ff;
TMR3L = TMR3RLL;
TMR3H = TMR3RLH;
}
/***********************************************************************************
* 函數名稱:Timer3_ISR;
*
* 函數功能描述:定時器3中斷響應;
*
* 輸入參數:none;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Timer3_ISR (void) interrupt 14 using 3
{
if (TMR3CN&TF3)
TMR3CN &= ~TF3;
if (timer3.k>0)
timer3.k--;
if (timer3.k==0)
{
DAC0_OutUpdate();
DAC1_OutUpdate();
timer3.k = timer3.n;
if(timer3.k==1)
{
TMR3RLL = timer3.t&0x00ff;
TMR3RLH = (timer3.t>>8)&0x00ff;
TMR3L = 0;
TMR3H = 0;
}
else
{
TMR3RLL = 0;
TMR3RLH = 0;
TMR3L = 0;
TMR3H = 0;
}
}
else if(timer3.k==1)
{
TMR3RLL = timer3.t&0x00ff;
TMR3RLH = (timer3.t>>8)&0x00ff;
}
}
/*************************************************************************************/
//
// Timer4 參數及函數定義
//
/*************************************************************************************/
/***********************************************************************************
* 函數名稱: Timer4_Init;
*
* 函數功能描述: Timer4 初始化函數;
*
* 輸入參數: mode: Timer4工作模式定義,freq:定時或計數溢出頻率
*
* 返回數據: 無
*
* 注意: 無
************************************************************************************/
void Timer4_Init(unsigned char mode,unsigned long freq)
{
unsigned char n;
unsigned int count;
unsigned long m;
#if (T4_MODE==T_UART1)
T4CON = mode;
n = SYSCLK/freq/32/65536; // 計算判斷變量
if (n < 1)
CKCON |= 0x40; // T4M = 1,系統時鐘
else if (n < 12)
CKCON &= ~0x40; // T4M = 1,系統時鐘/12
count = -(SYSCLK/freq/32); // 計算定時器計數值
RCAP4L = count&0X00ff;
RCAP4H = (count>>8)&0X00ff;
TL4 = RCAP4L;
TH4 = RCAP4H;
#elif (T4_MODE==T_TIMER)
m = SYSCLK/freq/12;
timer4.t = -(m%65536);
timer4.n = m/65536;
timer4.k = timer4.n;
if (timer4.k==0)
{
RCAP4L = timer4.t&0x00ff;
RCAP4H = (timer4.t>>8)&0x00ff;
TL4 = RCAP4L;
TH4 = RCAP4H;
}
else if(timer4.k==1)
{
RCAP4L = timer4.t&0x00ff;
RCAP4H = (timer4.t>>8)&0x00ff;
TL4 = 0;
TH4 = 0;
}
else
{
RCAP4L = 0;
RCAP4H = 0;
TL4 = 0;
TH4 = 0;
}
#else
T4CON = mode;
#endif
}
/***********************************************************************************
* 函數名稱: Timer4_Enable;
*
* 函數功能描述: Timer4使能函數,Timer4開始工作;
*
* 輸入參數: 無
*
* 返回數據: 無
*
* 注意: 無
************************************************************************************/
void Timer4_Enable(void)
{
T4CON |= TR4;
}
/***********************************************************************************
* 函數名稱: Timer4_Disable;
*
* 函數功能描述: Timer4關閉函數,Timer4停止工作;
*
* 輸入參數: 無
*
* 返回數據: 無
*
* 注意: 無
************************************************************************************/
void Timer4_Disable(void)
{
T4CON &= ~TR4;
}
/***********************************************************************************
* 函數名稱: Timer4_SetValue;
*
* 函數功能描述: 設置定時或計數寄存器值
*
* 輸入參數: value:定時或計數寄存器值
*
* 返回數據: 無
*
* 注意: 無
************************************************************************************/
void Timer4_SetValue(unsigned int value)
{
RCAP4L = value&0X00ff;
RCAP4H = (value>>8)&0X00ff;
TL4 = RCAP4L;
TH4 = RCAP4H;
}
/***********************************************************************************
* 函數名稱:Timer4_ISR;
*
* 函數功能描述:定時器4中斷響應;
*
* 輸入參數:none;
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
void Timer4_ISR (void) interrupt 16 using 3
{
unsigned int m;
if (T4CON&TF4)
T4CON &= ~TF4;
if (T4CON&EXF4)
T4CON &= ~EXF4;
if (timer4.k>0)
timer4.k--;
if (timer4.k==0)
{
timer4.k = timer4.n;
DAC0_OutUpdate();
DAC1_OutUpdate();
Uart1_SendChar('S');
}
else if(timer3.k==1)
{
TMR3RLL = timer3.t&0x00ff;
TMR3RLH = (timer3.t>>8)&0x00ff;
}
#if (T4_MODE==T_TIMER)
//m = SYSCLK/freq/12;
timer4.t = -(m%65536);
timer4.n = m/65536;
timer4.k = timer4.n;
if (timer4.k==0)
{
RCAP4L = timer4.t&0x00ff;
RCAP4H = (timer4.t>>8)&0x00ff;
TL4 = RCAP4L;
TH4 = RCAP4H;
}
else if(timer4.k==1)
{
RCAP4L = timer4.t&0x00ff;
RCAP4H = (timer4.t>>8)&0x00ff;
TL4 = 0;
TH4 = 0;
}
else
{
RCAP4L = 0;
RCAP4H = 0;
TL4 = 0;
TH4 = 0;
}
#else
//T4CON = mode;
#endif
}
/***********************************************************************************/
// 文件結束
/***********************************************************************************/
/***********************************************************************************
* 函數名稱:Timer0_Delay;
*
* 函數功能描述:定時器延時子函數;
*
* 輸入參數:延時時間(單位毫秒);
*
* 返回數據:none;
*
* 注意: none;
************************************************************************************/
/*
void Timer0_Init(int count)
{
TCON &= ~0x30; // 停止Timer0
TMOD &= ~0x00; // 配置定時器Timer0工作在16位模式
TMOD |= 0x01;
CKCON |= 0x00; // 定時器Timer0時鐘選擇
TR0 = 0; // 停止定時器Timer0
TH0 = -count >> 8; // 設置定時器Timer0溢出時間
TL0 = -count;
}
*/
/***********************************************************************************/
// 文件結束
/***********************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -