ORG 00H
goto INI
ORG 04H
BTFSC INTCON,1
CALL INTER
BCF INTCON,1
;BSF INTCON,7 no hace falta si usas el retfie
BANCO0
RETFIE
INTER BANCO0
;BCF INTCON,7 no hace falta xq al ingresar a la rutina de interr. se desactiva automaticamente INTCON,GIE(7)
MOVWF ACUM
MOVF STATUS,0
MOVWF STAT
incf EMERGENCIA,F
;CALL DELAYCITO ???
CONTIN
MOVF STAT,W
MOVWF STATUS
SWAPF ACUM,F
SWAPF ACUM,W
return
INI
clrf EMERGENCIA
MainLoop
btfsc EMERGENCIA,0
goto $-1 ;actualmente en emergencia. No hacer nada. Pausa.
FuncNormal
....
goto MainLoop
No se si lo que queres es algo asi...esto seria fuera de la interr.
Lo de desviar el codigo inmediatamente una vez producida la interr, no es posible en las familias 12F y 16F ya que no permiten acceder al STACK(pila) para modificarla a gusto. Si haces el algoritmo de FuncNormal corto, el refresco con el cual se verificara el estado de la emergencia sera mas breve(mejor).
ORG 04H
BTFSC INTCON,1
CALL INTER
;BSF INTCON,7 no hace falta si usas el retfie
RETFIE
INTER BCF INTCON,1
MOVWF ACUM
MOVF STATUS,0
MOVWF STAT
BTFSS INTCON,1
goto $-1 ;esperar hasta que se vuelva a producir la interr.
BCF INTCON,1
CONTIN
MOVF STAT,W
MOVWF STATUS
SWAPF ACUM,F
SWAPF ACUM,W
return
Y eso seria dentro de la misma rutina de interrupcion. ese programa detiene inmediatamente el procesamiento en cuanto cambia el estado de RB0 y lo mantiene asi, pausado hasta que RB0 vuelve a cambiar de estado.
Esto es todo a ojo. Por ahi no este perfecto, pero bue! lo miramos si hay algo que falla.
Saludos.