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: