Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

06/04/2014 #1


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 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
06/04/2014 #2

Avatar de papirrin

prueba cambiar el:

ENABLE
RESUME

por:

RESUME
ENABLE

esta invertido
06/04/2014 #3

Avatar de juanma2468

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.
06/04/2014 #4

Avatar de papirrin

juanma2468 dijo: Ver Mensaje
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
06/04/2014 #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
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.