會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





PIC16F1823 計時器設定問題
中級會員
註冊日期:
2016/05/03 21:00
所屬群組:
註冊會員
文章: 41
等級: 5; EXP: 19
HP : 0 / 104
MP : 13 / 799
離線
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;
}

4月09日 14:40:27
轉換PDF檔 列印


Re: PIC16F1823 計時器設定問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14560
等級: 73; EXP: 15
HP : 1082 / 1803
MP : 4853 / 77047
離線
void interrupt ISR(void)
{
if(TMR2IE && TMR2IF)
{
TMR2IF=0;
CTER1++;
CTER2++;
TMR2 = 0xE6; //Reset計時器 0x7C=230}
}

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

附加檔案:



jpg  擷取.JPG (40.42 KB)
16_5acb18405260d.jpg 928X399 px

4月09日 15:37:36
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2019 Winter Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project