求助:有关ATmega16的TCNT0初值设置 手头上有个ATmega16的源程序,其中启动定时器0的程序如下:
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-计数初值)/晶振频率*分频数
另外头文件中有:#define F_CPU 8000000UL (8M)
CPU的晶振好像和上述两个频率没什么关系啊!!! 而TCCR0 = 0x02设置时钟源来自预分频器。
结贴: 晶振弄错,应该是11.0592M。上面8M是个假牙。 T1=256-(11.0592M/8)*20us=228; T2=256-(11.0592M/8)*40us=201;
PS:回2楼,定时值:T=(256-计数初值)*分频数/晶振频率,是没错的。 我理解你的意思,不过可能是你没注意到我写的是“定时值”而不是“定时初值”! 正常情况下,是先确定定时值,再确定定时初值。 定时初值:T=256-(晶振频率/分频数)*定时值 |