Hola amigos del foro..
Quiero interrumpir un programa mediante un cambio de estado en RB7, para lo cual configuro esta línea del micro como entrada.
Pero cuando hago un cambio de estado en RB7, el programa entra en la interrupción y se queda ahí en un bucle infinito. Es decir, llega a RETFIE, y en vez de volver al programa, regresa a ORG 4.
Reduje el programa todo lo posible para no causar dolores de cabeza y alguien pueda detectar la falla que tanto busco.
Tal vez a alguien ya le pasó. Saludos
; ZONA DE CÓDIGOS ********************************************************************
ORG 0 ; El programa comienza en la dirección 0.
goto Inicio
ORG 4
goto Decrementar
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
movlw b'00010000' ; 1 en el bit 5 de W
movwf TRISA ; RA4: ENTRADA
clrf TRISB ; RB0-RB6: SALIDAS
bsf TRISB,7 ; RB7: ENTRADA
movlw b'10001000' ;
movwf INTCON
movlw b'11101000' ; Configuracion del modulo TMR0
movwf OPTION_REG
bcf STATUS,RP0 ; Acceso al Banco 0.
goto Inicio
;***INTERRUPCION***
Decrementar
nop ; Para ejemplificar nomás
bcf INTCON,RBIF ; Esto realmente no sirve de nada, debería poner a 0 RBIF pero no lo hace
RETFIE
END ; Fin del programaEliminé todo el bulto del programa que es mucho más largo, dejando solo esto para que se vea fácil el error..
Otro dato interesante es que NO puedo resetear ningún flag en la interrupción (y este es el motivo por el que no sale, ya que RBIF, flag de interrupcion por cambio de estado en RB3-RB7, se mantiene en 1). La única forma en que sale del programa es con "return", pero no me sirve porque no se resetean los flags.
Si quieren saber para que necesito esta interrupción les explico. Hice un contador de 3 displays, el cual manejo con un PIC16F84A y ningún CI más.
Mediante pulsos bajos en RA4/TOCKI incremento el contador.
Mediante un cambio de estado en RB7 (el único pin sobrante del PORT B) interrumpo el programa y descuento el contador.. He aquí el problema, cuando interrumpo
se queda ahí dando vueltas en la interrupción y no sale.
Les comento que ya armé en protoboard este trabajo y funciona perfecto, excepto que no puedo hacer que descienda el contador, únicamente resetearlo.
Dejo también una simulación completa en PROTEUS con el .hex por si alguien quiere hechar un vistazo
Simulación en PROTEUS - Contador de 3 dígitos https://www.dropbox.com/s/qzyab366210x346/Display7S_Completo.zipDisculpen si es algo tonto, ya fui "al Ingeniero" y traté mucho por mi cuenta también sin encontrar solución

Agradezco mucho su ayuda.
PD: Si alguien quiere este programa, lo comparto completo.