2014-06-20 37 views
4

我在我的atmega 328p上實現了一個時間計數器。我看了arduino millis函數的實現,我有點困惑,爲什麼他們使用定時器溢出中斷,每執行一個1.024毫秒(freg = 16MHz,64個預分頻),當他們可以使用輸出比較匹配中斷,可以設置爲每隔1ms觸發一次(OCR0A = 249)。使用定時器溢出中斷是否有優勢,並對輸出比較匹配中斷進行一些更正,以每隔1ms執行一次?或者他們爲什麼使用它?爲什麼Arduino在millis函數中每1.024ms使用一次中斷?

回答

1

計數器值TCNT用於計算超出中斷的微秒數。使用比較匹配來定義TOP值會產生精確的中斷,但是復位更精細的微計算,因爲TCNT被重置。對非TOP值使用比較匹配(用於產生PWM)不會產生週期性的1ms中斷。

我個人用作第二個定時器來取樣由OCRxA寄存器定義的TOP值。

相關問題