Hola Cronico, por lo que veo, empleas mal la interrupcion, ya que al ocurrir una in terrupcion, el m icro salta a la posicion 04... es decir, te va al principio del programa... y finalmente atiende tu BTFS...
;
;-------------------------------------------------------------------
;- ISR -
;-------------------------------------------------------------------
;
ORG H"000"
goto Inicio
;
ORG H"004"
;
Interrupciones ;interrupciones
;
bcf INTCON,GIE ;Asegura la
btfsc INTCON,GIE ;deshabilitacion
goto Interrupciones ;global de las interrupciones
;
;Salva registros
;
movwf SALVAW ;Salva W
swapf STATUS,W ;Invierte STATUS --> W
movwf SALVASTATUS ;Salva STATU
;
;Selector
;
btfsc INTCON,T0IF ;? Hubo sobrefujo en TMR0 ?
goto T0 ;Si
btfsc INTCON,INTF ;? Hubo interrupcion en RB0 ?
goto In ;Si
btfsc INTCON,RBIF ;? Hubo algun cambio de RB4-RB7 ?
goto Rb ;Si
Ee
bsf STATUS,RP0 ;Banco 1
bcf EECON1,EEIF ;Pone a cero el indicador para poder salir de la ISR
bcf STATUS,RP0 ;Banco 0
goto RestaurarRegistros ;Retorna habilitando todas las interrupciones
T0 bcf INTCON,T0IF ;Pone a cero el indicador para poder salir de la ISR
goto RestaurarRegistros ;Retorna habilitando todas las interrupciones
In bcf INTCON,INTF ;Pone a cero el indicador para poder salir de la ISR
goto RestaurarRegistros ;Retorna habilitando todas las interrupciones
Rb bcf INTCON,RBIF ;Pone a cero el indicador para poder salir de la ISR
RestaurarRegistros
swapf SALVASTATUS,W ;Invierte STATUS --> W
movwf STATUS ;Restaura STATUS
swapf SALVAW,F ;Invierte --> F
swapf SALVAW,W ;Restaura W
retfie ;Retorna habilitando todas las interrupciones
uy uy uy que feo queda... te adjunto el asm ok
