Autor Tema: Problema con Subrutinas DSPIC30F4013  (Leído 1669 veces)

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

Desconectado wromerob

  • PIC10
  • *
  • Mensajes: 3
Problema con Subrutinas DSPIC30F4013
« en: 14 de Mayo de 2012, 12:57:06 »
Estimados Foristas

Tengo el siguiente problema:

Cuando estoy trabajando con las subrutinas en el DSPIC30F4013, no puedo anidadar mas de tres subrutinas porque el programa se pierde y se resetea. No se si deba ubicar las subrutinas en cierta parte del programa para que el PC del programa no se pierda.

Por favor cualquier ayuda o sugerencia se las agradecería mucho, porque tener que ingresar el codigo completo en vez de trabajar con la subrutina me esta empleando mucha memoria de programa.

Muchas Gracias por su colaboración ¡¡

Saludos

William

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Problema con Subrutinas DSPIC30F4013
« Respuesta #1 en: 14 de Mayo de 2012, 13:36:28 »
Seria conveniente que coloques tu codigo para que se te ayude mejor.

saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado wromerob

  • PIC10
  • *
  • Mensajes: 3
Re: Problema con Subrutinas DSPIC30F4013
« Respuesta #2 en: 14 de Mayo de 2012, 14:17:05 »
Estimado KALLITOS

Gracias por responder, el codigo es algo así:

;/////////////////////////////////////
LEER_APUNTADOR:

   CLRWDT
   CALL   LEER_DIRECCION
   .
   .
   .
   .
   .
   .
   .
   .
   .

   GOTO   LEER_APUNTADOR

;/////////////////////////////////////

LEER_DIRECCION:
   MOV   ADDRESS_H,W0
   MOV   W0,DATO
   CALL   TX_DATO

   RETURN

;/////////////////////////////////////

TX_DATO:
   BCLR   LATB,#0      
   CALL   RETARDO
   BCLR   LATB,#1
   CALL   RETARDO
   CALL   RETARDO
   BSET   LATB,#0

   RETURN

;/////////////////////////////////////
RETARDO:
   MOV   #0X0004,W0
   MOV   W0,TEMP
LOOP_RETARDO:
   NOP
   DEC   TEMP
   BTSS   SR,#Z
   GOTO   LOOP_RETARDO

   RETURN
;/////////////////////////////////////

De esta forma el programa se me pierde y se resetea, ahora si lo hago de la siguiente manera si me funciona bien:

;/////////////////////////////////////
LEER_APUNTADOR:

   CLRWDT

LEER_DIRECCION:
   MOV   ADDRESS_H,W0
   MOV   W0,DATO
   CALL   TX_DATO
   .
   .
   .
   .
   .
   .
   .
   .
   .

   GOTO   LEER_APUNTADOR

;/////////////////////////////////////

TX_DATO:
   BCLR   LATB,#0      
   CALL   RETARDO
   BCLR   LATB,#1
   CALL   RETARDO
   CALL   RETARDO
   BSET   LATB,#0

   RETURN

;/////////////////////////////////////
RETARDO:
   MOV   #0X0004,W0
   MOV   W0,TEMP
LOOP_RETARDO:
   NOP
   DEC   TEMP
   BTSS   SR,#Z
   GOTO   LOOP_RETARDO

   RETURN
;/////////////////////////////////////


En conclusión y a mi entender el problema es que estoy anidando más subrutinas de lo que es permitido.
Por favor gracias por cualquier ayuda al respecto.

Saludos,

William

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: Problema con Subrutinas DSPIC30F4013
« Respuesta #3 en: 15 de Mayo de 2012, 04:07:17 »
Para ahorrarte una llamada, lo que puedes hacer es meter el retardo no desde una subrutina si no como interrupción y testear una bandera en el código que se active cuando transcurra el tiempo que desees. Así quitarías el anidamiento del retardo, aunque no se si solucionará tu problema.
La otra opción que puedes tener, bastante tediosa, es la de guardar tu el estado del STATUS en cada llamada, de esta forma devolverlo al final de los anidamientos, aunque no se si funcionará, nunca lo he hecho para trabajar con subrutinas (sólo con las interrupciones).

Desconectado wromerob

  • PIC10
  • *
  • Mensajes: 3
Re: Problema con Subrutinas DSPIC30F4013
« Respuesta #4 en: 15 de Mayo de 2012, 07:47:28 »
Estimado NpSepComo

La primera opción podría ser valida, pero la idea es buscar una solución sin tener que eliminar alguna subrutina. Con respecto a tu segunda opción espero entenderte bien, a lo que te refieres es que guarde el estado del PC (Program Counter) para poder tener el control sobre el en cada subrutina, si es así, voy a trabajar en ello y me parece una opción viable. Por lo demás quisiera saber si existe alguna forma de saber con certeza hasta cuantas subrutinas puedo anidar en este DSPIC, o si esto es relativo, o siempre son 2 (que me parece muy poco) o de que depende realmente.

Muchas gracias por tu colaboración

Cordial saludo
William


 

anything