Re: 關於16FXX的外部中斷INT問題
|
||||
---|---|---|---|---|
新會員
|
Ryang兄
依照datasheet的資料,OPTION開機後的預設值應該全部為1,而當INTEDG是1的時候應該是rising edge不是嗎? 而且重點是現在不管INTEGD是0或1,都是在rising edge產生中斷 詭異的是有一個例外,我將ISR改寫為: isr(void) // Here be interrupt function - the name is unimportant. { if(INTF){ INTF = 0; RA3 = !RA3; OPTION ^= 0x40; } } 也就是在INT中斷產生時,把INTEDG反相,那麼在falling edge就會產生中斷,用來debug用的IO port輸出波形就會變成跟信號產生器的波形變成一樣(也就是rising和falling都會中斷) 除此之外我就是沒辦法單獨讓他falling edge產生中斷
發表於: 2009/3/12 11:05
|
|||
|
關於16FXX的外部中斷INT問題
|
||||
---|---|---|---|---|
新會員
|
我現在是用16F73且使用PICC compiler
要用INT功能,且需要falling edge中斷 不過奇怪的是不管我INTEDG這個bit怎麼設定,或是直接設定OPTION,都是在上升緣產生中斷 我的試驗方法是用信號產生器給INT一個clock,在ISR中將另一隻IO腳反相,然後用示波器同時觀察兩個信號,結果發現那隻IO腳只有在當信號產生器的clock上升緣變化 不知道有沒有人欲過這種情形! 程式如下: #include <htc.h> #include <stdio.h> void init(void); void main(void) { init(); RA3 = 0; while(1); } void init(void) { OPTION = 0x03; INTCON = 0x00; PIR1 = 0x00; PIE1 = 0x00; /*setting I/O port direction 0:output 1:input*/ TRISB = 0x01; TRISA = 0x00; TRISC = 0xbf; PORTA = 0xff; PORTC = 0xff; PORTB = 0x01; ADCON1 = 0x07; /*setting INT*/ INTE = 1; INTF = 0; /*enable all interrupt*/ PEIE = 1; GIE = 1; } static void interrupt isr(void) // Here be interrupt function - the name is unimportant. { if(INTF){ INTF = 0; RA3 = !RA3; } }
發表於: 2009/3/11 16:17
|
|||
|