1

我在那本书中研究了 avr 计时器(Mazidi),其中在计时器章节中给出了一个程序,它说每当我们需要计算输入 TCNT0 的值时,我们应该这样计算。例如 8Mhz, 256 prescalar , 1 s delay

     8 Mhz = .125 usec 
     256 x 0.125 = 32 usec
     for 1 ms delay 
     1sec / 32usec = 31250 clock cycles = 0x7A12
     so the value for TCNT0 is 
     1+FFFF-7A12 = 0x8255 //what this step means

此外,在轮询时,我们会为 1 寻找 TIFR 的第 0 位。当它变为 1 时,我们会停止计时器并停止时钟源,但我们为什么要这样做

     TIFR = 0x1 //clears TIFR??

在书中写到它清除了 TIFR 。当该位已经为 1 时,这怎么可能,在其上写 1 表示清楚?

4

1 回答 1

0
1+FFFF-7A12 = 0x8255 //what this step means

这不是使用计时器的常用方法,但它会从 0 中减去您的数字(相当于 0xFFFF + 1),以便它“倒计时”并在计时器达到 0 时跳闸。

相反,它对我们来说更有意义 TOC(定时器输出比较)。

TIFR = 0x1 //clears TIFR??

是的。该寄存器不是内存位置。它被映射到一个内存位置。一些寄存器确实以这种方式工作。

于 2013-09-30T17:23:24.143 回答