Autor Tema: Tablas y GLCD  (Leído 1734 veces)

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

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Tablas y GLCD
« en: 14 de Marzo de 2012, 15:58:17 »
Hola les quiero preguntar ya que me encuentro en una encrucijada, tengo el PIC18F67J50 conectado a una LCD Nokia 3310, y quiero hacer que envie mensajes a esta, pero me encajone y les pregunto:
Quiero hacer el codigo de los mensajes de esta manera:

Código: [Seleccionar]
mensaje1 dt "ABCDEFGHIJKLM", 0xfd
Y asi llamar todos los mensajes con una rutina.

La pregunta del millón es como puedo llamar con una tabla a este "mensaje1" y luego con otra tabla codificar cada letra y enviarla?
La tabla que codifica es esta:
Código: [Seleccionar]
dt 0x3E,0x41,0x49,0x55,0x5E,0x00 ; @ 0x40
dt 0x7E,0x11,0x11,0x11,0x7E,0x00 ; A 0x41
dt 0x7F,0x49,0x49,0x49,0x36,0x00 ; B 0x42
dt 0x3E,0x41,0x41,0x41,0x22,0x00 ; C 0x43
dt 0x7F,0x41,0x41,0x22,0x1C,0x00 ; D 0x44
dt 0x7F,0x49,0x49,0x49,0x41,0x00 ; E 0x45
dt 0x7F,0x09,0x09,0x09,0x01,0x00 ; F 0x46
dt 0x3E,0x41,0x49,0x49,0x3A,0x00 ; G 0x47
dt 0x7F,0x08,0x08,0x08,0x7F,0x00 ; H 0x48
dt 0x00,0x41,0x7F,0x41,0x00,0x00 ; I 0x49
dt 0x20,0x41,0x41,0x3F,0x00,0x00 ; J 0x4A
dt 0x7F,0x08,0x14,0x22,0x41,0x00 ; K 0x4B
dt 0x7F,0x40,0x40,0x40,0x40,0x00 ; L 0x4C
dt 0x7F,0x02,0x0C,0x02,0x7F,0x00 ; M 0x4D
dt 0x7F,0x04,0x08,0x10,0x7F,0x00 ; N 0x4E
dt 0x3E,0x41,0x41,0x41,0x3E,0x00 ; O 0x4F

Si me pueden orienta se los agradeceré ya que estoy intentando y me sale cualquier cosa.


Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: Tablas y GLCD
« Respuesta #1 en: 16 de Marzo de 2012, 15:45:34 »
Bueno he echo algo:
Código: [Seleccionar]
BUSCO_CARACTER
    MOVLW   0X07                              ; REPETICIONES DE BUSQUEDA DE CARACTER
    MOVWF   TEMP_1

movlw UPPER ASCII_CODES
movwf MsnAddressUpper_ASCII
movlw HIGH ASCII_CODES
movwf MsnAddressHigh_ASCII
movlw LOW ASCII_CODES
movwf MsnAddressLow_ASCII

movff MsnAddressUpper_ASCII,TBLPTRU
movff MsnAddressHigh_ASCII,TBLPTRH
movff MsnAddressLow_ASCII,TBLPTRL

DIRECCIONO
    movlw      0X04                           ; Aca coloco la direccion en donde esta el caracter en la tabla
    ADDWF    TBLPTRH,F                       ; Direccion alta de principio de frase
    movlw      0X74                           ; Aca coloco la direccion en donde esta el caracter en la tabla
    ADDWF    TBLPTRL,F                       ; Direccion baja de principio de frase

BUSCO
    tblrd *+               ; Incrementa puntero de tabla antes de su lectura
    NOP
    movff   TABLAT,TEMP_CARACTER
    MOVF      TEMP_CARACTER,W
    DCFSNZ  TEMP_1                            ; Decremento el contador asi obtengo el caracter entero.
    GOTO      COMANDO_FIN                     ; Si termino mi cod. termina de buscar.
    CALL   TX_SPI_D               ; Lo envio al LCD
    TBLRD *+                                  ; Leo la tabla nuevamente para saltearme un dato
    movff   TABLAT,TEMP_CARACTER        ; Cargo el dato
    CLRF      TEMP_CARACTER                   ; y lo borro
    GOTO      BUSCO                           ; Vuelvo a buscar



