PIC18F2550の外部入力割込みについて
PIC18F2550で外部入力割り込みがちゃんと入るかどうかをチェックするため非常に簡単なサンプルコードを書いてみたのですが、mainの処理を行うだけで割り込みが発生しないのでどなたかご助力お願いします。(コンパイラ : MPLAB C18)
以前ほぼ同様の質問を掲載しましたが、解決につながる回答が得られませんでした↓
長い間解決出来ず困り果てているので、有益な回答をいただけると幸いです。
mainのwhileループではLEDを点滅させ、スイッチを押せばINT2ピンに0Vが入力され、割り込みでLEDを点灯し続けるという主旨で以下のコードを書きこんで動作させました。
#include <p18f2550.h>
#include <delays.h>
#pragma config FOSC = INTOSCIO_EC, FCMEN = ON, IESO = OFF
#pragma config PWRT = OFF, BOR = OFF, VREGEN = OFF
#pragma config WDT = OFF, CCP2MX = OFF
#pragma config PBADEN = ON, LPT1OSC = ON, MCLRE = OFF
#pragma config STVREN = ON, LVP = OFF, XINST = OFF
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF
#pragma config CPB = OFF, CPD = OFF, WRT0 = OFF, WRT1 = OFF
#pragma config WRT2 = OFF, WRT3 = OFF, WRTC = OFF
#pragma config WRTD = OFF, EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF
#pragma config EBTR3 = OFF, EBTRB = OFF
int i;
int j;
void high_isr(void);
// リセットベクタ
#pragma code reset_vector=0x1000
extern void _startup(void);
void remapped_reset(void) {
_asm goto
_startup
_endasm
}
#pragma code high_vector = 0x000008
void interrupt_high_vector(void)
{_asm GOTO high_isr _endasm}
#pragma code
#pragma interrupt high_isr
void high_isr(void) {
//外部入力割り込みの処理はここに記述
for(j=0; j<10; j++)
{
LATCbits.LATC1 = 1;
Delay10KTCYx(255);
}
INTCON3bits.INT2IF = 0;
}
void main()
{
OSCCON = 0b01111100; //システムクロックを8MHZに設定
TRISA = 0b01111111; //ポートAをすべて入力に設定
TRISB = 0b11111111; //ポートBをすべて入力に設定
TRISC = 0b00000000; //ポートCをすべて出力に設定
RCON = 0b10000100;
INTCON = 0b10010000;
INTCON2 = 0b10000000;
INTCON3 = 0b10011000; //INT2ピンの立下りエッジで割り込み処理に移行する
while(1)
{
LATCbits.LATC1 = 1;
Delay10KTCYx(255);
LATCbits.LATC1 = 0;
Delay10KTCYx(255);
}
}
スイッチ入力時に0VがINT2ピンに入力されていることは確認できたので、プログラムの方に問題があると思われます。
回答お待ちしております。
お礼
回答ありがとうございます。