2015-03-30 16 views
0

我正在學習Assembly,並且發現定時器/計數器的部分讓我很困惑...在課堂上,我們使用TC1的週期測量示例在AVR(metaAVR 328P)中:在AVR(彙編)中使用TC1測量未知信號的週期

使用TC1來測量未知信號的週期。已知該時段短於128毫秒。假設時鐘頻率是16 MHz。使用時鐘週期數作爲週期的單位。

給我們的解決方案是:

由於輸入捕獲寄存器是16位,即可以在沒有預分頻器被測量的信號的最長週期爲:2^16÷16 MHz = 4.096毫秒。

要衡量一個週期等於128毫秒,我們有兩個選擇:

  1. 設置預分頻係數爲1,跟蹤倍定時器計數器溢出的數量。

  2. 設置預比例因子爲64,並且不記錄定時器計數器溢出的次數。

我們將使用的64

我得到的是可以測量的最長週期是4.096毫秒的預分頻係數。但是這兩種選擇從哪裏來?如果我們將prescalor設置爲1,則時鐘頻率將爲16 MHz,那麼會發生什麼?如果我們將其設置爲64,時鐘週期將爲16MHz/64 = 250 000 Hz = 250 KHz,那麼會發生什麼?我只是沒有看到設置頻率如何跟蹤定時器計數器溢出的次數......爲什麼我們需要預先調整頻率?我們試圖找出時鐘週期數,所以

clock cyles *預分頻後的時鐘頻率=週期?

上面的公式是正確的嗎?在這一點上,我覺得我很困惑自己,所以任何暗示將非常感激。

回答

0

不,方程式不正確。

頻率是一個滴答時間的倒數。在16 Mhz時,刻度是1/16000000秒。這就是在65536/16000000 = 4096/100000秒後16位定時器溢出的原因。

你正在尋找的公式爲以秒爲單位,所以

蜱/頻率=週期

都行。