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 件のコメント:
コメントを投稿