Autor Tema: Hacer menús sin usar tablas  (Leído 2567 veces)

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

Desconectado jttpic

  • PIC10
  • *
  • Mensajes: 2
Hacer menús sin usar tablas
« en: 24 de Octubre de 2003, 08:40:00 »
Utilicé un microcontrolador MCHC08 MORTOROLA para escribir en una pantalla (LCD) y utilicé un código como el siguiente:

                MSG_MENU   db   "Menu"

Lo que hace es mandar letra a letra la palabra entre comillas simples a la LCD.

Quiero escribir en la LCD cualquier cosa usando una instrucción parecida a la de arriba pero usando un PIC16F876 ya sé hacerlo usando tablas y el opcode retlw sin embargo resultaría muy extenso y complicado de modificar porque tengo que hacer un menú largo.  Por esto busqué varias directivas como db, DATA, etc y los registros indf y fsr pero no sé como usarlos.  Si saben algo que pudiera ayudarme, de verdad, les estaría enormemente agradecida...gracias por la ayuda que puedan brindarme...


Desconectado carmalcoz

  • PIC10
  • *
  • Mensajes: 29
RE: Hacer menús sin usar tablas
« Respuesta #1 en: 27 de Octubre de 2003, 21:54:00 »
Saludos... a ver yo hice un menu en el 877A, era algo asi:

TM  EQU 0x08   ;Direccion de las Tablas de mensajes
                                ;de los menus

;Funcion que pide contraseña para poder mostrar
;el menu principal
DISPLAY_PASSWORD
     CLRF   PORTB
     CLRF   CONTMSG      ;Limpio el contador de mensaje
     LCDRS_ALTO            
INICIO_MENSAJE
   _MOVLF TM,PCLATH  ;Coloca la parte alta del
                                    ;program counter
    MOVF   CONTMSG,W
    CALL   MSG_PASSWORD
    CLRF   PCLATH
    ANDLW   0xFF                ;se compara con el caracter de
                                       ;fin de cadena
    BTFSC   STATUS,Z          ;FIN DE MENSAJE?
    GOTO   FIN_MENSAJE  ;SI -> se acabo el mensaje, salte
    CALL   WLCD              ;NO -> todavia hay caracteres
                                        ;continue escribiendo LCD
     INCF   CONTMSG,F
     GOTO   INICIO_MENSAJE
FIN_MENSAJE   
     LCDRS_BAJO
             .
             .   
             .
MSG_PASSWORD   
     ADDWF  PCL,F
     DT  "PASSWORD:",0x00
     END

Explico:
>como el programa era grande la tabla esta en la posicion 0800 de la memoria de programa (creo que es la pagina 1), por eso debo utilizar el PCLATH, de lo contrario el contador de programa se pierde despues del CALL MSG_PASSWORD... bueno eso me pasaba a mi.
>Utilizo un caracter de fin de cadena para saber hasta donde sigo haciendo el CALL
>El INDF y FSR son registros de memoria RAM. El FSR es como un apuntador de posicion de memoria y el INDF es el contenido de esa posicon de memoria, para leer/escribir de (en) la RAM, debes incrementar (dec) el FSR hasta donde tu lo decidas y luego lees/escribes con el INDF. Debes tener en cuenta la configuracion de bancos de RAM de tu PIC.
>El LCD modulo HD44780, configurado a 4 bits.

Espero haberte ayudado...

Suerte  

Desconectado carmalcoz

  • PIC10
  • *
  • Mensajes: 29
RE: Hacer menús sin usar tablas
« Respuesta #2 en: 27 de Octubre de 2003, 22:00:00 »
Se me olvidaba... la directiva DT es como varias instrucciones RETLW  (eso lo puedes ver en la ventana de memoria de programa si estas trabajando con el MPLAB)... el punto es que el valor devuelto esta en W.

Te mando el mi codigo para que lo veas.  

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
RE: Hacer menús sin usar tablas
« Respuesta #3 en: 28 de Octubre de 2003, 05:38:00 »
En realidad el comando DT (Data Table) es una forma organizada de armar una tabla de datos ASCII para enviar a un mensaje, haciendolo mas legible y mantenible.
Utilizara el mismo espacio que una tabla hecha utilizando varios Retlw X.
No es utilizable, por ejemplo, cuando tienes que buscar un valor a enviar a un puerto, donde por cuestiones de legibilidad es mejor escribirlo en binario.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.


 

anything