Autor Tema: Como usar la instruccion DB en assembler  (Leído 4141 veces)

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

Desconectado hrosales

  • PIC10
  • *
  • Mensajes: 20
Como usar la instruccion DB en assembler
« en: 18 de Noviembre de 2004, 09:55:00 »
Hola,

Estoy intentando hacer un programita en assembler utilizando la instruccion, codigo o sentencia DB para incluirle una serie de datos en vez de utilizar miles de lineas con movlw. Por ejemplo, para la inicializacion de un LCD grafico la instruccion SYSTEM SET utiliza los siguientes valores

Codigo:
   movlw   0x40
   call   lcd_cmd

   movlw   0x30
   call   lcd_data

   movlw   0x87
   call   lcd_data

   movlw   0x07
    call   lcd_data

   movlw   0x27
   call   lcd_data

   movlw   0x2B
   call   lcd_data

   movlw   0xEF
   call   lcd_data

   movlw   0x28
   call   lcd_data

   movlw   0x00
   call   lcd_data

El proposito es poner todos esos valores en una sola linea de instruccion y llamarlos uno a uno, no pretendo usar el retlw porque quiero evitar muchos renglones.

Si no es posible en assembler, aprendere PicBasic pero quisiera saber primero que opciones hay.

Gracias

Hector

Desconectado huro

  • PIC10
  • *
  • Mensajes: 36
RE: Como usar la instruccion DB en assembler
« Respuesta #1 en: 18 de Noviembre de 2004, 13:47:00 »

Hola hrosales:
    La sintanxis de db(declara dato de un byte) es como sigue:

  [<label>] db <expr>[,<expr>,...,<expr>]

Ejemplo:

   hrosales  db ’t’, 0x0f, ’e’, 0x0f, ’s’, 0x0f, ’t’, ’


   o si deseas puedes usar dt(definir tabla) de la siguietnte manera:

    [<label>] dt <expr> [, <expr>, ..., <expr>]

Ejemplo:

      hrosales    dt "UN MENSAJE", 0

   Esta información esta en el MPASM.




Desconectado hrosales

  • PIC10
  • *
  • Mensajes: 20
RE: Como usar la instruccion DB en assembler
« Respuesta #2 en: 18 de Noviembre de 2004, 14:09:00 »
Muchas gracias huro, ahora, supongo que para llamar a cada dato lo hago con

call hrosales

y va tomando cada dato hasta terminar la secuencia, es esto correcto?

hrosales

Desconectado hrosales

  • PIC10
  • *
  • Mensajes: 20
RE: Como usar la instruccion DB en assembler
« Respuesta #3 en: 22 de Noviembre de 2004, 11:06:00 »
Hola y con buenas nuevas.

Probe con DB y me da el siguiente mensaje:

Message[303] C:MPLAB PROJECTSMGE DISPLAYMGE_DISPLAY_INI.ASM 1096 : Program word too large.  Truncated to core size. (7FFF)

Asi que siguiendo el consejo de huro, probe con DT (Define Table) que de acuerdo a la ayuda de MPLAB:

DT - Define Table
Syntax
[<label>] dt <expr> [, <expr>, ..., <expr>]

Description
Generates a series of RETLW instructions, one instruction for each <expr>. Each <expr> must be an 8-bit value. Each character in a string is stored in its own RETLW instruction.

Example
dt "A Message", 0

dt FirstValue, SecondValue, EndOfValues


Bueno espero que alguien mas le sirva esto.

Gracias

hrosales

Desconectado hrosales

  • PIC10
  • *
  • Mensajes: 20
RE: Como usar la instruccion DB en assembler
« Respuesta #4 en: 26 de Noviembre de 2004, 10:21:00 »
Hola,

Pues con la desagradable sorpresa de que aunque con la instruccion DT ya no me genera errores al compilar, parece que el programa no lee los datos. Estoy usando la siguiente forma:

Codigo:
   movlw    0x09
      movwf   J
line1   call   page1
      call    lcd_data
      decfsz  J, 1
      goto    line1

page1:   DT 0xF8, 0xF8, 0xFC, 0xFC, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF


Lo que necesito es que con esta serie de instrucciones, leer la tabla (call page1) nueve veces y cada vez regrese a la secuencia con el valor de la tabla en el registro W para usarlo en la subrutina lcd_data.

Si alguien pudiera decirme cual es el error o si tengo que definir algo al inicio del programa o como puedo hacerlo mas facil sin utilizar movlw o retlw.

Gracias

Hector