Autor Tema: Volver de una interrupción  (Leído 2599 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dbuc

  • PIC10
  • *
  • Mensajes: 1
Volver de una interrupción
« 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)?


Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Volver de una interrupción
« Respuesta #1 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

Desconectado frenadol501

  • PIC10
  • *
  • Mensajes: 16
RE: Volver de una interrupción
« Respuesta #2 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


adolfoadc

  • Visitante
RE: Volver de una interrupción
« Respuesta #3 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.


 

anything