:::


Browsing this Thread:   1 Anonymous Users






PIC16F1823 計時器設定問題
#1
中級會員
中級會員


查看用戶資訊
HI 各位前輩好:
我用PIC16F1823的內部震盪想做一個0.1ms中斷一次的計時器。
但是功能一直有問題,以下是我程式中TMR2的相關設定。

目前的問題是我寫入TMR2的數值好像都沒有影響到中斷的速度,
原本預計是TMR2=0xE6,到PR2的0xFF 只有25個數 25/250K = 0.1ms
但是量測出來的數值都是1ms才發生中斷,猜測是8bit跑好跑滿了 255/250K = 1ms
我key的TMR2的數值好像都不影響結果。這是哪裡出問題呢?


void interrupt ISR(void)
{
if(TMR2IE && TMR2IF)
{
TMR2IF=0;
CTER1++;
CTER2++;
TMR2 = 0xE6; //Reset計時器 0x7C=230
}
}

int main(void)
{
OSCCON=0xFF; //16MHZ
InitTMR2();
GIE = 1;//允許所有中斷
PEIE = 1;//允許所有外設中斷
}


void InitTMR2(void)
{
T2CON = 0x7C; //後分比1:16 //啟動TMR2計時 4M/16=250k
TMR2 = 0xE6; //Reset計時器 0xE6=230
PIE1bits.TMR2IE = 1; //25/250k = 0.1ms發生中斷
PIR1bits.TMR2IF = 0;
}

發表於: 2018/4/9 14:40
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC16F1823 計時器設定問題
#2
版主
版主


查看用戶資訊
void interrupt ISR(void)
{
if(TMR2IE && TMR2IF)
{
TMR2IF=0;
CTER1++;
CTER2++;
TMR2 = 0xE6; //Reset計時器 0x7C=230}
}

Timer2 是屬於比較行的計時器,一旦設定好了 PR2 後在中斷發生時會自動歸零重新計數。所以不要在中斷裡重設時間,因為你一重設同樣的時間,一離開中斷又產生比較吻合,中斷又在發生了。拿掉紅色的那一行。

Attach file:



jpg  (0.00 KB)


發表於: 2018/4/9 15:37
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
You cannot start a new topic.
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]