// // 割り込み処理が起こると共通でこの関数が呼び出されます // ちなみに isr は Interrupt Service Routine の略です // #include "setting.h" // main.c で定義されている外部変数は extern しないと // このソース内で使えませんので注意して下さい // (例) extern int count; extern int ? ; #if __XC8_VERSION < 2000 void interrupt isr(void) #else void __interrupt () isr(void) #endif { INTCONbits.GIE = 0; // 割り込み処理中に再度割り込みがかからないようにします // この割り込み関数は全ての割り込み処理で共通なので // 立っている割り込みフラグを見てどの割り込みが生じたか判断します // INT 割り込みフラグが立っているときは INT 割り込みを処理します if( INTCONbits.INTF == ? ){ // チャタリング防止策として delay を入れます // 物理的なスイッチを INT ピンに接続する場合はチャタリング防止策が必要です // delay の数値は環境に応じて適宜調整してください __delay_ms(50); // チャタリングが収まってもスイッチが押されたままだったら変数 count の値を増やします if (RB0 == 0) { ? ; } // INT 割り込みフラグは自動ではリセットされないので手動でリセットします INTCONbits.INTF = ? ; } INTCONbits.GIE = 1; // 割り込み処理が終わったので再び割り込みを許可します }