Banner publicitario de PCBWay

Duda sobre rutina de interrupción

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:
prueba cambiar el:

ENABLE
RESUME

por:

RESUME
ENABLE

esta invertido
 
Última edición:
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.
 
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
 
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
 
Atrás
Arriba