2016-04-26 55 views
1

我使用的是內部時鐘週期爲200ns的PIC16F88X,我想對TIMER0進行編程,以每秒進行4次測量。在PIC16F882上對Timer0進行編程的值大於最大值PRESCALER

根據microchip tutorial on programming timer 0(第10頁)我可以使用PS0PS1PS2分配TMR0 RATE至1:256,但這隻讓我的時鐘週期規模51.2微秒。

也有可能爲TMR0編程初始值,但我認爲它不會影響我想要達到的時鐘。我錯過了什麼大圖片?

回答

4

預計計時器預分頻器不能覆蓋用戶可能需要的任何範圍。爲了實現更大的間隔,您必須在您的定時器中斷例程中添加額外的邏輯。基本上你必須添加額外的變量/計數器,你必須增加,比如說50us(你可以通過將初始值添加到TMR0來調整計時器從51.2us到50us)。當你的計數器達到5000時,你想要1/4分辨率。

希望它可以幫助...

+0

我忘了指定'TMR0'是一個8位計數器,所以它只能上升到256.那麼溢出前256 * 51,2us的最大週期是多少? –

+0

沒錯。 如在[數據表]表示(http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf) Timer0模塊是與所述 以下功能的8位定時器/計數器: • 8位定時器/計數器寄存器(TMR0) •8位預分頻器 這意味着您的計算是正確的,您必須爲TMR0和預分頻器選擇值,然後在ISR中實現自己的代碼。 –

1

在規格表(http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf)第76頁,我們看到,該微控制器上可用的定時器1是16位,並且擁有高達8預分頻器展望。我自己的做法是用8. prescaller使用定時器1,而無需手動播種的價值,這給:

<osc speed>/(4*<prescaller>*2^16) 
5MHz/(4*8*2^16) = 2.38Hz 

爲了得到準確4Hz的,你可以在種子每翻轉計數器的值:

2^16-<osc speed>/(<desired speed>*4*<prescaller>) 
2^16-5MHz/(4Hz*4*8) = 26474