Duda sobre rutina de interrupción

#1
quería si veian algo extraño en la rutina de interrupcion de este codigo, porque lo corro en frio en el debugger del mplab ide, y la parte de la interrupcion se vuelve loco, la primera vez que entra debe ser por un pulso de RB1 y lo hace todo bien, despues a la terminar la rutina de interrupcion, vuelve a entrar :confused: y no deberia ser asi, se supone que deberia volver a la rutina normal del codigo ..

Código:
;CONFIGURACION DEL LCD
DEFINE LCD_DREG PORTD 
DEFINE LCD_BITS 4 
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTC 
DEFINE LCD_RSBIT 0 
DEFINE LCD_EREG PORTC 
DEFINE LCD_EBIT 1 
X VAR BYTE
CONT VAR BYTE
A var byte
;CONFIGURACIONES DE LOS PUERTOS E/S
TRISB = %00000001  
TRISD = 0
TRISC = 0
;HABILITO LAS INTERRUPCIONES, POR RB0 Y POR TMR0
INTCON = %10110000
on interrupt goto INTERRUPCION
Symbol INTF = INTCON.1
SYMBOL TMR0IF = INTCON.2
SYMBOL TOCS = OPTION_REG.5
SYMBOL INTEDG = OPTION_REG.6

;CONFIGURACION PARA CONVERSOR A/D
ADCON0 = %11000001
ADCON1 = %00001110
;RUTINA DEL LCD
lcdout $fe,1
BUCLE:
adcin 0, A

LCDOUT $fe,2,"Disparo a "
lcdout $fe,$c0, "  ", dec a, "  "

goto BUCLE

;RUTINA DE INTERRUPCION
INTERRUPCION:
disable
if INTF = 1 THEN INT_EXT
IF TMR0IF = 1 THEN INT_TIMER
;INTERRUPCION POR TEMPORIZADO
INT_TIMER:
TMR0IF = 0
IF PORTB.1 = 1 THEN 
TOCS = 1
PORTB.1 = 0 
endif
IF x-1=0 THEN PORTB.1 = 1
TMR0 = 178
GOTO SALIDA_INT
;INTERRUPCION POR CRUCE POR CERO
INT_EXT:
INTF = 0
TMR0 = 190
SELECT CASE INTEDG
CASE 0
INTEDG = 1
CASE 1
INTEDG = 0
END SELECT
TOCS = 0
X = CONT
;FIN DE LA RUTINA DE INTERRUPCION
SALIDA_INT:
ENABLE
RESUME
END
 
Última edición por un moderador:
#2
prueba cambiar el:

ENABLE
RESUME

por:

RESUME
ENABLE

esta invertido
 
Última edición:
#3
Tenes que limpiar la bandera de la interrupción, fijate cual es la bandera y tenes que ponerla a cero, ya que cuando ocurre la interrupción la bandera de RBx se pone en "1", y para que no vuelva a entrar a la interrupción debe borrarse dicha bandera dentro de la misma interrupción.
 
#4
Tenes que limpiar la bandera de la interrupción, fijate cual es la bandera y tenes que ponerla a cero, ya que cuando ocurre la interrupción la bandera de RBx se pone en "1", y para que no vuelva a entrar a la interrupción debe borrarse dicha bandera dentro de la misma interrupción.
pense lo mismo pero si la esta borrando XD

con:
Symbol INTF = INTCON.1

Y

INT_EXT:
INTF = 0
 
#5
ya lo arregle el compañero tenia razon, verifique el bit GIE del INTCON y cuando pasaba por enable no se encendia no se donde fue que lei que cuando pasa por ENABLE este se activa automaticamente.. pero era eso
 

Temas similares

Arriba