使用配置函数配置定时器可以很方便程序编写
//定时器使用12个时钟周期时
unsigned char T0RH = 0; //T0重载值的高字节
unsigned char T0RL = 0; //T0重载值的低字节
/*******************************************************************************
* 函数功能 : T0配置函数
* 函数说明 :
*******************************************************************************/
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp; //临时变量
AUXR=0x00;//定时器为12T
tmp = FOSC / 12; //定时器计数频率
tmp = (tmp * ms) / 1000; //计算所需的计数值
tmp = 65536 - tmp; //计算定时器重载值
T0RH = (unsigned char)(tmp>>8); //定时器重载值拆分为高低字节
T0RL = (unsigned char)tmp;
TMOD &= 0xF0; //清零T0的控制位
TMOD |= 0x00; //配置T0为模式0 模式0为16位自动重装,1为16位不重装,02为8位自动重装定时器
TH0 = T0RH; //加载T0重载值(自动重装模式只需计算TH0)
TL0 = T0RL;
ET0 = 1; //使能T0中断
TR0 = 1; //启动T0
}
//定时器使用1个时钟周期时
unsigned char T0RH = 0; //T0重载值的高字节
unsigned char T0RL = 0; //T0重载值的低字节
/*******************************************************************************
* 函数功能 : T0配置函数
* 函数说明 :
*******************************************************************************/
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp; //临时变量
tmp = FOSC; //定时器计数频率
tmp = (tmp * ms) / 1000; //计算所需的计数值
tmp = 65536 - tmp; //计算定时器重载值
T0RH = (unsigned char)(tmp>>8); //定时器重载值拆分为高低字节
T0RL = (unsigned char)tmp;
TMOD &= 0xF0; //清零T0的控制位
TMOD |= 0x00; //配置T0为模式0 模式0为16位自动重装,1为16位不重装,02为8位自动重装定时器
TH0 = T0RH; //加载T0重载值(自动重装模式只需计算TH0)
TL0 = T0RL;
ET0 = 1; //使能T0中断
TR0 = 1; //启动T0
}