TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: pheidias en 06 de Abril de 2007, 21:08:16

Título: Tengo un problema con el cambio de pagina
Publicado por: pheidias en 06 de Abril de 2007, 21:08:16
Hola

resulta que tengo una tabla donde la mitad del codigo pertenece a una pagina y la mitad a otra, cuando hago un call a esa tabla para que me devuelva un valor resulta que me lo hace para valores menores a 18 si es mayor salta a la direccion 0x00, que puedo hacer?
Título: Re: Tengo un problema con el cambio de pagina
Publicado por: maunix en 07 de Abril de 2007, 17:30:18
Hola

resulta que tengo una tabla donde la mitad del codigo pertenece a una pagina y la mitad a otra, cuando hago un call a esa tabla para que me devuelva un valor resulta que me lo hace para valores menores a 18 si es mayor salta a la direccion 0x00, que puedo hacer?

Si buscas tabla en el foro verás muchas formas que hay de leer tablas de largo mayor a 256 o incluso a pesar de que la tabla sea menor a 256 datos, también funciona para casos donde la tabla está a mitad de una página y otra.

Saludos
Título: Re: Tengo un problema con el cambio de pagina
Publicado por: PalitroqueZ en 09 de Abril de 2007, 17:48:46
según lo poco que comentas sospecho que cuando la tabla pasa del valor 18, el contador de programa se desborda, prueba colocando la tabla al inicio.

org 0x0
goto inicio:

pegas la tabla aquí

inicio:

resto de la programación
Título: Re: Tengo un problema con el cambio de pagina
Publicado por: manuelroin24 en 09 de Abril de 2007, 22:05:39
Mi amigo plaitroquez con solucionarias el llamado a la tabla pero q pasa cuando este ejecutando la ultima instruccion de la página ??? no regresaria a la pagina "0" ??? es por eso que de igual manera tendria q jugar con el PCLATH

                       BCF PCLATH,4
                       BSF PCLATH,3             ;Select page 1(800h-FFFh)
                       CALL SUB1_P1            ;Call subroutine in page 1 (800h-FFFh)
SUB1_P1:                                          ;called subroutine page 1 (800h-FFFh)
{
 Rutina a realizar donde se debe incluir el retorno a la pagina cero
}
RETURN                                            ;return to Call subroutine in page 0 (000h-7FFh)

PD: Corriganme si me equivoco
Título: Re: Tengo un problema con el cambio de pagina
Publicado por: maunix en 10 de Abril de 2007, 08:43:11
Yo creo que se debe buscar en el foro cómo y donde ubicar una tabla, incluso en cualquier lugar (Además que las notas de aplicación de microchip lo explican una y otra vez).

Si le decimos que ponga la tabla en la ubicación 0x00 no lo veo adecuado, por varias razones

1) El usuario puede tomarlo como regla general
2) El usuario puede que necesite interrupciones
3) Está hartamente comentado el uso de tablas en el foro , incluso en ubicaciones cualquiera y esto último me parece que es lo que necesite nuestro amigo.

Sin ánimo de ofender a nadie, solamente con el fin de que se evacúe la duda del usuario que es la de ubicar la tabla en cualquier lugar.
Título: Re: Tengo un problema con el cambio de pagina
Publicado por: PalitroqueZ en 10 de Abril de 2007, 11:16:10
bueno, como que no tomé en cuenta los casos para cuando salta a otras paginas, pero en la pregunta inicial no dá mayores explicaciones, por eso asumí que se podía resolver poniendo la tabla al inicio.

Título: Re: Tengo un problema con el cambio de pagina
Publicado por: maunix en 10 de Abril de 2007, 11:46:52
bueno, como que no tomé en cuenta los casos para cuando salta a otras paginas, pero en la pregunta inicial no dá mayores explicaciones, por eso asumí que se podía resolver poniendo la tabla al inicio.

Si, eso está claro y tus intenciones por supuesto que son las mejores.  :)  :)

De de todas formas el problema que tiene es bastante común y simple de resolver, solamente leyendo el datasheet y una nota de aplicación del manejo de tablas. 

Sin mencionar además el foro.

Saludos

PD: A mi modo de verlo, sugiero siempre no poner más que un salto al inicio del vector de inicio de pic y que dicho salto sea bastante más allá que la sección del vector de interrupción.  Esto creo cubre la gran mayoría de los softwares.  Incluso si no usaremos interrupciones , para hacerla más fácil, ponemos el inicio muy cerca del 0x00 y asunto solucionado.