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
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: