***************************************************************************** ; PORTB,4-7 端子の変化による割込みです ; ノイズに影響に注意を要します 21.01.27 ***************************************************************************** ;----- 割込条件の設定 ---------------------------------------------------- ORG 4 GOTO PUSHU ;割込プログラムのスタート番地 W_TEMP EQU H'20' ;W レジスタの退避先 STATUS_TEMP EQU H'21' ;STATUS レジスタの退避先 ;----- PORTB SET --------------------------------------------------------- BCF STATUS,RP1 ;BANK 0:1 を選択 BSF STATUS,RP0 ;BANK 1 を選択 MOVLW B'1111****' ;PORTB,4-7 を入力にします :**** 各目的に合わせます MOVWF TRISB :PORTB をセットします BCF STATUS,RP0 ;BANK 0 に戻します ;----- 割込設定 ---------------------------------------------------------- CLRF INTCON ;INTCON のクリア BSF INTCON,RBIE ;RB4-7 割込の許可 BCF INTCON,RBIF ;RBIF 割込発生フラグのクリア BSF INTCON,GIE ;全割込の許可 ;----- 割込プログラム ---------------------------------------------------- PUSHU MOVWF W_TEMP ;レジスタ類の退避 SWAPF STATUS,W BCF STATUS,RP0 MOVWF STATUS_TEMP BTFSS INTCON,RBIF GOTO POP ;RB4-7 割込では無い ; ここに目的のプログラムが入ります BCF INTCON,RBIF ;割込発生フラグのクリア POP BCF STATUS,RP0 ;レジスタ類の復帰 SWAPF STATUS_TEMP,W MOVWF STATUS SWAPF W_TEMP,SELF SWAPF W_TEMP,W RETFIE ;割込みを許可したリターン ;************************************************************************** ; 補足事項です ;************************************************************************** 注0 必要ならば FSR,PCH 等の退避及び復帰も行います 注1 入力設定されている端子のみ割込み機能が利用出来ます 注2 割込の発生は最後に読み込んだ値(レベル)と比較し決定されますので 割込みの必要になる直前に一度空読み等やっておくと良いでしょう 注3 ノイズの影響により誤動作の危険がある場合は「入力フイルター」 を付けた方が良いと思いますが、波形の鈍りに気をつける必要があります 注4 割込の許可の前にフラグをクリアしておきます 割込のプログラムは出来るだけ短くします ;**************************************************************************