Esto lo que hace es cargar mi tabla ASCII que la puse al principio y le cargo en TBLPTRH y TBLPTRL la direccion donde esta mi caracter dentro de la tabla
ahora la pregunta es saben como hermano dos numeros de dos tablas diferentes?
Seme ocurre algo con esta tabla:
Código: [Seleccionar]
                                         ;               PC
ASCII_CODES                                    ;     HEX    DEC
        dt 0x00,0x00,0x00,0x00,0x00,0x00 ;SP   0x20   00     00
        dt 0x00,0x00,0x2f,0x00,0x00,0x00 ; !   0x21   0C    12
        dt 0x00,0x07,0x00,0x07,0x00,0x00 ; "   0x22   18    24
        dt 0x14,0x7f,0x14,0x7f,0x14,0x00 ; #   0x23   24    36
        dt 0x24,0x2a,0x7f,0x2a,0x12,0x00 ; $   0x24   30    48
        dt 0xc4,0xc8,0x10,0x26,0x46,0x00 ; %   0x25   3C    60
        dt 0x36,0x49,0x55,0x22,0x50,0x00 ; &   0x26   48    72
        dt 0x00,0x05,0x03,0x00,0x00,0x00 ; '   0x27   54    84
        dt 0x00,0x1c,0x22,0x41,0x00,0x00 ; (   0x28   60    96
        dt 0x00,0x41,0x22,0x1C,0x00,0x00 ; )   0x29   6C   108

Lo que quiero cargar en la primer tabla son los mensajes a enviar como: DT " (Hola Mundo)", cargo W con el carácter "(" que en hex es: 0x28 y con este valor cargar al PC,
llamar a la otra tabla y obtener la secuencia del carácter, lo que no puedo es hacer la formula que me "hermane"  estos números, ya que nunca hize algo parecido, en este caso serian el 0x28 y 0x6C
como puedo hacer? alguien hizo alguna vez algo parecido?
Espero sus comentarios.
Saludos


Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: Tablas y GLCD
« Respuesta #2 en: 27 de Marzo de 2012, 16:55:21 »
Hola pude terminarlo, les paso la direccion donde esta el cod. entero: http://www.todopic.com.ar/foros/index.php?topic=37913.0
Esto funciona a la perfección.
Saludos

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: Tablas y GLCD
« Respuesta #3 en: 06 de Abril de 2012, 11:34:48 »
Hola una pregunta tengo este codigo que llama a mis tablas:
Código: ASM
  1. Mensaje_Hola
  2.      MOVFF   PCL,W        ; antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
  3.      ADDWF   PCL,F        ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+W
  4.         dt "Hola Mundo!!!",0xfd;ontrol  LCD  NOKIA3310 x-robotics.com ",0xFD
  5.  
  6. Mensaje_Test
  7.      MOVFF   PCL,W        ; antes de saltar hay que leer PCL e iniciar PCLATH:PCLATU
  8.      ADDWF   PCL,F        ; Sumamos PCL y W, el resultado a PCL-> PCL=PCL+W
  9.         dt "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 @#$%&/()*+-,.:;<>?[]^",0xFD
  10.  
  11.  
  12.  
  13.  SEND_COMANDO_1_1        
  14.     CLRF    TABLA_START        ; Borro el puntero de las Tablas
  15. ESCMEN1_1      
  16.     RLNCF   TABLA_START,W,0    ; Roto un bit a la izquierda y lo guardo en W
  17.     CALL        Mensaje_Test       ; Llamo a la Tabla a enviar y regreso con el caracter en W
  18.     MOVWF   ASCIICode
  19.     MOVLW   0XFD    
  20.     XORWF   ASCIICode,W      
  21.     BTFSC   STATUS,Z           ;SI LOS DATOS SON IGUALES,
  22.     goto    FIN                ; Si llego al fin salto
  23.     CALL    GetASCIIByte
  24.     INCF    TABLA_START,F      ; Incremento el puntero para el proximo caracter
  25.     GOTO    ESCMEN1_1  
  26.  
  27. FIN
  28.     RETLW    0X00

En este se ce que se llama a uno de  los dos mensaje con: CALL   Mensaje_Test , la pregunta es en este punto como puedo hacer llamar a varias tablas sin tener que copiar el cod. para cada una, usando solamente este código?
¿como cargo la dirección de cualquier tabla que deseo mostrar?
Me pueden dar una mano ya que por mas que lo intento no me sale!
Gracias


 

anything