TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: dbuc en 23 de Enero de 2003, 15:58:00

Título: Volver de una interrupción
Publicado por: dbuc en 23 de Enero de 2003, 15:58:00
 Hola
 Esty probando el pic 16F628 y tengo un problema.
 Mi programa tiene una interrupción por RB0, que anda fenomenal. El problema es que para terminar la iterrupcion debo hacerlo con RETFIE, y esta instrucción hace que el programa retome sus acciones en la posición del programa donde se produjo la interrupción, mi pregunta es: No habrá una forma de hacer que la vuelta de la interrupcin, por medio de RETFIE, sea a una dirección, determinada por mi, del prgrama (coo si fuera un GOTO)?

Título: RE: Volver de una interrupción
Publicado por: pocher en 24 de Enero de 2003, 10:22:00
Hola dbuc.

Si la hay la desconozco (RETFIE para interrupciones y RETURN y RETLW para subrutinas).  De todas formas creo que tendrías que decir en concreto que quieres que haga el programa, hay soluciones para casi todo.

Un consejo: si el programa o proyecto no es largo y deseas aprender a manejar bits, registros y funcionamiento interno del PIC escribe en ensamblador. Si el proyecto es grande no lo dudes en C.

Un saludo
Título: RE: Volver de una interrupción
Publicado por: frenadol501 en 07 de Febrero de 2003, 18:33:00
 podrias dar un valor a una variable cuando se produzca la interrupcion.
cuando regreses al punto donde se produjo la interrupcion ,puedes comprobar el valor de esa variable (registro) si se da el caso saltar a la etiqueta que desees

a grandes rasgos esta estructura


interrupcion
 pongo variable a 1
fin de interupcion

principal
 si variable = 1 salto a subrutina
volver a principal


subrutina
 pongo variable a 0
fin de subrutina

 espero sirva de algo esto.salu2

Título: RE: Volver de una interrupción
Publicado por: adolfoadc en 08 de Febrero de 2003, 06:25:00
Mucho me temo que no puedas, el valor del program counter se guarda en el stack (pila) para volver luego por donde lo habia dejado, el problema que tiene la familia 16 es que dicho stack no es accesible y por lo tanto el contador del programa no puede ser modificado, esto si es posible hacerlo con la familia 18, ya que el stack si es accesible y puedes hacer un retorno de una irq por donde te de la gana.

Tienes que tener cuidado con el numero de llamadas a las subrutinas y irq, ya que se puede producir un overflow en el stack si no sales de las sub con return y de la irq con retfie, ademas de tener un numero limitado de llamadas a subrutinas dentro de otras subrutinas.