[英]PIC16F883 timer won't work
我目前正在使用3.2768 MHz振盪器編程PIC16F883 。 我需要在正確的時間點亮一些LED ,但這在這里確實無關緊要。
問題是已經設置了Timer0,但它無法正常工作。 我將在這里發布我的代碼和初始化,以便你可以看到:)。 順便說一下,我在MpLap IDE中進行編程,使用Hi-Tech C編譯器進行正常的C編程。
初始化:
T0CS = 0x00; //Set Timer0 to Timer-Mode
GIE = 0x01; //Enable all interrupts
PSA = 0x00; //Prescaler enable
PS0 = 0x01; //Prescaler set
PS1 = 0x00; //Prescaler set
PS2 = 0x01; //Prescaler set
中斷服務程序本身:
void interrupt timer()
{
T0IF = 0x00; //Reset timer
millicounter++; //Add one to the helper variable
PORTA = 0x00;
if (millicounter == 25) //Check if one second has passed.
{
millicounter = 0; //Reset helper variable
seconds++; //Add one to elapsed seconds.
}
}
問題是它看起來不像計時器正在運行。 我現在已經使用不同的設置模擬了程序,最新的是在中斷運行時使引腳打開,然后在主中再次打開。 問題是它永遠不會發生。 我認為計時器沒有運行。 為什么?
您已設置全局中斷使能位。 但是要使定時器中斷起作用,還需要設置定時器中斷使能位(T0IE)。
根據您的定時器寄存器值和晶體頻率,“秒”變量將每秒增加256次。 即,如果您使用此“秒”變量來提供閃爍延遲,則您的LED開啟時間約為3.9毫秒。 人眼無法檢測到這種快速閃爍。
謝謝你的幫助,我讓計時器正常工作。 我刪除了我的整個配置並重新計算了計時器,現在它工作正常。 我確實有另一個問題,我已經寫了一篇新文章:)如果你想要,請查看它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.