***************************************************************************** ; PORTB,0 端子の立ち上がり入力又は下がりによる割込みです ; ノイズに影響され易いので注意を要します 21.01.27 ***************************************************************************** ;----- 割込条件の設定 ---------------------------------------------------- ORG 4 GOTO PUSHU ;割込プログラムのスタート番地 W_TEMP EQU H'20' ;W レジスタの退避先 STATUS_TEMP EQU H'21' ;STATUS レジスタの退避先 ;----- OPTION_REG SET ---------------------------------------------------- BCF STATUS,RP1 ;BANK 0:1 を選択 BSF STATUS,RP0 ;BANK 1 を選択 BSF TRISB,0 ;PORTB,0 を入力にします MOVLW B'PH******' ;P PORTBのプルアップ 1:未使用 0:使用 ;H 1:立上り 0:立下り ;*** TMR0,WDT にて使用 ;何れも未使用の時は全て 0 にて可 MOVWF OPTION_REG BCF STATUS,RP0 ;BANK 0 に戻します ;----- 割込設定 ---------------------------------------------------------- CLRF INTCON ;INTCON のクリア BSF INTCON,INTE ;RB0 割込の許可 BCF INTCON,INTF ;INTF 割込発生フラグのクリア BSF INTCON,GIE ;全割込の許可 ;----- 割込プログラム ---------------------------------------------------- PUSHU MOVWF W_TEMP ;レジスタ類の退避 SWAPF STATUS,W BCF STATUS,RP0 MOVWF STATUS_TEMP BTFSS INTCON,INTF GOTO POP ;RB0 割込では無い ; ここに目的のプログラムが入ります BCF INTCON,INTF ;割込発生フラグのクリア POP BCF STATUS,RP0 ;レジスタ類の復帰 SWAPF STATUS_TEMP,W MOVWF STATUS SWAPF W_TEMP,SELF SWAPF W_TEMP,W RETFIE ;割込みを許可したリターン ;************************************************************************** ; 補足事項です ;************************************************************************** 注0 必要ならば FSR,PCH 等の退避及び復帰も行います 注1 ノイズの影響により誤動作の危険がある場合は「入力フイルター」 を付けた方が良いと考えます スレッショルド入力なので波形の鈍りはそんなに気にしなくても良いと 思いますが 注2 割込の許可の前にフラグをクリアしておきます 割込のプログラムは出来るだけ短くします ;**************************************************************************