void StartTimer0(INT8U us) //开始定时器0
{
TCCR0 = 0x00; //停止定时器
if(us == 20)
{
TCNT0 = 0xE4; //228,20us初始值
}
else if(us == 40)
{
TCNT0 = 0xC9; //201,40us初始值
}
TIMSK |= 0x01; //中断允许
TCCR0 = 0x02; //启动定时器,8分频
}
查了很多资料,但对TCNT0的初始值仍有疑惑,望高手答疑解惑。
TCNT0是8位寄存器,定时值:T=(256-计数初值)/晶振频率*分频数
将20us、228、分频数8带入可求得晶振频率F=0.175MHz,
将40us、201、分频数8带入可得F=0.172M
另外#define F_CPU 8000000UL (8M)
CPU的晶振好像和上述两个频率没什么关系啊!!! 而TCCR0 = 0x02设置时钟源来自预分频器。