公式:N=65536-(Fosc/FD/(Freq));
N : 定时器16位计数器
Fosc: 晶振频率,系统频率
FD : 分频 (Frequency division),通过分频可增大计数器的定时范围。
Freq : 频率 (Freq=1(秒)/TIME(秒),TIME:所定时间)
例:22.1184MHZ晶振,T0作为定时器,定时每5ms进一次定时器,那么换算一下1/(5/1000)=200频率就是200HZ。
代码:
#define FOSC 22118400L //系统频率
#define T0_TIM (65536-(Fosc/1/200))
sfr AUXR = 0x8e; //Auxiliary register
void tm0_init() //定时器0初始化函数
{
AUXR |= 0x80; //定时器0为1T分频模式
// AUXR &= 0x7f; //定时器0为12T分频模式
TMOD = 0x01; //设置定时器为模式0(16位手动重装载)
TL0 = T0_TIM%256; //装载低8位计时值
TH0 = T0_TIM/256; //装载高8位
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
EA = 1;
}
void tm0_isr() interrupt 1 using 1
{
//定时器到执行这里
TL0 = T0_TIM%256;//装载计时值
TH0 = T0_TIM/256;
}