Re: 中斷時間怎麼算??
|
||||
---|---|---|---|---|
新會員
|
感謝各位大大的指導~原來小弟一直搞錯了 ~ 也謝謝您們即時回覆~再次感謝 !!
發表於: 2009/2/11 18:33
|
|||
|
Re: 中斷時間怎麼算??
|
||||
---|---|---|---|---|
資深會員
|
你現在外部採用 32768 hz
週期=1/頻率=1/32768 所以表示TIMER1 累加32768次則為1秒中斷一次 他累加16384 表示 0.5秒(500ms)中斷一次
發表於: 2009/2/11 16:15
|
|||
|
Re: 中斷時間怎麼算??
|
||||
---|---|---|---|---|
新會員
|
yiming ~ 您好 我剛剛看了外部它是使用 32.768KHz,以您所說的~ 它的指令為 0.122ms
所以中斷時間為 16384*0.122ms = 1998.848ms 但它要 500ms 中斷~ 這樣不就差很多了 請大大再為小弟解說 ~ 感謝
發表於: 2009/2/11 14:11
|
|||
|
Re: 中斷時間怎麼算??
|
||||
---|---|---|---|---|
資深會員
|
T1_SOURCE_EXT ;使用外部振震器
假設外部振震器 4MHz 則1個指令週基時間為1us T1_PS_1_1 前除器 1:1 #define TMR1_VAL 65536-16384 則 16384us 中斷一次
發表於: 2009/2/11 8:19
|
|||
|
中斷時間怎麼算??
|
||||
---|---|---|---|---|
新會員
|
使用APP025 ~ 想請問各位大大 ~ TMR1_VAL 65536-16384 這是怎麼算的?? 請詳細說明 ~ 謝謝
#include <p18f4520.h> //納入微控制器定義檔 #include <timers.h> //納入計時器函式庫定義檔 // 結構位元定義 #pragma config OSC=HS, BOREN=OFF, BORV = 2, PWRT=ON, WDT=OFF, LVP=OFF #define TMR1_VAL 65536-16384 // Timer1 設定為 500ms 中斷一次 //宣告函式原型 void Init_TMR1(void); void timer1_isr (void); //宣告並安排中斷執行程式記憶體位置 #pragma code low_vector=0x18 void low_interrupt (void) { _asm GOTO timer1_isr _endasm } #pragma code #pragma interruptlow timer1_isr void timer1_isr (void) { PIR1bits.TMR1IF = 0; // 清除中斷旗標 WriteTimer1(TMR1_VAL); // 當將計數器觸發次數歸零寫入預設值 PORTD++; // 遞加PORTD } void main (void) { PORTD = 0x00; // 將PORTD清除關閉LED TRISD = 0; // 將TRISD設為0,PORTD設定為輸出 Init_TMR1(); // 初始化設定Timer1函式 INTCONbits.PEIE = 1; // 開啟周邊中斷功能 INTCONbits.GIE = 1; // 開啟全域中斷控制 while (1); // 無窮迴圈 } void Init_TMR1 (void){ OpenTimer1( TIMER_INT_ON & // 使用C18編譯器timer函式庫 T1_16BIT_RW & // 初始化設定Timer1 T1_SOURCE_EXT & // 並開啟TIMER1中斷功能(PIE1bits.TMR1IE=1) T1_PS_1_1 & T1_OSC1EN_ON & T1_SYNC_EXT_ON ); WriteTimer1(TMR1_VAL); // 寫入預設值 PIR1bits.TMR1IF = 0; // 清除中斷旗標 }
發表於: 2009/2/10 22:56
|
|||
|