Normalmente cuando se origina una peticion de interrupcion, se procede a ejecutar la rutina pertinente y finalmente se vuelve a la ejecucion del programa principal en el punto donde se habia quedado antes de la interrupcion mediante la utilizacion de la instruccion retfie.
El problema me surge cuando al producirce la interrupcion lo que quiero es que se quede
en una nueva rutina y permanezca en esta indefinidamente hasta que se produzca una nueva interrupcion. Pero si estoy en esta rutina y activo nuevamente las interrupciones devo de utilizar a la fuerza la instruccion retfie, con lo cual me abandona esta rutina y vuelve al punto interior.
He intentado activar las interrupciones poniendo a 1 el bit GIE del registro INTCON, pero no funciona correctamente.
He pensado solucionarlo de la siguiente forma (no se si sera la mas correcta o habra otras formas de hacerlo):
Activare el Watchdog, de modo que cuando se produzca la interrupcion ejecutare un bucle cerrado donde no refrescare el watchdog y transcurrido 18ms se provocara un reset.
Al inicio del programa leere que entrada esta activada (pulsador) y ejecutara la rutina que corresponda a dicha entrada. Creo que todo este proceso sera lo suficiente rapido como para leer el pulsador que acciono la interrupcion.
El problema me surge cuando al producirce la interrupcion lo que quiero es que se quede
en una nueva rutina y permanezca en esta indefinidamente hasta que se produzca una nueva interrupcion. Pero si estoy en esta rutina y activo nuevamente las interrupciones devo de utilizar a la fuerza la instruccion retfie, con lo cual me abandona esta rutina y vuelve al punto interior.
He intentado activar las interrupciones poniendo a 1 el bit GIE del registro INTCON, pero no funciona correctamente.
He pensado solucionarlo de la siguiente forma (no se si sera la mas correcta o habra otras formas de hacerlo):
Activare el Watchdog, de modo que cuando se produzca la interrupcion ejecutare un bucle cerrado donde no refrescare el watchdog y transcurrido 18ms se provocara un reset.
Al inicio del programa leere que entrada esta activada (pulsador) y ejecutara la rutina que corresponda a dicha entrada. Creo que todo este proceso sera lo suficiente rapido como para leer el pulsador que acciono la interrupcion.