Lo prometido es deuda... dejó aquí el programa con el algoritmo que les comenté.
Esta hecho en ensamblador para el PIC18F2450 trabajando a 20 MHz y con un cristal de cuarzo de 32768Hz para generar retardos precisos en el TMR1. El bus de datos del GLCD está conectado de RB0 a RB7,
EN->RA1 y RS a RA0.
Les explicaré como opera el algoritmo:
La idea es como les comenté anteriormente, en el programa están declaradas "minimágenes" de 8 bytes correspondientes a cada letra que se deseé mostrar, estos datos se encuentran a partir de la dirección 0x0900 y cada caracter está declarado por la etiqueta "Letra_A, Letra_B, etc"
Se tienen dos registros Cor_X y Cor_Y los cuales apuntan a las 200 posiciónes para mostrar texto en el GLCD, es decir si establecemos Cor_X=0 y Cor_Y=5, se mostrará el caracter en la fila 6 y columna 0 del GLCD
En el archivo de Excel está un bosquejo donde se observan las direcciones del cursor correspondientes a cada coordenada. (Una coordenada está compuesta por 8 bytes).
Cuando se desea mostrar algún caracter es necesario seguir 3 pasos
1-Cargar los registros "Cor_X" y "Cor_Y" en la posición donde se desee mostrar el caracter
2-Cargar el caracter a enviar en W por medio de la instrucción "movlw LOW Letra_A", de esta manera se apunta al inicio del grupo de 8 bytes que conforman a la letra A
3-Llamar a la subrutina GLCD_XY la cual se hará cargo de leer los datos del caracter y posicionarlos en las coordenadas especificadas.
La subrutina "GLCD_XY" básicamente lo que hace es recibir 3 parámetros: 2 datos coordenadas y un dato del caracter a mostrar.
Para calcular la dirección del cursor el GLCD lo que hace es tomar el valor de la coordenada Y y multiplicarla por 160, a este resultado se le suma el valor de la coordenada X y se obtiene el inicio donde se escribirán consecutivamente los 8 bytes correspondientes al caracter
Como ejemplo muestro como escribir un caracter en la coordenada 2,1 del GLCD
La dirección del cursor es manipulada directamente por medio de los registros PRODL y PRODH, en estos registros se obtiene el resultado de la multiplicación, aproveche estos mismos registros para conformar el apuntador de 16 bits que tiene el GLCD para posicionar el cursor.
La misma subrutina "GLCD_XY" al terminar de escribir un caracter avanza a la siguiente coordenada en X para no tener que reescribir este dato al momento de enviar cadenas de caracteres
Espero haberme explicado, con este ejemplo, de todos modos en el archivo .asm viene comentado aún así cualquier duda que resulte pregunten por acá.
He de aclarar que no he terminado de formar la tabla para todo el abecedario en mayúsculas y minúsculas por lo que les solicito su coperación. Los datos de los caracteres los saco de la misma hoja de datos del GLCD formando byte por byte por lo que es algo pesado.
Aún asi, ójala puedan optimizar más el direccionamiento de letras, ya que por la forma en que lo implementé solo es posible direccionar hasta 256/8 =32 caracteres diferentes de 8 bytes.
En fin, les dejo una foto con el resultado.
Saludos