有所追求
分类:
2009-03-28 23:46:31
前两个系列讨论了自由运行计数器的时钟基准和定时溢出问题,这一次讨论一下TCNT时间的计算问题.
尽管可以复位TCNT,TCNT可以置O,但是在操作之前必须十分小心,所有的计时通道都是从TCNT得到它们的时钟基准.因此,若TCNT通过复位来使某个应用的定时器从$0000开始,其它的计时通道可能也会被影响.所以应该习惯于耗用时间而不是复位定时器.也就是说,必须计算关键事件之间的时间差.另外还要考虑定时器溢出.
计算耗用的时间就是用停止时的时间减去开始时的时间,这对自由运行计数器来说稍微有些复杂.通常,当对某个事件计时时,计数器不会复位.因此,可能会遇到不同的计时情况. 最简单的情况:停止时间大于开始时间,且没有发生定时器溢出.这种情况下,耗用的时间就是停止时间减去开始时间,将脉冲数乘以TCNT的时钟周期,就可以将耗用时钟脉冲数转化为真实的时间.
另外还有一种情况是:停止时间小于开始时间,并且发生了一次TCNT溢出.
还是举个例子:比如前一个脉冲的下降沿进了中断,此时TCNT为data1,后一个肪冲的下降沿也进了中断,此时TCNT为data2,那么data2-data1就是二者的间隔时间。但是会有个问题,如果data2比data1小,即TCNT溢出了一次,怎么办?这个不用但心,无符号数的情况下,14-15=254.对于16位的数运算一样的道理。呵呵,TCNT溢出一次好解决,多次呢?对了,TOF溢出中断,记录TCNT溢出的次数,再做运算就行了。但是似乎没有那个必要了,TCNT本来就是16位的,这样一来,data2-datAa1就不知道是多少位了,数据太大了,没有必要,还不如调节TCNT的时钟基准.
1式中:n表示开始和停止这间(TOF)定时器溢出个数.
由于TOF的个数在正确计算耗用时间时非常重要,因此要确保计算出的耗用时间的精确性,每次定时器溢出标志(TOF)置位后都必须将其复位.