Interrupciones PIC
Me llamo Rafa, aunque me puedes llamar File. Me está costando mucho
encontrar alguien que me responda a esta pregunta. He hecho una rutina de
interrupciones, para el PIC16F84, muy simple, para encender un LED cuando
presiono un pulsador y los pasos que he dado son los siguientes: Activo el bit de
flanco para que sea el nivel ascendente el que active la interrupción externa por
RB0, es decir el bit INTDEG del registro OPTION puesto a 1, eso en el banco 1,
luego en el banco 0 activo GIE, INTE del registro INTCON y pongo a 0 el bit INTF,
también de INTCON. A continuación entro en un bucle sin fin que espera a que se
produzca el cierre del pulsador, para que se active la interrupción que, cuando se
activa, se ejecuta el salto a la rutina de encendido del LED, desde el vector de
interrupción, la cual enciende el LED para, a continuación, hacer una pausa. Bien, el
problema es que no retorna de esa pausa para seguir con la rutina de encendido
que, apagaría el LED efectuaría otra pausa, pondría a 0 el señalizador de
interrupción INTF y retornaría con RETFIE al bucle sin fin, para volver
a empezar de nuevo. ¿Puede ser que el PIC tarde en poner GIE a nivel 0 lo
suficiente para que los rebotes eléctricos del pulsador provoquen varias
interrupciones, por lo que esta situación llenaría la pila, de direcciones de retorno
(Una por cada interrupción, ya sabes), ¿impidiendo el almacenamiento de la
dirección de retorno de una nueva llamada? Si no es así, entonces ¿qué esta
pasando en mi programa?
encontrar alguien que me responda a esta pregunta. He hecho una rutina de
interrupciones, para el PIC16F84, muy simple, para encender un LED cuando
presiono un pulsador y los pasos que he dado son los siguientes: Activo el bit de
flanco para que sea el nivel ascendente el que active la interrupción externa por
RB0, es decir el bit INTDEG del registro OPTION puesto a 1, eso en el banco 1,
luego en el banco 0 activo GIE, INTE del registro INTCON y pongo a 0 el bit INTF,
también de INTCON. A continuación entro en un bucle sin fin que espera a que se
produzca el cierre del pulsador, para que se active la interrupción que, cuando se
activa, se ejecuta el salto a la rutina de encendido del LED, desde el vector de
interrupción, la cual enciende el LED para, a continuación, hacer una pausa. Bien, el
problema es que no retorna de esa pausa para seguir con la rutina de encendido
que, apagaría el LED efectuaría otra pausa, pondría a 0 el señalizador de
interrupción INTF y retornaría con RETFIE al bucle sin fin, para volver
a empezar de nuevo. ¿Puede ser que el PIC tarde en poner GIE a nivel 0 lo
suficiente para que los rebotes eléctricos del pulsador provoquen varias
interrupciones, por lo que esta situación llenaría la pila, de direcciones de retorno
(Una por cada interrupción, ya sabes), ¿impidiendo el almacenamiento de la
dirección de retorno de una nueva llamada? Si no es así, entonces ¿qué esta
pasando en mi programa?
2 respuestas
Respuesta de leosoft
1
Respuesta de gonix
1