Los materiales utilizados son los siguientes:
Microcontrolador AT89S52.
LCD de 16x2 caracteres (BT 21608).Soft de edición de ASM Keil µVision.
Descripción de los puertos de entrada/salida:
P1.2 = RS
P1.3 = RWP1.4 = E
P2 = DATO
A continuación se describirán las rutinas de programación:
Rutina de limpieza de pantalla:
CLEAR: clr P1.2
mov P2, #01Hsetb P1.4
clr P1.4
lcall WAIT
ret
Rutina de inicialización:
INICIO: clr P1.2
mov P2, #038Hsetb P1.4
clr P1.4
lcall WAIT
clr P1.2
mov P2, #0CH
setb P1.4
clr P1.4
lcall WAIT
clr P1.2
mov P2, #06H
setb P1.4
clr P1.4
lcall WAIT
ret
Rutina de escritura:
WRITE: setb P1.2
mov P2, Asetb P1.4
clr P1.4
lcall WAIT
ret
Rutina de espera de respuesta del LCD:
WAIT: clr P1.4
clr P1.2setb P1.3
mov P2, #0FFH
setb P1.4
mov A, P2
jb ACC.7, WAIT
clr P1.4
clr P1.3
ret
Rutina para el cambio de línea:
CAMBIO: clr P1.2
mov P2, #0C0H
setb P1.4
clr P1.4
lcall WAIT
ret
Descripción del programa:
ORG 0000H
INI: lcall CLEARlcall INICIO
mov A, #'H'
lcall WRITE
mov A, #'o'
lcall WRITE
mov A, #'l'
lcall WRITE
mov A, #'a'
lcall WRITE
lcall CAMBIO
mov A, #'M'
lcall WRITE
mov A, #'u'
lcall WRITE
mov A, #'n'
lcall WRITE
mov A, #'d'
lcall WRITE
mov A, #'o'
lcall WRITE
ljmp INI
Este programa se mostrará en la pantalla indefinidas veces.
Los códigos en hexadecimal enviados al LCD, son códigos genéricos. Cada uno de ellos cumple una función diferente y se detallan en las siguientes tablas:
CLEAR:
Borra el módulo LCD y coloca el cursor en la primera posición
(dirección 0). Pone el bit I/D a 1 por defecto.RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Tiempo de ejecución: 1.64mS
HOME:
Coloca el cursor en la posición de inicio (dirección 0) y hace que el display comience a desplazarse desde la posición original. El contenido de la memoria RAM de datos de visualización (DD RAM) permanece invariable. La dirección de la memoria RAM de datos para la visualización (DD RAM) es puesta a 0.
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | X |
Tiempo de ejecución: 1.64mS
ENTRY MODE SET
Establece la dirección de movimiento del cursor y especifica si la visualización se va desplazando a la siguiente posición de la pantalla o no. Estas operaciones se ejecutan durante la lectura o escritura de la DD RAM o CG RAM. Para visualizar normalmente poner el bit S=0.
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S |
Tiempo de ejecución: 40µS
DISPLAY ON/OFF CONTROL
Activa o desactiva poniendo en ON/OFF tanto al display (D) como al cursor (C) y se establece si este último debe o no parpadear (B).
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B |
Tiempo de ejecución: 40µS
CURSOR OR DISPLAY SHIFT
Mueve el cursor y desplaza el display sin cambiar el contenido de la memoria de datos de visualización DD RAM.
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | X | X |
Tiempo de ejecución: 40µS
FUNCTION SET
Establece el tamaño de interfase con el bus de datos (DL), número de líneas del display (N) y tipo de carácter (F)
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 0 | 0 | 1 | DL | N | F | X | X |
Tiempo de ejecución: 40µS
SET THE CG RAM ADDRESS
El módulo LCD además de tener definidos todo el conjunto de caracteres ASCII, permite al usuario definir 4 u 8 caracteres gráficos. La composición de estos caracteres se va guardando en una memoria llamada CG RAM con capacidad para 64 bytes. Cada carácter gráfico definido por el usuario se compone de 16 u 8 bytes que se almacenan en sucesivas posiciones de la CG RAM.
Mediante esta instrucción se establece la dirección de memoria CG RAM a partir de la cual se irán almacenando los bytes que definen un carácter gráfico. Ejecutando este comando todos los datos que se lean o escriban posteriormente, lo hacen desde esta memoria CG RAM.RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 0 | 1 | Dirección de la CG RAM | |||||
SET THE DD RAM ADDRESS
Los caracteres o datos que se van visualizando, se van almacenando en una memoria llamada DD RAM para de aquí pasar a la pantalla.
Mediante esta instrucción se establece la dirección de la memoria DD RAM a partir de la cual se irán almacenando los datos a visualizar. Ejecutando este comando, todos los datos que se escriban o lean posteriormente lo harán desde esta memoria DD RAM. Las direcciones de la 80h a la 8Fh corresponden con los 16 caracteres del primer renglón y de la C0h a la CFh con los 16 caracteres del segundo renglón, para este modelo de LCD.
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 1 | Dirección de la DD RAM | ||||||
READ BUSY FLAG & ADDRESS
Cuando el modulo LCD esta ejecutando cualquiera de estas instrucciones, tarda un cierto tiempo de ejecución en el que no se debe mandar ninguna instrucción. Para ello dispone de un flag llamado BUSY (ocupado) que indica que se está ejecutando una instrucción previa.
Esta instrucción de lectura informa del estado de dicho flag además de proporcionar el valor del contador de direcciones de la CG RAM o de la DD RAM según la última que se haya empleado.RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 1 | BF | Dirección de la CG RAM o DD RAM | ||||||
WRITE DATA TO GG OR DD RAM
Mediante este comando se escribe en la memoria DD RAM los datos que se quieren presentar en pantalla y que serán los diferentes códigos ASCII de los caracteres a visualizar.
Igualmente se escribe en la memoria CG RAM los diferentes bytes que permiten confeccionar caracteres gráficos a gusto del usuario.El escribir en uno u otro tipo de memoria depende de si se ha empleado previamente la instrucción de direccionamiento DD RAM o la de direccionamiento CG RAM.
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
1 | 0 | Código ASCII o byte del carácter gráfico | |||||||
READ DATA FROM CG RAM OR DD RAM
Mediante este comando se lee de la memoria DD RAM los datos que haya almacenados y que serán los códigos ASCII de los caracteres almacenados.
Igualmente se lee de la memoria CG RAM los diferentes bytes con los que se ha confeccionado un determinado carácter gráfico.
El leer de uno u otro tipo de memoria depende de si se ha empleado previamente la instrucción de direccionamiento de la DD RAM o la de direccionamiento CG RAM.
RS | R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
1 | 1 | Código ASCII o byte del carácter gráfico | |||||||
Abreviaturas empleadas en los códigos anteriores:
S | 1 - Desplaza la visualización cada vez que se escribe un dato |
0 - Modo normal | |
I/D | 1 - Incremento del cursor |
0 - Decremento del cursor | |
S/C | 1 - Desplaza el display |
0 - Mueve el cursor | |
R/L | 1 - Desplazamiento a la derecha |
0 - Desplazamiento a la izquierda | |
BF | 1 - Módulo ocupado |
0 - Módulo disponible | |
DL | 1 - Bus de datos de 8 bits |
0 - Bus de datos de 4 bits | |
N | 1 - LCD de dos líneas |
0 - LCD de una línea | |
F | 1 - Carácter de 5 x 10 puntos |
0 - Carácter de 5 x 7 puntos | |
B | 1 - Parpadeo del cursor ON |
0 - Parpadeo del cursor OFF | |
C | 1 - Cursor ON |
0 - Cursor OFF | |
D | 1 - Display ON |
0 - Display OFF | |
X | Indeterminado |
NOTA: el programa fue probado y funciona bien. Más adelante se agregara el conexionado del mismo, pero como guía se utilizo el del link nº 3. También se agregara un video donde se muestre el funcionamiento del mismo.
Fuentes:
2 - http://www.x-robotics.com/
3 - http://electronicaarg.es.tl/LCD-16x2-con-AT89S52.htm