RB2/INT2に繋がっているスイッチを押すと割り込みが発生。
割り込みでRC1のLEDを点滅させる
/*
概要:外部割込みINT2を使ってみる
HID - Bootloaderを使った書き込み
マイコン:PIC18F2550
ファイル名:nain.c
開発環境:MPLAB C18
*/
#include <p18f2550.h>
#include <delays.h>
#include <portb.h>
void high_isr (void);
void low_isr (void);
// リセットベクタ
#pragma code reset_vector=0x1000
extern void _startup(void);
void remapped_reset(void) {
_asm goto
_startup
_endasm
}
#pragma code
// 高優先割込み関連の記述 ====
#pragma code high_vector=0x1008
void high_interrupt (void) {
_asm
GOTO high_isr
_endasm
}
#pragma code
#pragma interrupt high_isr
void high_isr (void) {
/* ここに高優先割込み処理を記述する */
INTCON3bits.INT2IE = 0; //外部割込みINT2の禁止
INTCONbits.PEIE = 0; //低位割込み禁止
INTCONbits.GIE = 0; //全割込み禁止
INTCON3bits.INT2IF = 0; // INT2の割込みフラグをリセット
LATCbits.LATC1 = !LATCbits.LATC1;//RC1のLED点滅点<->灯点滅
INTCON3bits.INT2IE = 1; //外部割込みINT2の許可
INTCONbits.PEIE = 1; //低位割込み許可
INTCONbits.GIE = 1; //全割込み許可
}
// 低優先割込み関連の記述 ====
#pragma code low_vector=0x1018
void low_interrupt (void) {
_asm
GOTO low_isr
_endasm
}
#pragma code
#pragma interruptlow low_isr
void low_isr (void) {
/* ここに低優先割込み処理を記述する */
}
void main(void) {
TRISB = 0b00000100; // B portのRB2を入力モードに その他を出力モードに設定
TRISC=0; // ポートCをすべて出力ピンにする
OpenRB2INT(PORTB_CHANGE_INT_ON & //ポートRB2の外部割込みON
FALLING_EDGE_INT & //立下りエッジでON
PORTB_PULLUPS_OFF //Bポートの抵抗プルアップOFF
);
RCONbits.IPEN = 1; //割込み優先順位制御ON (0:優先順位制御OFF)
INTCON3bits.INT2IP = 1; //INT2の割り込みを高位割込みにセット(0:低位割込み)
INTCON3bits.INT2IE= 1; //INT2割込みの許可
INTCONbits.PEIE = 1; //低位割込み許可
INTCONbits.GIE = 1; //全割込み許可
LATCbits.LATC1 = 1; //電源投入でRC1のLED消灯
while(1)
{ //通常の処理
PORTCbits.RC0=1; //RC0ポートのLED点滅
Delay10KTCYx(0); //0=>256 48MHzで213.3 ms
PORTCbits.RC0=0;
Delay10KTCYx(0);
}
}

0 件のコメント:
コメントを投稿