Autor Tema: DESBORDAMIENTO DEL REGISTRO PC CUANDO LLAMA A TABLAS LARGAS  (Leído 3191 veces)

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

Desconectado NPI_C

  • PIC10
  • *
  • Mensajes: 8
DESBORDAMIENTO DEL REGISTRO PC CUANDO LLAMA A TABLAS LARGAS
« en: 03 de Abril de 2004, 14:27:00 »
Hola a tod@s:

Este es mi primer mensaje y ya vengo con preguntitas ..... También intentaré "echar un cable" siempre que pueda/sepa, tiempo al tiempo.

Al tema:  Básicamente es lo que digo en el encabezado del post, estoy haciendo un programa bastante largo, la mayoría del código es para el control de un LCD, así que lleva un montón de tablas y algunas de ellas largísimas, es por esto que, cuando uso la instrucción CALL para llamar a alguna de dichas tablas, se me desborda el PC (program counter, registro que se encarga de llevar el contaje de las líneas del programa, para quien no lo sepa).

Es lógico, puesto que al ser el PC un registro de 8bits y estar por ejemplo, cargado con el valor F0 en el momento de llamar a la tabla (subrutina al fin y al cabo) sería fácil que se desbordara si para la subrutina tiene que saltar unas cuantas líneas de programa.
Esto conlleva que el programa haga cosas raras y salte donde le da la gana. Por ejemplo: si tenía el valor F0 y salto 50 líneas en la subrutina, se desbordaría y llegaría hasta  el valor 22 más o menos, osea que saltaría a la línea de programa 22 sin tener por qué.

Debe haber una solución para esto, y si alguien la sabe le estaría muy agradecido.

Perdonad que me haya estendido tanto.

Gracias y hasta pronto!!

Desconectado Sispic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
RE: DESBORDAMIENTO DEL REGISTRO PC CUANDO LLAMA A TABLAS LARGAS
« Respuesta #1 en: 04 de Abril de 2004, 00:40:00 »
Y por que no  FLASH PROGRAM READ directamente , aunque sea mas lento .

con un pic musical que hicimos se leian mas de 4.000 bytes de una tirada . ademas puedes crear tablas de hasta 12Bits .

saludos.



Desconectado NPI_C

  • PIC10
  • *
  • Mensajes: 8
RE: DESBORDAMIENTO DEL REGISTRO PC CUANDO LLAMA A TABLAS LARGAS
« Respuesta #2 en: 04 de Abril de 2004, 09:11:00 »
Sispic, siento no haber entendido lo que dices en tu respuesta, pero te agradezco el interés.
Mi problema en este momento es llamar a subrutinas que se encuentran en diferentes páginas de la memoria de programa de un 16F876.
Tengo entendido que se podría resolver ubicando el código de las subrutinas en el comienzo de las páginas de memoria y al llamarlas desde otra página tocar en el registro PCLATH, pero no tengo ni idea de como se hace esto.

Agradecería que alguien me pudiera dan una pequeña explicación sobre el tema, tengo que acabar el programa en los dos próximos días y creo que es lo único que me impide acabar.

Saludos, NPI_C.


Desconectado elvillano

  • PIC10
  • *
  • Mensajes: 3
RE: DESBORDAMIENTO DEL REGISTRO PC CUANDO LLAMA A TABLAS LARGAS
« Respuesta #3 en: 04 de Abril de 2004, 11:40:00 »
Hola,

Según tu descripción supongo q estas usando un PIC "pequeño", pues para que su PC tenga 8 bits significa que no debe tener mucho espacio en la memoria del programa, te recomiendo que uses otro PIC con más memoria de programa.

Espero q te sirva por lo menos de luces para que halles la respuesta

Saludos

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: DESBORDAMIENTO DEL REGISTRO PC CUANDO LLAMA A TABLAS LARGAS
« Respuesta #4 en: 05 de Abril de 2004, 11:03:00 »
Hola, por lo que dices, el problema es con las tablas... al colocarlos en otra pagina, el retorno es con el valor del pc... y retorna a la primera pagina...  coloca las tablas en la primer pagina....
y con org100 comienza tu programa....
las subrutinas funcionaran bien... pero ocupa la primera parte con as tablas (maximo 255 valores (teoricos... no son tantos.. falta addwf pcl,f  asi que son menos)
suerte

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado adrian2a1

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 75
RE: DESBORDAMIENTO DEL REGISTRO PC CUANDO LLAMA A TABLAS LARGAS
« Respuesta #5 en: 06 de Abril de 2004, 04:45:00 »
Te adjunto documento por correo que bajé de www.pic16f84a.com y que explica como solucionarlo. Espero te sirva. (El sistema no me deja subir el documento al foro).

Desconectado pikman

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 682
RE: DESBORDAMIENTO DEL REGISTRO PC CUANDO LLAMA A TABLAS LARGAS
« Respuesta #6 en: 07 de Abril de 2004, 13:21:00 »
Hola, el problema es que depende de donde pongas la tabla y su longitud, por esto es recomendable colocar las tablas en las primeras direcciones de memoria de la pagina donde este situada,

por ejemplo,  si la tabla esta en la direccion 0x100 como explica Norberto, podras incorporar hasta 0xFF ( 255 ) byte, siempre y cuando no te ocupes del registro PCLATH, pues este contiene la parte superior del contador de programa que tambien es posible modificarlo, eso si cuidado con el , o mejor dicho conseva su valor cuando vuelvas de la tabla si no tu retorno sera a cualquier parte del programa.

Para resumir, puedes sumas mas de 255 pero sumaras al PCLATH tambien,  si le sumas a 0x100 0xFF vas a tener 0x1FF y bueno no hay desborde pero si sumas 0x100 (256) se complica osea que el resulrtado sera 0x200 y ahi en vez de volver el micro se va a cualquier parte, para lo que tendras que agregar algo asi


movlw   0x02      
movwf   PCLATH      
movfw   TEMP9    
call    TABLA_DIA         ; la tabla esta a partir de la direccion 0x200
clrf   PCLATH  

esto claro conociendo donde esta situada la tabla, hay algo mejor
que es que se haga en forma automatica, esta explicado en la AN556 de Microchip que la encontraras en www.microchip.com con
todos los detalles, espero no haberles complicado mas la cabeza,

un saludo

ARIEL

saludos
PikMan


 

anything