2013-09-30 51 views
1

我正在學習計時器章節中給出的一個程序中的avr定時器(Mazidi),它說當我們需要計算進入TCNT0內部的值時,我們應該這樣計算。例如爲8MHz,256分頻器,1秒的延遲AVR定時器編程

 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 

此外,當輪詢我們尋找TIFRs第0位爲1,當它變成1我們停止計時器和停止的時鐘源,但爲什麼我們做這個

 TIFR = 0x1 //clears TIFR?? 

在書中它寫了它清除TIFR。當這個位已經是1時,這是如何實現的,在它上面寫1清楚了?

+0

通常您會在位/寄存器描述中看到類似於W1C的內容。 「寫一個清除」不取消註銷中斷標誌寄存器使用清除寫入清除(通常是讀取標誌寄存器,對標誌進行操作然後寫入讀取的內容清除已知的位,再次讀取其他標誌設置,處理這些,寫回你的東西,等等。 –

回答

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

這是不使用的計時器通常的方式,但它的減去從0號(相當於到0xFFFF + 1),使得其「向下計數」和旅行當定時器達到0

對我們而言TOC(定時器輸出比較)更有意義。

TIFR = 0x1 //clears TIFR?? 

是的。該寄存器不是內存位置。它映射到一個內存位置。有些寄存器可以這樣工作。