(1) /MCLR リセットスイッチ で PICマイコンを再スタート
(2) タイマ割り込みでキースキャン
(3) 外部割込みピンを使う
等の方法があります
PIC16F648A にて RBO/INT 外部割込みピン テスト
RB0/INT ピンにスイッチを接続 内蔵プルアップ ( SW_ON LOW )
RB4-7 に LEDを接続して 0-15カウント表示 HIGH 点灯
#include <xc.h>
#pragma config WDTE=OFF , PWRTE=OFF , CP=OFF , BOREN=OFF , LVP=OFF , MCLRE=ON
#pragma config CPD=OFF , FOSC=INTOSCIO
#define _XTAL_FREQ 4000000
void main(void){
CMCON=0x07;
TRISB = 0x0F; // RB0-3: INPUT RB4-7: OUTPUT
PORTB = 0;
OPTION_REGbits.nRBPU = 0; // PORTB pull-ups are enabled by individual port latch values
OPTION_REGbits.INTEDG = 0; // Interrupt on falling edge of RB0/INT pin
INTCONbits.INTF = 0;
while(1){
if ( INTF == 1 ){
PORTB &= 0x0F; // PORTB counter clear
__delay_ms(10);
while( RB0 == 0 ){ __delay_ms(10); } // sw が off になるまで待つ
INTF = 0;
} // if
__delay_ms(1000); // 1s wait
if ( PORTB < 0xF0 ){ PORTB += 0x10; } // PORTB count up
} // while
}