Autor Tema: Se puede hacer un retfie a una dirección puntual?  (Leído 2443 veces)

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

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Se puede hacer un retfie a una dirección puntual?
« en: 13 de Enero de 2009, 06:40:37 »
Hola!

Seguramente tengais alguna solución a mi inquietud.
El programa hace interrupciones por TMR0. Al volver al punto del programa principal donde se ha interrumpido me interesaría que volviese a un punto en concreto.

Por ejemplo:

org 004
; Interrupciones cada x tiempo
repongo TMR0
cuento piedritas
me hago un café
me tomo una cervecita
blah blah

retfie


Principal
1-btfss Pibe,0
2-bsf ppp
3-btfss Pibe,1
4-bsf aaa
5-btfss Pibe,3
6-bsf bbb

goto Principal

Dependiendo de donde desborde TMR0 me interrumpirá cuando esté en la linea 1, o 3 o donde sea. A mi me interesaría que interrumpa en la linea 1, o al menos que al volver de interrupciones vuelva a linea 1.
Cómo se podría hacer?
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: Se puede hacer un retfie a una dirección puntual?
« Respuesta #1 en: 13 de Enero de 2009, 08:17:02 »
que interrumpa en la linea 1 es imposible... interrumpirá donde esté en ese momento. Que vuelva siempre en el mismo sitio igual si es posible con los comandos push y pop. No se si está en todos los micros mira en tu documentación.

Dentro de la interrupción antes del retfie pones

pop -> para descartar el TOS que apunta al sitio donde se interrumpió (es necesario o se llenaria el stack).
push dirección de la linea1 -> para insertar en el TOS esa dirección y que sea ahí donde vuelva.

comprueba también si salvas el contexto que esto no te pueda afectar al programa por esta modificación.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Se puede hacer un retfie a una dirección puntual?
« Respuesta #2 en: 13 de Enero de 2009, 08:26:03 »
Gracias Elma

Yo tengo estas macros

; Macros de grabado de registros para interrupciones
push MACRO   
movwf temp_WREG ;save copy w register
movf STATUS,w
bcf STATUS,RP0 ;set bank to 0
movwf temp_STATUS ;save status
movf FSR,w ;
movwf temp_FSR ;save copy of FSR
movf __WImage,w ;
movwf temp_WImage ;save copy of __WImage
ENDM

pop MACRO
bcf STATUS,RP0 ;ensure bank is set to 0
movf temp_WImage,w ;
movwf __WImage ;restore __WImage
movf temp_FSR,w ;
movwf FSR ;restore FSR
movf temp_STATUS,w
movwf STATUS ;restore status and bank information
swapf temp_WREG,f ;
swapf temp_WREG,w ;restore working register
ENDM

Cual debo modificar ?
A que te refieres con TOS? Ya he visto que es Top of the Stack
« Última modificación: 13 de Enero de 2009, 09:01:49 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Se puede hacer un retfie a una dirección puntual?
« Respuesta #3 en: 13 de Enero de 2009, 09:05:22 »
Igual no me va a servir de nada, porque hay saltos a otras subrutinas en el programa principal y si modifico el puntero al volver me dejará dicha subrutina por la mitad.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Se puede hacer un retfie a una dirección puntual?
« Respuesta #4 en: 13 de Enero de 2009, 13:29:59 »
y si usas un banderin que activas al entrar en la interrupcion y luego cuando regresa al programa principal y preguntas por aquel banderin haces que te mande a la direccion deseada y lo borras?
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Se puede hacer un retfie a una dirección puntual?
« Respuesta #5 en: 13 de Enero de 2009, 15:50:29 »
hmm.. puede ser.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"


 

anything