|
发表于 2009-8-16 14:46:05
|
显示全部楼层
谢谢一楼: hollymacs
我今天上午又弄了一下,试验是成功,我加了一个溢出中断,在溢出中断程序里面又从新给TCNT0赋值0X83,试验结果是计数器计数到OXFF时,又从新从0X83开始计数,不再是0X00,所以重新赋值很重要呀
========================================================================
还是理解的不正确。
AVR的定时器加到0XFF,并不产生溢出中断,而是到下一个计数脉冲到后,TCNT0变成0,同时产生溢出中断。因此,计数器还是到0x00了,甚至还会继续计到了1、2后,才由于你的中断服务中的重新赋值,才开始从0X83计数!!0开始的前面的几个计数被一般人忽视了。
如果你不使用或没有中断服务,那么定时器就一直是从0开始到255循环了。所以为了保证下一次定时的正确,需要在中断服务中首先赋初值。
但由于中断后,定时器仍然再继续工作,而中断响应需要时间,赋初值也需要时间,所以采用溢出中断附初值的方法,定时的时间是不精确的,要比理论的长一点。如果把赋初值放在中断的最后,定时时间还要不准,更加延长了。
所以CTC方式比溢出方式定时精确,使用也方便。 |
|