TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: liminix en 30 de Agosto de 2008, 22:41:43

Título: tablas en asembler
Publicado por: liminix en 30 de Agosto de 2008, 22:41:43
hola mis estimados  amigos recien me estoy iniciando en emsamblador por eso la duda que tengo ,bueno mi duda acerca de las tablas como es su fucionamiento es que no entiendo eso sumar el pc(contador de programa),con W(registro trabajo) me pueden dar un ejemplo y luego una pequeña explicacion
Título: Re: tablas en asembler
Publicado por: todopic en 30 de Agosto de 2008, 23:05:45
Hola Liminix, mira aqui, hay algo de tablas, tambien está tratado en el foro (emplea el buscador), y luego, si sigues con dudas, vuelve a consultar ok?
http://www.todopic.com.ar/foros/index.php?topic=6002.0 (http://www.todopic.com.ar/foros/index.php?topic=6002.0)

Suerte con el .asm!

Norberto
Título: Re: tablas en asembler
Publicado por: RedPic en 31 de Agosto de 2008, 05:05:15
Aquí tienes un pequeño ejemplo de cómo cargar W con un dato de una tabla: SELECCIONAR un BYTE mediante su OFFSET (http://picmania.garcia-cuervo.net/Ensamblador.php#SELBYTEIX)
Título: Re: tablas en asembler
Publicado por: migsantiago en 31 de Agosto de 2008, 12:16:11
Hola te pongo un ejemplo súper sencillo que me enseñaron hace unos días. Cómo elevar al cuadrado una cantidad usando tablas.

Código: [Seleccionar]
            MOVLW 03
            CALL TABLA
            MOVLW 05
            CALL TABLA
           
TABLA       ADDWF PCL,F
            RETLW 0
            RETLW 1
            RETLW 4
            RETLW 9
            RETLW 16
            RETLW 25


Lo que contiene W apunta a un valor que tiene la tabla.
Título: Re: tablas en asembler
Publicado por: tapi8 en 31 de Agosto de 2008, 15:25:40
Haz caso a lo que te dicen estos tres amigos que te contestaron, porque te aseguro que saben lo que dicen,
Por lo que posteas en la pregunta deduzco que no sabes el porque se le suma el "pcl", eso es porque el "pcl" contiene la direccion donde esta ubicada la tabla, de este modo la puedes ubicar en cualquier posicion.
Aqui en el almacen del asembler tambien tienes un par de ejemplos, hechos por Maunix, que tambien te ayudaran a entenderlo.

suerte Tapi8
Título: Re: tablas en asembler
Publicado por: LeSs en 05 de Septiembre de 2008, 23:39:01
Compañeros,

El manejo de tablas siempre es un problema, creanme q si que me dio dolores de cabeza. Pero llego la solución... Un micro de la serie 18FXXX, no dormi la noche en la que comence a programar con estos micros, me envicie en ver lo facil q se hacian el manejo de las tablas, pero claro queda a criterio personal el uso del mismo. Adjunto una animación que hice en un LCD alfanumerico de una barra de carga, claro se utilizan macros que facilitan la programación como no tienen idea.

Saludos.
Título: Re: tablas en asembler
Publicado por: Leon Pic en 06 de Septiembre de 2008, 10:05:15
Ja, me encantó esta tabla
Código: ASM
  1. Mensaje1
  2.         DB      "SALUDOS!", 0x00
  3. Mensaje2
  4.         DB      "FORO TODO-PIC", 0x00
  5. Mensaje3
  6.         DB      "DESDE ECUADOR", 0x00
  7. Mensaje4
  8.         DB      "L.e.S.s", 0x00
  9. Mensaje5
  10.         DB      "Por q este Pry", 0x00
  11. Mensaje6
  12.         DB      "con Oscilador d", 0x00
  13. Mensaje7
  14.         DB      "4MHz NoFunciona?", 0x00
  15. FinMensajes

Además, ¿me podrían explicar como utilizar este tipo de tablas? Entiendo como funciona, cuando se llama al mensaje 5 apunta a la línea DB y lee lo que está entre comillas, o sea, que vuelve a esta línea, tantas veces como caracteres tenga, pero no se si hay que utilizar algo en especial para utilizar este tipo de tablas.

Y una cosita más, este tipo de tablas ¿solo se utiliza en la familia 18F?

Gracias.
Título: Re: tablas en asembler
Publicado por: Javicho en 06 de Septiembre de 2008, 10:44:13
Ese tipo de tabla se usa en cualquier familia de pic, y hasta incluso yo lo hago asi:

Mensajes  addwf  PCL,f
DT  "SALUDOS!", 0x00
DT  "FORO TODO-PIC", 0x00
DT  "DESDE ECUADOR", 0x00
DT  "L.e.S.s", 0x00
DT  "Por q este Pry", 0x00
DT  "con Oscilador d", 0x00
DT  "4MHz NoFunciona?", 0x00

Llamas a la tabla y de cada linea se sale cuando encuentras el "0" (0x00) pero tienes que conocer el offset de inicio por linea. Cuando se trata de mandar mensajes a un lcd de 2x16 es facil porque el offset siempre avanza 16 posiciones + el 0.

Javicho.
Título: Re: tablas en asembler
Publicado por: Leon Pic en 06 de Septiembre de 2008, 12:19:18
No entiendo lo del offset

¿A lo que te refieres es que no puedo exederme de 16 caracteres por línea?
Título: Re: tablas en asembler
Publicado por: liminix en 08 de Septiembre de 2008, 19:46:45
hola mis estimados amigos como siempre cuento con uds para eliminar cualquier dudagracias por el link que me pusieron alli pude leer sobre la duda que tenia y mas
gracias cualquier dudita acerca de otros temas se los pregunto gracias por su atencion :-/ :D
Título: Re: tablas en asembler
Publicado por: Javicho en 09 de Septiembre de 2008, 12:11:36
No entiendo lo del offset

¿A lo que te refieres es que no puedo exederme de 16 caracteres por línea?

Bueno aca hay una aclaración, el mensaje "SALUDOS!" solo tiene 8 caracteres y los demas mensajes tienen longitud de caracteres variable, yo uso mas bien longitud fija de 16 caracteres por mensaje (refiriendome siempre a enviar mensajes a un LCD2x16) entonces el mensaje "SALUDOS!" lo cambiaria a "    SALUDOS!    " asi te complicas menos y lo que ves en pantalla es exactamente como lo veras tambien en el LCD .. centrado.

Todo depende de como está enfocado el desplazamiento de tus mensajes, por ejemplo:

Mensajes  addwf  PCL,f
DT  "    SALUDOS!    ", 0x00         ;offset de inicio de linea = 0
DT  "  FORO TODO-PIC ", 0x00     ;offset de inicio de linea = 17

... la linea 1 tiene 16 caracteres (offset de 0 al 15) luego sigue el "0x00" (offset 16) y ahora viene la siguiente linea (offset de inicio de linea es 17), a eso me refiero con el offset (desplazamiento), tu programa debe llamar a Mensajes inicializas tu variable Offset=0, lees el 1er caracter y lo envias al LCD ahora preguntas si el caracter es 0, si no lo es incrementas el offset+1 y vuelves a llamar a Mensajes ahora te retorna con el siguiente caracter y asi sucesivamente terminas cuando encuentres el 1er 0 de la primera linea.

Para mostrar ahora la 2da linea envias el comando al lcd para colocar el puntero en la segunda linea y haces el mismo procedimiento anterior pero esta vez inicias con offset=17 y listo.

Espero se haya entendido algo (aunque no lo creo) pero sobre este asunto hay bastante info en la red asi que tienes que hacer tus pruebas asi te daras cuenta.

Javicho.
Título: Re: tablas en asembler
Publicado por: Leon Pic en 09 de Septiembre de 2008, 13:59:10
Si, ahora me quedó aclarada la duda.  :-/