Hola a todos, estoy utilizando un PIC18f4680, lo que pasa es que tengo un problema con una interrupcion. No se muy bien que es lo que le pasa pero se traba al entrar a la rutina de interrupcion. Ya no regresa al codigo ni nada.
Este es el codigo:
LIST P=18F4680, F=INHX32 ;directive to define processor
#include <P18F4680.INC> ;processor specific variable definitions
org 0x800 ;reset vector
goto Main
org 0x808
goto ISR
Main:
bsf RCON,7 ;Enable priority interrupts
bcf INTCON,RBIF ;RBIF limpiar bandera
bsf INTCON,RBIE ;RBIE enables PORTB interrupt
bsf INTCON,7 ;Activador General de Interrupciones
inicio
bsf PORTA,0
btfsc PORTB,3
goto inicio
setf PORTA
goto supci
supci
movf 0x40,W ;0x40=1
decfsz 0x50,F
goto cicloA
bcf INTCON,0 ;apago bandera de interrupcion
goto fin
cicloA
btg PORTA,0
movlw 0x0B
movwf TMR0H
movlw 0xDC
movwf TMR0L
cicloB
btfss INTCON,2
goto cicloB
bcf INTCON,2
goto supci
ISR
btfsc INTCON,0
retfie
bcf PORTA, 1
clrf WREG
movf 0x40,W ;W=1
addwf 0x43,F ;0x43=1+0x43
movf 0x43,W ;W=valor en 0x43
cpfseq 0x49 ;lo comparas con un 2, si no, se regresa a cicloPrin
retfie
movlw 0x01 ;W=1
addwf 0x45,F ;0x45=1+0x45
movf 0x41,W
addwf 0x49,F
retfie
END
Yo se que le faltan muchas cosas, pero solo puse lo de la interrupcion aqui.
Todo lo que hace el codigo es que esta esperando a que presione un boton, ya que esta presionado se va al timer de 1 segundo y lo cuenta cuantas veces le pongo que cuente en el registro 0x50.
Pero a la vez quiero que la interrupcion sirva para contar las veces que uno de los switches <RB7:RB4> es oprimido.