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