Comunicación de la PC a un display de LCD

Salvador Macías Hernández

Página hecha el 14 de Mayo del 2006

 

Este proyecto consiste en desplegar en un display de LCD, lo que se está tecleando en la computadora. Para ello utilizamos el puerto serial, que utiliza la norma RS-232 y el UART del AT89C51 que es de la familia MCS51.

 

La computadora utiliza la norma RS232, en donde los voltajes son de 12 volts, y además están negados. El UART del microcontrolador utiliza niveles de voltaje TTL. Por eso es que tuvimos que utilizar el pequeño circuito  MAX232, que nos convierte esos dos niveles de voltajes. Como el estándar RS232 utiliza muchas señales, y el microcontrolador utiliza solamente tres, hubo que hacer una conexión Null Modem para que la computadora pudiera mandar la información al microcontrolador. Para conocer un poco más sobre este circuito vea la página de este mismo haciendo clic aquí

 

 

El diagrama eléctrico del módulo es el siguiente:

 

 

Y entonces he aquí las fotos de este nuevo circuito:

 

 

 

Ahora hay que ponerle el display de LCD:

 

 

 

El programa que se utilizó fue el que se muestra a continuacuón. Se omiten las subrutinas de tiempo, de inicialización del puerto serial y de LCD puesto que ya se explicaron en páginas de este sitio. Se muestra la subrutina de interrupción serial, puesto que es parte medular de este programa. Y si quieres tener el archivo hexadecimal sigue la liga: LTI002.hex

 


Programa LTI002


LCD_DI equ P1.0 ;Bit del microcontrolador que se 
;conecta al pin DI del Display de LCD

LCD_En equ P1.1 ;Bit del microcontrolador que se 
;conecta al pin EN del Display de LCD

SERIALBUFFER equ 0FF00h


org 0000h
sjmp INICIO

org 0023h
jmp INTERRUPCION_SERIAL


INICIO:
call INICIALIZA_LCD

mov DPTR,#CADENA1 ;Muestra mensaje de Bienvenida
call MUESTRA_MENSAJE_LCD
call BAJA_RENGLON_LCD

setb EA
setb ES
mov P3,#0FFh
call INICIALIZA_9600_8_1SP_11Mhz

mov SBUF,#'S'

FIN: sjmp FIN

;===================================================================
; CADENAS DE CARACTÉRES
;===================================================================

CADENA0: db '1234567890123456' 
CADENA1: db 'Modulo AA Listo!' 


;-----------------------------------------------------------
;INTERRUPCION_SERIAL -- Transmite cadena de caracteres, Recibe
; una cadena de caracteres y la manda a 
; un buffer serial para su futura 
; operacion
;
;USA: PSW.5 Acc MODIFICA: DPTR
;
;Variables de Entrada:
; DPTR -- Dirección del Mensaje
; SERIALBUFFER -- Dirección de inicio del Buffer Serial
;Variables de Salida:
; NINGUNA 
;
;Observaciones: Puerto serial a 9600bps, Hay que definir la
; direccion del buffer serial, el separador de
; comandos es enter 13 decimal = 0Dh
;
;Ejemplo:
; SERIALBUFFER equ 0FF00h
;
;
;MENSAJE1:
; DB 'Salvador Macias Hernandez'
; DB 00h
;-----------------------------------------------------------
INTERRUPCION_SERIAL:

JB TI, DATOENVIADO ;Verificando Mótivo de Interrupción
JB RI, DATORECIBIDO 

DATOENVIADO:
clr TI
reti

DATORECIBIDO:
clr RI
mov A,SBUF
mov SBUF,A

clr LCD_En
setb LCD_DI ;Decimos que es dato ;)
mov P0,Acc
setb LCD_En
call ESPERA_50uS
clr LCD_En

reti

end

 

 

 

 

Ahora hay que correr el programa y probar el circuito:

 

Lo primero que hace nuestro programa es mandar un mensaje (que se ve en la foto de arriba) diciendo la dirección del módulo (AA) y el estado (Listo). Y en el renglón de abajo se pone el cursor, esperando que la computadora le mande la información a escribir en ese mismo renglón. Para comunicar a los dos aparatos, es necesario tener una velocidad de 9600bps, ser de 8 bits, tener un bit de paro y ningún bit de paridad. A continuación vemos lo que se mandó escribir:

 

 

 

Aquí hay un video de como fue hecha la prueba:

 

 

 

Bibliografía

[1]     Intel;  MCS-51 Programmer's Guide and Instruction Set





Autor: Maestro en Ciencias
Salvador Macías Hernández
Salvador@MaciasHernandez.com
http://salvador.maciashernandez.com