關於石英震盪器的問題
|
||||
---|---|---|---|---|
初級會員
|
各位
再次麻煩大家一下 我現在用的是 EVM APP001 Rev. 2 用的是 PIC18F4480 的晶片 我現在用 TIMER2 想要讓他中斷,每中斷一次,我其中一隻腳會反向 (1-->0 或 0-->1) 我已經設好 PR2 的值 不過,如果我想要讓他每一次 clock 的時間(PR2=1),讓他反向,他時間就不對,都會停在 10uS 左右,不管我讓他多短。現在用的石英震盪器是 16Mhz,他應該還會經過 Fosc/4 所以應該是 4 Mhz,可是理論上一個 clock 時間是0.25uS。我不知道是不是有什麼硬體上面的限制嗎? 還是為什麼沒有辦法讓他比 10uS 還要小 以下是我的程式碼 #pragma config BOREN=OFF, BORV = 2, PWRT=ON, WDT=OFF, LVP=OFF #pragma config OSC = HS //宣告函式原型 void Init_TMR2(void); void timer2_isr (void); //宣告並安排中斷執行程式記憶體位置 #pragma code low_vector=0x18 void low_interrupt (void) { _asm GOTO timer2_isr _endasm } #pragma code #pragma interruptlow timer2_isr int i; void timer2_isr (void) { PIR1bits.TMR2IF = 0; PORTD=PORTD^0xff; PORTC=PORTC^0xff; } void main (void) { PORTD = 0x00; TRISD = 0; PORTC = 0x00; TRISC = 0; PR2 = 40; Init_TMR2(); INTCONbits.PEIE = 1; // 開啟周邊中斷功能 INTCONbits.GIE = 1; // 開啟全域中斷控制 while (1); } void Init_TMR2 (void){ OpenTimer2(T2_POST_1_1 & T2_PS_1_1); PIE1bits.TMR2IE=1; PIR1bits.TMR2IF = 0; // 清除中斷旗標 } 有沒有什麼解決方法? 謝謝
發表於: 2007/12/23 18:39
|
|||
|