/************************************************************* * PinChange_Int_TEST.c(ピンチェンジ割込みテスト) * * PIC18F14K50 * Vdd= 5.0Vで使用 * * 書込み器: PICkit2使用 * 2015/3/2 N.Ishii ***************************************************************/ #include #pragma config FOSC = IRC, PLLEN = ON, FCMEN = OFF #pragma config IESO = OFF, USBDIV = OFF, CPUDIV = NOCLKDIV #pragma config PWRTEN = OFF, BOREN = OFF, WDTEN = OFF #pragma config HFOFST = OFF, MCLRE = OFF #pragma config STVREN = ON, BBSIZ = OFF, LVP = OFF #pragma config XINST = OFF #pragma config CP0 = OFF, CP1 = OFF, CPB = OFF #pragma config WRT0 = OFF, WRT1 = OFF, WRTB = OFF, WRTC = OFF #pragma config EBTR0 = OFF, EBTR1 = OFF, EBTRB = OFF #define LED LATCbits.LATC2 #define SW2 PORTBbits.RB7 #define SW3 PORTBbits.RB6 //-------------------------------------------------------------------------------------- /// 割込み宣言(優先順位を使わない、1レベル高位割込み) #pragma interrupt isr /// 割込みベクタへジャンプ命令セット #pragma code isrcode = 0x0008 // 割込みベクタ宣言 void isr_direct(void) { _asm goto isr _endasm } #pragma code /// 割込み処理関数(状態変化割込み) void isr(void) { if(INTCONbits.RABIF) { // 割込み発生? if(!SW2) LED= 1; // SW2が押されSW2ポートが、Loだったら、LED点灯 if(!SW3) LED= 0; // SW3が押されSW3ポートが、Loだったら、LED消灯 } INTCONbits.RABIF = 0; } /// システム初期化関数 void init(void) { OSCCON= 0b01100110; // 内蔵発振器8MHzを設定 UCONbits.USBEN = 0 ; // USBは使用しない /// この実験では、RE未使用なので、アナログ入力と併用の、RB4,5に該当する /// ANSELxビットを'0'にリセットする必要はないが、汎用的な意味でやっておく。 ANSELHbits.ANS10 = 0; // RB4 digital input ANSELHbits.ANS11 = 0; // RB5 digital input TRISC= 0; // RC is Output TRISB= 0b11110000; // RB4-7 is Input LED= 0; // LED 消灯 /// 内部プルアップ設定 INTCON2bits.RABPU = 0; // プルアップ許可(これが無いとプルアップされない) WPUB = 0b11110000; // RB4-7 is Pull-Up //// 割込み関連の初期化 /// RB6(SW3)とRB7(SW2)を状態割込みで使うことを許可する。 IOCBbits.IOCB6= 1; IOCBbits.IOCB7= 1; INTCONbits.RABIE = 1; // これで初めて、IOCBビット=1に設定したピンの状態割込みが許可される。 /// 全体の割込みの許可 INTCONbits.GIE=1; // 割り込みをイネーブルにする } void main(void) { init(); while(1) { ; } }