Sie sind auf Seite 1von 49

Captulo 3

Control de un display LCD de modo texto


El objetivo que se persigue es que el alumno adquiera unos conocimientos generales
sobre el funcionamiento de un display LCD que le permitan utilizar un dispositivo de
estas caractersticas de una forma sencilla y, si lo desea, mejorar o perfeccionar el
ejemplo que se pone a su disposicin.
El funcionamiento del display LCD a que hace referencia este documento va gobernado
por el controlador HD44780U de Hitachi. Hoy da existen varios dispositivos en el
mercado compatibles con este controlador por lo que la descripcin que aqu se facilita
valdr para un gran nmero de dispositivos. En cualquier caso se recomienda consultar
en cada caso la documentacin facilitada por el fabricante.

3.1 Descripcin general


Cuando se adquiere un display LCD lo primero que se puede observar es su apariencia
externa. ste se compone de una placa de circuito impreso rectangular, de un tamao
similar al del display, sobre la que van soldados el LCD, el controlador y el resto de
componentes, formando todo un conjunto compacto.

Figura 1 - Aspecto general de un display.

Bien en la parte superior o en la inferior debe encontrarse el conjunto de puntos (14 en


el dispositivo que aqu se describe) que permiten su conexin. Numerados de izquierda
a derecha tienen la siguiente funcionalidad:
PIN
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Smbolo
Vss
Vdd
Vo
RS
R/W
E
D0
D1
D2
D3
D4
D5
D6
D7

Descripcin
Masa
Alimentacin
Voltaje de ajuste del contraste
Seleccin de registro
Lectura / escritura
Validacin de datos (Enable)
Bit de datos menos significativo
Bit de datos
Bit de datos
Bit de datos
Bit de datos
Bit de datos
Bit de datos
Bit de datos ms significativo

Tabla 1 Funcin de los puntos de conexin.

Los tres primeros puntos de conexin (pins) son para la alimentacin y control del
contraste. Los tres siguientes (RS, R/W y E) son para el control y los restantes (D0 a
D7) son para el intercambio de datos.
El gobierno de la pantalla LCD lo lleva a cabo el controlador HD44780U de Hitachi (o
similar). La utilizacin correcta del dispositivo depende del conocimiento que se tenga
sobre su funcionamiento, seales de control, instrucciones, etc. Asimismo, la forma de
conexin al microcontrolador depender de los diferentes modos de funcionamiento del
display por lo que resulta imprescindible describir su funcionamiento.

3.2 Funcionamiento del display


A modo de introduccin general, el display es un dispositivo que dispone de un puerto
de Entrada/Salida por el que recibe instrucciones y datos y por el que devuelve
informacin sobre su estado interno. Para ello dispone de algunos registros que se
seleccionan mediante las lneas de control. Cada operacin necesita de unos tiempos de
ejecucin que se describirn posteriormente. Todo este proceso de comunicacin se

controla con las tres lneas de control (RS, R/W y E) conforme al cronograma del
dispositivo.

3.2.1 Alimentacin y control de contraste


La alimentacin de 5 V. la recibe a travs de los dos primeros puntos de conexin, al
primero (Vss) se conecta la masa y al segundo (Vdd) los 5 voltios, con un consumo de
corriente que no excede de 5mA. El tercero (Vo) permitir el control del contraste
variando la tensin en el mismo entre 0 (contraste mnimo) y 5 voltios (contraste
mximo). A la hora de conectarlo, podremos optar entre dos soluciones:
1. Fijar el contraste a su valor mximo.
sta es la solucin ms sencilla, para lo cual se conectar este punto a
5 V.
2. Regular el contraste.
Para esta solucin se conectar un potencimetro en configuracin de
divisor de tensin variable, conforme se detalla en la figura y con el
que se suministra la tensin deseada entre 0 y 5 V.

Figura 2 Conexin de un potencimetro de contraste.

Cabe recordar que cada fabricante puede optar por diferentes soluciones de polarizacin
para la regulacin del contraste y por tanto ser necesario consultar la documentacin
del dispositivo.

3.2.2 La pantalla y los caracteres


El display est formado por un LCD (Liquid Crystal Display, pantalla de cristal
lquido) de dos lneas con 16 posiciones cada una. Cada posicin est formada por una
matriz que puede ser de 5 x 8 de 5 x 10 puntos, para representar los diferentes
caracteres o smbolos. La pantalla est gobernada por el controlador HD44780U que
3

dispone de dos plantillas de caracteres predefinidas en la CGROM (Character


Generator ROM). La primera plantilla est formada por 160 caracteres de 5 x 8 puntos
ms 32 de 5 x 10 y la segunda por 240 caracteres de 5 x 8 puntos. Ambas se pueden
consultar en el Anexo I.
En la tabla 2 se muestran los caracteres ms importantes de la referida plantilla. Los
cdigos de cada carcter vienen dados en hexadecimal y se puede comprobar que
coinciden con los cdigos en ASCII.
Cdigo Carac. Cdigo
$20
Espacio
$30
$21

$31
$22

$32
$23
#
$33
$24
$
$34
$25
%
$35
$26
&
$36
$27

$37
$28
(
$38
$29
)
$39
$2A
*
$3A
$2B
+
$3B
$2C
,
$3C
$2D
$3D
$2E
.
$3E
$2F
/
$3F

Carac.
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?

Cdigo
$40
$41
$42
$43
$44
$45
$46
$47
$48
$49
$4A
$4B
$4C
$4D
$4E
$4F

Carac.
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O

Cdigo
$50
$51
$52
$53
$54
$55
$56
$57
$58
$59
$5
$5B
$5C
$5D
$5E
$5F

Carac.
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_

Cdigo
$60
$61
$62
$63
$64
$65
$66
$67
$68
$69
$6A
$6B
$6C
$6D
$6E
$6F

Carac.
`
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O

Cdigo
$70
$71
$72
$73
$74
$75
$76
$77
$78
$79
$7A
$7B
$7C
$7D
$7E
$7F

Carac.
P
Q
R
S
T
U
V
W
X
Y
Z
{
|
}
~

Tabla 2 Conjunto de caracteres de uso ms comn.

En el caso aqu referido, la matriz de cada posicin de la pantalla LCD es de 5 x 8


puntos, por lo que slo tiene sentido usar la segunda plantilla de 240 caracteres
predefinidos.

3.2.3 La memoria del display


El display dispone de dos memorias de acceso aleatorio. La DDRAM (Display Data
RAM) donde se guardan los datos que se presentan en la pantalla y consta de 80
posiciones de 8 bits, es decir, 80 caracteres, y la CGRAM (Character Generator RAM)
que permite definir caracteres de usuario diferentes de los predefinidos en la CGROM.
Veamos a continuacin su funcionamiento:
3.2.3.1 Display Data RAM (DDRAM)
Como ya se ha comentado dispone de 80 posiciones destinadas a guardar los caracteres
a representar en la pantalla. Esta memoria se puede configurar en el modo de una lnea,
en cuyo caso tendr las 80 direcciones consecutivas, o en modo de dos lneas (se
entiende que slo tiene sentido si la pantalla LCD es de dos lneas), quedando

fraccionada en dos bloques de 40 posiciones consecutivas por lnea. Existe una tercera
variante implementada con un LCD de cuatro lneas en la que se fracciona en cuatro
bloques de 20 posiciones.
DDRAM
Modo de 1 lnea.
1

Direccin

00

5
01

02

79 80
03

04

05

06

4E

4F

26

27

66

67

Modo de 2 lneas.
1

39 40

Lnea 1

00

01

02

03

04

05

06

Lnea 2

40

41

42

43

44

45

46

Figura 3 Configuracin en los modos de una y dos lneas.

Como la pantalla LCD tiene nicamente 16 posiciones, se puede pensar en el display


como en un display virtual de una lnea de 80 caracteres, o bien, dos de 40, donde la
pantalla real es una ventana en la que se visualizan una o dos lneas de 16 caracteres.
Mas adelante se ver cmo se puede desplazar la pantalla real sobre el display virtual.
Cualquier operacin de escritura en el display se trata, en realidad, de una escritura en
la DDRAM y ser visible o no en la pantalla dependiendo de la posicin relativa que en
un momento dado tenga la ventana de visualizacin.

Figura 4 Display virtual y pantalla LCD.

3.2.3.2 Character Generator RAM (CGRAM)


La memoria CGRAM permite definir caracteres de usuario. En total consta de 64
posiciones de 5 bits. El controlador HD44780U puede trabajar con pantallas LCD
cuyos caracteres estn definidos mediante matrices tanto de 5 x 10 como de 5 x 8
puntos. Cada fila de cada matriz se corresponde con una direccin de memoria y cada

uno de los cinco bits se corresponde, a su vez, con un punto de la fila, de modo que un 1
indica que el punto est encendido y un 0 que est apagado.
Para direccionar la CGRAM se precisan 6 bits (26 = 64). En el caso de un LCD con
matrices de 5 x 10 puntos, la memoria se divide en cuatro bloques de 10 posiciones,
correspondiendo cada posicin con una de las 10 filas de la matriz. Los primeros cuatro
bits de la direccin CGRAM servirn para determinar la fila de la matriz y los dos bits
restantes sern para direccionar cada uno de los cuatro bloques posibles. Si el LCD
tiene matrices de 5 x 8, como es el caso que aqu se describe, la memoria se divide en
ocho bloques de ocho posiciones, de modo que con los tres bits de menor peso se
recorren las filas de cada bloque y con los tres de mayor peso se recorren cada uno de
los ocho caracteres de usuario.
Direccin
CGRAM
000
001
010
011
000
100
101
110
111
000
001
010
011
001
100
101
110
111

1
0
1
0
1
0
0
0
0
0
0
0
1
0
0
1

000
001
010
011
100
101
110
111

0
0
1
1
1
1
1
0

111

Dato
CGRAM
0 0 0 1
1 0 1 0
1 1 1 1
0 1 0 0
1 1 1 1
0 1 0 0
0 1 0 0
0 0 0 0
1 1 1 0
1 1 1 0
1 1 1 0
0 1 0 0
1 1 1 1
0 1 0 0
1 0 1 0
0 0 0 1
0
1
0
0
0
0
1
0

1
0
0
0
1
1
1
0

0
1
0
0
0
0
1
0

0
0
1
1
1
1
1
0

Tabla 3 - Creacin de caracteres de usuario.

3.2.4 Seales de control y registros internos


Para el control se dispone de cuatro seales: validacin de datos (E), seleccin de
lectura/escritura (R/W), seleccin de registro (RS) e indicador de sistema ocupado
(BF). Los registros internos son tres: el contador de direcciones (AC), el registro de
instrucciones (IR) y el de datos (DR).
3.2.4.1 Seales de control

Validacin de datos, Enable (E): Cuando no se utiliza el


display esta seal debe permanecer a 0. Cuando se desea realizar
una transferencia de informacin (lectura o escritura) se ponen los
datos y las seales de control deseadas y se valida la operacin con
E=1, debiendo permanecer en ese estado lgico durante un tiempo
superior a 500 ns., para que se realice correctamente la captura de los
datos en el registro. Cuando se devuelve la seal de validacin a su
estado de reposo, E=0, la ejecucin de la instruccin se inicia con el
flanco de bajada de esta seal. El periodo completo de la seal de
validacin, formado por el estado lgico 1 seguido del estado lgico
0, no podr ser inferior a 1 s.

Seleccin de lectura/escritura, Read/Write (R/W): Se selecciona


R/W=0 para realizar una operacin de escritura en el display y
R/W=1 para la lectura de datos del mismo.

Seleccin de registro, Register Select (RS): Con RS=0 se


selecciona el registro de instrucciones (IR), y con RS=1 se
selecciona el de datos (DR).

Indicador de sistema ocupado, Busy Flag (BF): Es una seal


que proporciona el sistema y que, con valor 1 (BF=1), indica que el
display est ejecutando una operacin interna y no podr aceptar
una nueva instruccin hasta que termine, momento en el cual pasa a
valor 0 (BF=0). El BF podr ser ledo en el ltimo bit del registro de
instrucciones (IR7) para lo que se deber seleccionar el registro IR
en modo lectura (RS=0, R/W=1).

Figura 5 Ejemplo de cronograma de las seales de control. (Extrado del catlogo de Hitachi).

3.2.4.2 Registros internos

Contador de direcciones, Address Counter (AC): Apunta la


direccin de memoria DDRAM o CGRAM sobre la que se escribe o
se lee un dato. Su valor se incrementa o decrementa automticamente
en una unidad despus de cada operacin segn se haya configurado
previamente. Para modificar o leer la direccin del AC se utilizan los
siete primeros bits del registro IR (IR0-IR6). El valor de este
contador es utilizado tambin por el circuito de control del cursor,
que lo colocar en la posicin que ste indica.

Registro de instrucciones, Instruction Register (IR): En este


registro se escriben las instrucciones que se desea que el display
ejecute. Tambin se puede leer el valor del contador de direcciones
(AC) en los primeros 7 bits (IR0 - IR6), teniendo disponible en el
octavo (IR7) la seal indicadora de sistema ocupado (BF).

Registro de datos, Data Register, (DR): Se utiliza para las


operaciones de escritura y lectura en la memoria DDRAM o
CGRAM.

En la tabla 4 se resumen las seales de control asociadas a la seleccin de registro.


RS
0
0
1
1

R/W
0
1
0
1

Accin
Operacin de escritura en IR (instruccin u operacin interna).
Operacin de lectura de IR (permite leer el AC (IR0-IR6) y el BF (IR7)).
Operacin de escritura en DR (escritura del dato en la DDRAM o CGRAM).
Operacin de lectura de DR (lectura del dato de la DDRAM o CGRAM).

Tabla 4 Seleccin de registro.

3.2.5 Conjunto de instrucciones


El LCD se controla mediante instrucciones que se resumen en la tabla 5. En las lneas
siguientes se ofrece una breve descripcin de cada una.
INSTRUCCION
Borrar display.
Cursor a inicio.
Establecer modo de trabajo.
Control ON/OFF del display.
Desplazamiento del cursor / display.
Establecer modo de interfaz.
Fijar direccin de CGRAM.
Fijar direccin de DDRAM.
Lectura de BF y AC
Escritura de datos en CGRAM/DDRAM
Lectura de datos en CGRAM/DDRAM

I/D = 1
S=1
S/C = 1
R/L = 1
DL = 1
N=1
F=1
BF = 1

RS
0
0
0
0
0
0
0
0
0
1
1

Incremento.
Display acompaa al desplazamiento.
Desplazar el display.
Desplazamiento a derecha.
Modo 8 bits.
Dos lneas.
Fuentes de 5 x 10 puntos.
Ocupado internamente.

R/W
0
0
0
0
0
0
0
0
1
0
1

DB7
0
0
0
0
0
0
0
1
BF

I/D = 0
S=0
S/C = 0
R/L = 0
DL = 0
N=0
F=0
BF = 0

DB6
0
0
0
0
0
0
1
ADD
AC

DB5
0
0
0
0
0
1
ACG
ADD
AC

DB4 DB3
0
0
0
0
0
0
0
1
1
S/C
DL
N
ACG ACG
ADD ADD
AC
AC
Datos a escribir
Lectura de datos

DB2
0
0
1
D
R/L
F
ACG
ADD
AC

DB1
0
1
I/D
C
----ACG
ADD
AC

DB0
1
--S
B
----ACG
ADD
AC

Duracin
1.52 ms.
37 s.
37 s.
37 s.
37 s.
37 s.
37 s.
37 s.
0 s.
37 s.
37 s.

Decremento.
Display quieto.
Desplazar el cursor.
Desplazamiento a izquierda.
Modo 4 bits.
Una lnea.
Fuentes de 5 x 8 puntos.
Listo para recibir comandos.

Tabla 5 Resumen de instrucciones.

3.2.5.1

Borrar display, Clear Display

CDIGO: $01

DESCRIPCIN: Esta instruccin escribe el carcter blanco ($20)


en todas las posiciones de la DDRAM, pone el contador de
direcciones (AC) a cero y devuelve el display a su posicin de inicio
si se encuentra desplazado. Tambin lo configura en el modo de
incremento (I/D=1).

TIEMPO DE EJECUCIN: 1.52 ms.

3.2.5.2 Cursor a inicio, Return Home

CDIGO: $02

DESCRIPCIN: Enva el cursor a la posicin 0, es decir, carga la


direccin 0 en el contador de direcciones (AC) y devuelve el display
a la posicin de inicio.
9

TIEMPO DE EJECUCIN: 37 s.

3.2.5.3 Establecer modo de trabajo, Entry Mode Set

CDIGO: 0 0 0 0 0 1 I/D S [$0 (4-7)]

DESCRIPCIN: Cada vez que se realiza una lectura o escritura el


contador de direcciones (AC) se incrementa o decrementa en funcin
del valor del bit I/D.
I/D: Cuando I/D=1, el contador de direcciones se incrementa y el
cursor se mueve hacia la derecha y cuando es I/D=0 se decrementa y
el cursor se mueve hacia la izquierda.
S: Con el bit S=1 se indica al display real que se desplace junto con
el cursor, con lo que da la impresin de que es el display el que se
desplaza, ya que cursor y display real mantienen la misma posicin
relativa. Si S=0 el display permanece quieto y podemos observar
cmo el cursor avanza con cada escritura.

TIEMPO DE EJECUCIN: 37 s.

3.2.5.4 Control ON/OFF del display

CDIGO: 0 0 0 0 1 D C B [$0 (8-F)] (Valor tpico $0E)

DESCRIPCIN: Con este comando se activan y desactivan el


display, el cursor y la funcin de parpadeo.
D: Cuando D=0, el display funciona normalmente pero la pantalla
LCD est apagada. Todos los caracteres que se escriban
permanecern en la DDRAM y se harn visibles en el momento en
que hagamos D=1.
C: Con C=1 se activa el cursor y con C=0 se desactiva, es decir, no
se ve.
B: Si B=1, el carcter que se halla en la posicin del cursor parpadea.
Si B=0, no parpadea.

TIEMPO DE EJECUCIN: 37 s.

10

3.2.5.5 Desplazamiento del cursor o display

CDIGO: 0 0 0 1 S/C R/L 0 0

DESCRIPCIN: Esta instruccin desplaza el cursor o el display


una posicin a derecha o izquierda, segn se indique con los bits S/C
y R/L. S/C=1 desplaza el display real y S/C=0 desplaza el cursor.
Con

R/L=1/0

se

indica

que

el

desplazamiento

sea

derecha/izquierda.

TIEMPO DE EJECUCIN: 37 s.

3.2.5.6 Establecer modo de interfaz, Function Set

CDIGO: 0 0 1 DL N F 0 0

DESCRIPCIN: Con esta instruccin se configuran tres aspectos


del display: La longitud del bus de datos, el nmero de lneas y el
tipo de fuentes.
DL: Si DL=1, se configura un bus de datos de 4 bits, usando slo los
de mayor peso del puerto (DB4 a DB7) y, si DL=0, el bus es de ocho
bits (DB0 a DB7). En el modo de cuatro bits cada instruccin se
enva en dos bloques consecutivos.
N: Si N=1, el controlador trabaja en el modo de dos lneas (slo tiene
sentido con un LCD de dos lneas) y si N=0 trabaja en el modo de
una lnea.
F: Con F=1 se elige el juego de caracteres de 5 x 10 puntos y si F=0
el juego a utilizar es el de 5 x 8 puntos.

TIEMPO DE EJECUCIN: 37 s.

3.2.5.7 Fijar direccin de CGRAM

CDIGO: 0 1 A5 A4 A3 A2 A1 A0

CDIGO TPICO: 0 1 0 0 0 0 0 0 (Acceso a la posicin cero de la


CGRAM)

DESCRIPCIN: La direccin especificada en A5A0 se copia en el


contador de direcciones para el acceso a la CGRAM.
11

TIEMPO DE EJECUCIN: 37 s.

3.2.5.8 Fijar direccin de DDRAM

CDIGO: 1 A6 A5 A4 A3 A2 A1 A0

CDIGO TPICO: 1 0 0 0 0 0 0 0 (Acceso a la posicin cero de la


DDRAM).

DESCRIPCIN: La direccin (A6-A0) se copia en el contador de


direcciones para el acceso a la DDRAM.

TIEMPO DE EJECUCIN: 37 s.

3.2.5.9 Escritura de datos en la CGRAM o DDRAM

CDIGO: 1 0 D D D D D D D D

DESCRIPCIN: Escribe el dato especificado en la DDRAM o


CGRAM. La escritura en una u otra memoria viene determinada por
la operacin previa. En el caso de iniciarse una escritura nueva,
mediante la operacin de fijar una direccin de la CGRAM o
DDRAM. Por defecto se trabaja siempre en la DDRAM. No debe
olvidarse que tras cada escritura el AC se incrementa o decrementa
automticamente.

3.2.5.10

TIEMPO DE EJECUCIN: 37 s.

Lectura de datos de la CGRAM o DDRAM

CDIGO: 1 1 D D D D D D D D

DESCRIPCIN: Esta instruccin funciona de forma idntica a la


escritura y permite conocer los datos grabados en estas memorias.

TIEMPO DE EJECUCIN: 37 s.

3.2.6 Secuencia tpica de inicializacin del LCD


Cuando se va a comenzar a utilizar el display, es necesario configurar previamente el
dispositivo. Ello se hace a travs de una secuencia de inicializacin con la que se define,
el tamao del bus de datos, el nmero de lneas, el juego de caracteres, etc., tras la cual
ya se puede enviar caracteres al display.
12

Hay que tener en cuenta que el controlador HS44780U dispone de un circuito de reset
interno que, al conectar la alimentacin, realiza, durante 10 ms., la siguiente secuencia:

1. Borra display ($01).


2. Establece interfaz de datos de 8 bits, una lnea y fuentes de 5 x 8
puntos ($20).
3. Display, cursor y parpadeo apagados ($08).
4. Modo de incremento con el display real quieto ($06).
Partiendo de esta configuracin inicial parece necesario establecer una secuencia de
inicio para configurarlo conforme a la forma de conexin del hardware y a la aplicacin
que se le vaya a dar. A continuacin se describe una secuencia tpica, vlida para la
operacin en 8 y 4 bits.
1. Interfaz de datos de 8 o 4 bits, una lnea y fuentes de 5 x 8 puntos
($20 o $30).
2. Incrementar contador de direcciones y display quieto ($06).
3. Display y cursor encendidos y sin parpadeo ($0E).
Tras esta secuencia se encuentra listo para imprimir datos.

3.2.7 Formas de conexin a un microcontrolador


A la hora de conectar el display a un microcontrolador existen dos factores que van a
determinar la forma de conexin y que son: la longitud del bus de datos y los modos de
control del LCD. A su vez, el microcontrolador va a jugar un papel determinante en
funcin de los recursos que tenga disponibles, como son la memoria, puertos de entrada,
salida o bidireccionales, etc.
3.2.7.1 Longitud del bus de datos
El bus de datos del display es de 8 bits, pero puede configurarse para trabajar con
cuatro, multiplexando los bytes en grupos de 4 bits (nibbles). Esto permite ahorrar 4
puntos de conexin (pins) del puerto de entrada/salida de datos, pero tiene el
inconveniente de que el software de control es ms complejo, ya que debe controlar
adems el proceso de multiplexacin.

13

3.2.7.2 Modos de control del LCD


Existen dos formas de controlar el LCD dependiendo de si se usa o no el bit indicador
de ocupado:

Control en bucle cerrado: En este caso se observa el bit de ocupado


(BF) hasta que el display termine la ejecucin de la instruccin en
curso. Esto se podr hacer con diferentes tcnicas. Por ejemplo
mediante un bucle de observacin hasta que finalice la instruccin en
ejecucin (BF=0), o bien, provocando un proceso de interrupcin
cuando se cumple esa condicin BF=0, etc. Para realizar el control en
bucle cerrado es necesario conectar el pin DB7 del display a un
puerto bidireccional que deber configurarse como salida o entrada
de forma alternativa, cada vez que se lee el BF o se enva un dato.

Control en bucle abierto: De este segundo modo no se realiza


comprobacin alguna sobre el estado del display. Se considera a ste
como si de un componente pasivo se tratara. Esto se puede hacer si se
tienen en cuenta los tiempos mximos de ejecucin de las
instrucciones indicados por el fabricante. Despus de enviar una
instruccin, se espera un tiempo tal que asegure que la instruccin ha
finalizado antes de enviar la siguiente.

Si se opta por este control, se puede realizar una segunda simplificacin en el hardware
derivada de considerar que no va a ser necesario leer ningn registro del display, con lo
que se podra configurar de modo permanente en modo escritura. De este modo no es
necesario dedicar una lnea de control para esta funcin (R/W=0) y por tanto slo son
necesarias dos seales de control (RS y E).
El control en bucle cerrado goza de una mayor velocidad ya que se establece un dialogo
entre el LCD y el micro. Tambin es cierto que la complejidad del software es mucho
mayor ya que hay que realizar muchas mas operaciones diferentes para cada instruccin
que se enva, pero se pueden evitar los tiempos de espera del control en bucle abierto y
dedicarlos a procesar otras tareas. En funcin de la aplicacin que se quiera disear se
optar por la velocidad de la primera solucin o la sencillez de la segunda.

14

Bucle cerrado
Bucle abierto

Bus de 4 bits
3 pins de salida para el control
4 pins E/S
2 pins de salida para el control
4 pins de salida para los datos

Bus de 8 bits
3 pins de salida para el control
8 pins de E/S para los datos
2 pins de salida para el control
8 pins de salida para los datos

Tabla 6 Puntos de conexin necesarios segn las diferentes opciones.

3.3 Ejemplos de control del LCD con el micro MC68331


La potencia del microcontrolador 68331 y su variedad de puertos permite implementar
cualquier control que se desee de forma aislada. La eleccin de la forma de conexin y
del tipo de control no es una decisin que se deba tomar a priori, sino que debe ir
integrado en el diseo global de la aplicacin que se quiera realizar y de la que forma
parte el display como un mdulo de presentacin. La mayor o menor complejidad de la
aplicacin, el nmero de seales que es preciso manejar, la memoria disponible, la
necesidad de que funcione en tiempo real, etc., son las caractersticas que, de verdad,
van a determinar la conexin y el control. Es interesante tener siempre presente que,
ante varias soluciones alternativas que cumplen con los objetivos de diseo y fiabilidad,
siempre es deseable escoger la ms sencilla.
El objetivo de este ejemplo es ofrecer un punto de partida a aquellos alumnos que
necesiten utilizar el display para la presentacin de datos. Por ello se han implementado
sendos controles, en bucle abierto y en bucle cerrado, de una forma estructurada,
describiendo brevemente cmo se han resuelto algunos de los problemas relativos a su
puesta en funcionamiento.

3.3.1 Ejemplo de control en bucle abierto


3.3.1.1 Descripcin de la aplicacin de control
La aplicacin va a consistir en la realizacin de una serie de acciones que se detallan en
la lista que se muestra a continuacin:
1. Escribir la frase, PRIMERA PRUEBA. ESCRITURA NORMAL
DE TEXTO.
2. Escribir de nuevo, ESPERE UNOS SEGUNDOS DESPUES DE
APAGARSE EL DISPLAY.
3. Apagar el display.
15

4. Escribir en la DDRAM el siguiente prrafo: En un lugar de la


Mancha de cuyo nombre no quiero acordarme, no ha mucho .......
sin que aparezca en la pantalla.
5. Encender la pantalla e ir avanzando el display, primero hacia delante
y despus hacia detrs un total de tres veces seguidas en cada sentido.
3.3.1.2 Descripcin de la conexin y modo de control
En primer lugar se realizar la conexin de la alimentacin y de la seal de contraste de
cualquiera de las formas descritas en 2.1. A continuacin hay que conectar las seales de
control y datos al microcontrolador.
En este ejemplo se va a optar por un control en bucle abierto y con ocho bits de datos.
Las tres seales de control (E, RS y R/W) se van a conectar a los bits 5 (PC4), 6 (PC5)
y 7 (PC6) del puerto C del micro y las de datos al puerto E. Cabe observar que sera
posible prescindir de la seal R/W conectndola a masa de forma permanente,
economizando as un bit del puerto.
3.3.1.3 Implementacin en cdigo ensamblador del programa de
control
A continuacin se adjunta el cdigo en lenguaje ensamblador que realiza las tareas
arriba descritas. El inters del programa reside en las secciones INSTRUCCIONES
DEL LCD y SERVICIOS DEL DISPLAY. En la primera se han implementado todas las
instrucciones que puede ejecutar el LCD y en la segunda algunos servicios de ms alto
nivel que permiten realizar acciones de utilidad general ms complejas a partir de las
instrucciones de una forma trasparente para el usuario. Para ello los servicios son
invocados mediante una excepcin TRAP #n sin la necesidad de conocer cmo
funcionan.
******************************************************************************
*

REGISTROS SIM

******************************************************************************
SIMCR

EQU $FFFA00

* Controla la configuracin del sistema ($00CF).

SYNCR

EQU $FFFA04

* Fija frecuencia y modo de operacin del reloj ($3F08).

RSR

EQU $FFFA06

* Guarda la causa de un reset (Ej.-$80, reset hardware).

PORTE

EQU $FFFA11

* Registro de lectura y escritura en el puerto E.

PORTE1 EQU $FFFA13

* Tiene exactamente la misma funcin que el anterior.

DDRE

* Determina el sentido del puerto E pin a pin.

EQU $FFFA15

16

PEPAR

EQU $FFFA17

* Asignacin del puerto E (Puerto o control de BUS).

PORTF

EQU $FFFA19

* Registro de lectura y escritura en el puerto F.

PORTF1 EQU $FFFA1B

* Tiene exactamente la misma funcin que el anterior.

DDRF

EQU $FFFA1D

* Determina el sentido del puerto F pin a pin.

PFPAR

EQU $FFFA1F

* Asignacin del puerto F (Puerto F o control de BUS).

PICR

EQU $FFFA22

* Configuracin de interrupciones peridicas ($000F).

PITR

EQU $FFFA24

* Contiene la cuenta del timer peridico ($0000).

SYPCR

EQU $FFFA21

* Controla las funciones de monitorizacin del sistema


* como es el caso del Watchdog. ($40 anula watchdog).

SWSR

EQU $FFFA27

* Se debe escribir peridicamente si Watchdog activado.

CSPAR0 EQU $FFFA44

* Sirve junto con CSPAR1 para configurar la funcin de

CSPAR1 EQU $FFFA46

* los pins de Chip Select (CS, Port C, etc.).

PORTC

* Registro de escritura en el puerto C.

EQU $FFFA41

******************************************************************************
*

REGISTROS GPT-PWM

******************************************************************************
GPTMCR

EQU $FFF900

* Configuracin del GPT.

ICR

EQU $FFF904

* Configuracin de interrupciones del GPT.

DDRGP

EQU $FFF906

* Determina el sentido del puerto GP.

PORTGP

EQU $FFF907

* Registro de lectura y escritura del puerto GP.

OC1M

EQU $FFF908

* Mscara para asignar los pin de captura de OC.

OC1D

EQU $FFF909

* Registro de datos a comparar con el puerto OC.

TCNT

EQU $FFF90A

* Registro del GPT asociado a las capturas IC, OC y PAI.

PACTL

EQU $FFF90C

* Configuracin del acumulador de pulsos PAI.

PACNT

EQU $FFF90D

* Es el contador de registro de eventos del PAI.

TIC1

EQU $FFF90E

* Capturan el TCNT cuando se registra un evento en IC1.

TIC2

EQU $FFF910

* Capturan el TCNT cuando se registra un evento en IC2.

TIC3

EQU $FFF912

* Capturan el TCNT cuando se registra un evento en IC3.

TOC1

EQU $FFF914

* Cuando coincide con TCNT causa eventos en los pin OC.

TOC2

EQU $FFF916

* Si el valor coincide con TCNT causa un evento en OC2.

TOC3

EQU $FFF918

* Si el valor coincide con TCNT causa un evento en OC3.

TOC4

EQU $FFF91A

* Si el valor coincide con TCNT causa un evento en OC4.

TI4O5

EQU $FFF91C

* Pin compartido (Puede realizar una funcin TIC o TOC).

TCTL1

EQU $FFF91E

* Configura el modo de comparacin y nivel de salida.

TCTL2

EQU $FFF91F

* Configura que flanco provoca la captura en los IC.

TMSK1

EQU $FFF920

* Habilita las interrupciones de IC y OC.

TMSK2

EQU $FFF921

* Habilita las interrupciones del PAI y del TIMER.

TFLG1

EQU $FFF922

* Registro de flags de interrupciones de IC y OC.

17

TFLG2

EQU $FFF923

* Registro de flags de interrupciones del PAI y TIMER

CFORC

EQU $FFF924

* Fuerza una salida en los pin OC y PWM.

PWMC

EQU $FFF925

* Configuracin del PWM.

PWMA

EQU $FFF926

* Determina el ancho de pulso. ($80 es medio ciclo)

PWMB

EQU $FFF927

* Determina el ancho de pulso. ($80 es medio ciclo)

PWMCNT

EQU $FFF928

* Registro del contador del PWM.

PWMBUFA EQU $FFF92A

* Buffer para prevenir glitches cuando modificamos PWMA.

PWMBUFB EQU $FFF92B

* Buffer para prevenir glitches cuando modificamos PWMB.

PRESCL

* Guarda el valor del multiplicador del GPT.

EQU $FFF92C

******************************************************************************
*

TIPOS DE RETARDO

******************************************************************************
CORTO

EQU $03FF

* Del orden de 100us.

LARGO

EQU $BFFF

* Del orden de 5ms.

RETARDO

EQU $6FFF

* Se usa para el avance de caracteres.

******************************************************************************
*

CONSTANTES DE INTERS

******************************************************************************
INI_DR

EQU $00

* Inicio de lnea nica de caracteres.

FIN_DR

EQU $4F

* Fin lnea nica de caracteres.

L1_INI_DR

EQU $00

* Inicio de la primera lnea.

L1_FIN_DR

EQU $27

* Fin de la primera lnea.

L2_INI_DR

EQU $40

* Inicio de la segunda lnea.

L2_FIN_DR

EQU $67

* Fin de la segunda lnea.

LCD_LONG

EQU $0F

* Longitud de la pantalla del LCD.

******************************************************************************
*

PUERTOS DEL DISPLAY

******************************************************************************
BYTE_DATA

EQU PORTE

* Puerto de datos.

BYTE_CONTROL EQU PORTC

* Puerto de control.

BIT_ENABLE

* Se usa para controlar el proceso de comunicacin.

EQU 4

* con el controlador del display.


BIT_RS

EQU 5

* Seleccin del tipo de registro al que se escribe:


* 0 - Registro de Instrucciones (IR).
* 1 - Registro de Datos (DR).

BIT_RW

EQU 6

* Cambio entre los modos de lectura y escritura.

18

******************************************************************************
*

VECTORES DEL RESET

******************************************************************************
ORG $0
PILA_RESET DC.L FIN_PILA
PC_RESET DC.L PRINCIPAL

******************************************************************************
*

VECTORES DE INTERRUPCIN

******************************************************************************
ORG $80
VECTOR0

DC.L

DRIVER_DISPLAY

******************************************************************************
*

PUNTERO DE PILA

******************************************************************************
ORG $4000
PILA DS.L 200
FIN_PILA:

******************************************************************************
*

LISTA DE MENSAJES

******************************************************************************
ORG $2000
MENSAJES

DC.L MENS1,MENS2,MENS3

MENS1 DC.B

'PRIMERA PRUEBA. ESCRITURA NORMAL DE TEXTO.',$00

MENS2 DC.B

'ESPERE UNOS SEGUNDOS DESPUES DE APAGARSE EL DISPLAY.',$00

MENS3 DC.B 'En un lugar de la Mancha de cuyo nombre no quiero acordarme, no


ha mucho .......',$00

******************************************************************************
*

SUBRUTINAS

******************************************************************************
ORG $1000

******************************************************************************
*

CONFIGURACION DEL HARDWARE DEL MICRO

******************************************************************************

19

*************************** INHAB_WDOG ****************************


* Inhabilita el Watchdog que es una funcin de monitoriracin del *
* sistema para detectar la entrada en un bucle infinito.

*******************************************************************
INHAB_WDOG:
MOVE.B #$40,SYPCR

* Inhabilitamos WatchDog

RTS
*----------------------------------------------------------------------------*

************************** PORT_EC_CFG ****************************


* Con esta rutina se configuran los puertos E y C que son los que *
* se usan para controlar el display y el teclado.

*******************************************************************
PORT_EC_CFG
MOVE.B

#$FF,DDRE

* PE0..PE7 salidas.

MOVE.B

#$00,PEPAR

* Configura el registro de control del puerto E.

MOVE.B

#$00,CSPAR0

* PC0-PC2 utilizables.

MOVE.W

#$0000,CSPAR1

* PC3-PC6 utilizables.

MOVE.B

#$00,PORTE

MOVE.B

#$0F,PORTC

RTS
*----------------------------------------------------------------------------*
******************************************************************************
*

RUTINAS DE CONTROL

******************************************************************************
***************************** DELAY *******************************
* Produce un retardo cuya duracin viene determinada por el valor *
* almacenado en el registro D1.

*******************************************************************
DELAY
SUB.L #1,D1
BNE DELAY
RTS
*----------------------------------------------------------------------------*
***************************** TOGGLE ******************************
* Provoca la ejecucin de la instruccin, generando un pulso de

* duracin determinada por el valor del registro D2 en la lnea

* Enable del LCD.

*******************************************************************

20

TOGGLE
MOVE.L D1,-(A7)
MOVE.L D2,D1
BSET.B #BIT_ENABLE,BYTE_CONTROL
BSR DELAY
MOVE.L D2,D1
BCLR.B #BIT_ENABLE,BYTE_CONTROL
BSR DELAY
MOVE.L (A7)+,D1
RTS
*----------------------------------------------------------------------------*

******************************************************************************
*

INSTRUCCIONES LCD

******************************************************************************
************************** CFG_DISPLAY ****************************
* Configura el modo de funcionamiento del display. Bsicamente se *
* reduce a tres aspectos:

1 - Comunicacin con el display con 8 o 4 bits.

2 - 1 o 2 lneas en pantalla.

3 - Dos tipos de fuentes 5x8 o bien 5x10 puntos.

* Suprimiendo el asterisco correspondiente se puede modificar la

* opcin seleccionada por defecto.

* Retardo necesario CORTO

*******************************************************************
CFG_DISPLAY
MOVE.B #$30,BYTE_DATA

* Modo 8 bits, una lnea, fuentes 5x8 puntos.

BCLR.B #4,BYTE_DATA

* Modo 4 bits.

BSET.B #3,BYTE_DATA

* Habilita 2 lneas.

BSET.B #2,BYTE_DATA

* Fuentes de 5x10 puntos.

BSR TOGGLE
RTS
*----------------------------------------------------------------------------*

*************************** MODO_AVC ******************************


* El cursor avanza cuando se escribe un carcter en el registro

* DR. El display permanece esttico.

* Retardo necesario CORTO.

*******************************************************************

21

MODO_AVC
MOVE.B #$06,BYTE_DATA * Cursor adelante, display no acompaa.
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*

*************************** MODO_AVT ******************************


* El cursor y el display avanzan solidariamente cuando se escribe *
* un carcter en el registro DR.

* Retardo necesario CORTO.

*******************************************************************
MODO_AVT
MOVE.B #$07,BYTE_DATA * Cursor adelante, display acompaa.
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*

*************************** MODO_RTC ******************************


* El cursor retrocede cuando se escribe un carcter en el regis-

* tro DR. El display permanece esttico.

* Retardo necesario CORTO.

*******************************************************************
MODO_RTC
MOVE.B #$04,BYTE_DATA * Cursor atrs, display no acompaa.
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*

*************************** MODO_RTT ******************************


* El cursor y el display retroceden solidariamente cuando se es-

* cribe un carcter en el registro DR.

* Retardo necesario CORTO.

*******************************************************************

MODO_RTT
MOVE.B #$05,BYTE_DATA * Cursor atrs, display acompaa.
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*

22

************************** MODO_NORMAL ****************************


* Se configura el modo del display. Por defecto estarn tanto el

* display como el cursor encendidos y sin parpadear el carcter

* donde se encuentra el cursor.

* Retardo necesario CORTO

*******************************************************************
MODO_NORMAL
MOVE.B #$0E,BYTE_DATA

* Display y Cursor ON, blinkin OFF

BCLR.B #2,BYTE_DATA

* Display OFF

BCLR.B #1,BYTE_DATA

* Cursor OFF

BSET.B #0,BYTE_DATA

* Blinking ON

BSR TOGGLE
RTS
*----------------------------------------------------------------------------*

**************************** MODO_OFF *****************************


* Produce el apagado de la pantalla del LCD. Se puede seguir en-

* viando ordenes al display que ser n ejecutadas. La nica dife-

* rencia es que no aparece reflejado hasta que no se enciende de

* el LCD.

* Retardo necesario CORTO

*******************************************************************
MODO_OFF
MOVE.B #$08,BYTE_DATA

* Display y Cursor ON, blinkin OFF

BSR TOGGLE
RTS
*----------------------------------------------------------------------------*

***************************** CLEAR *******************************


* Borra el contenido del display y situa el cursor a la izquierda *
* Retardo necesario INDEFINIDO

*******************************************************************

CLEAR
MOVE.B #$01,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*

23

************************** RETURN_HOME *****************************


* Devuelve el cursor a la primera posicin conservando el conteni- *
* de la memoria del display.

* Retardo necesario LARGO

********************************************************************
RETURN_HOME
MOVE.B #$02,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*

*************************** CURS_IZQ ******************************


* Mueve el cursor a la izquierda sin modificar el texto.

* Retardo necesario CORTO

*******************************************************************
CURS_IZQ
MOVE.B #$10,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*

*************************** CURS_DCHA *****************************


* Mueve el cursor a la derecha sin modificar el texto.

* Retardo necesario CORTO

*******************************************************************
CURS_DCHA
MOVE.B #$14,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*

*************************** DISP_IZQ ******************************


* Desplaza la ventana del display hacia la izquierda.

* Retardo necesario CORTO

*******************************************************************
DISP_IZQ
MOVE.B #$1C,BYTE_DATA
BSR TOGGLE
RTS

24

*************************** DISP_DCHA *****************************


* Desplaza la ventana del display hacia la derecha.

* Retardo necesario CORTO

*******************************************************************
DISP_DCHA
MOVE.B #$18,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*

************************** CGRAM_ADDR *****************************


* Coloca la direccin indicada en el contador de la Memoria del

* Generador de Caracteres (CGRAM). Este generador permite definir *


* 8 caracteres de usuario en el modo 5x8 y cuatro en el de 5x10

* puntos. Para un correcto uso de la instruccin deberemos escri- *


* bir una de las 64 direcciones posibles (de $00 a $3F) en

* BYTE_DATA.

* Retardo necesario CORTO

*******************************************************************
CGRAM_ADDR
ADD.B #$40,BYTE_DATA
BSET.B #BIT_RS,BYTE_CONTROL
BSR TOGGLE
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
************************** DDRAM_ADDR *****************************
* Coloca la direccin indicada en el contador de la Memoria de

* Datos del Display (DDRAM). Existen 80 posiciones disponibles

* que sern consecutivas cuando el display trabaje en una nica

* lnea o repartidas en dos grupos de 40 cuando trabaje en el

* modo de dos lneas.

* Vase detalle a continuacin:

- 80 posiciones x 1 lnea

- las direcciones van de $0 a $4F. *

- 40 posiciones x 2 lneas - las direcciones se reparten:

Lnea primera: de $00 a $27.

Lnea segunda: de $40 a $67.

* Retardo necesario CORTO

*******************************************************************

25

DDRAM_ADDR
ADD.B #$80,BYTE_DATA
BSET.B #BIT_RS,BYTE_CONTROL
BSR TOGGLE
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*

*************************** ESCRIBIR ******************************


* Esta instruccin permite escribir en el registro de datos (DR)

* una palabra que puede ir destinada a la memoria del generador

* de caracteres (CGRAM) o a la de datos del display (DDRAM) de-

* pendiendo de cual fu la ltima seleccin. El dato a escribir

* lo pondremos en el puerto de datos (BYTE_DATA).

* Retardo necesario CORTO.

*******************************************************************
ESCRIBIR
BSET.B #BIT_RS,BYTE_CONTROL
BSR TOGGLE
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*

******************************************************************************
*

RUTINAS DE INICIALIZACIN DE DISPOSITIVOS

******************************************************************************
**************************** INI_LCD ******************************
* Esta rutina realiza toda la inicializacin del display tras el

* encendido del mismo. Despus de su ejecucin el display queda

* preparado para recibir ordenes y caracteres.

*******************************************************************
INI_LCD
MOVE.L #CORTO,D2

* Fijamos la duracin de retardo.

BSR CFG_DISPLAY
BSR MODO_NORMAL
BSR CLEAR
RTS
*----------------------------------------------------------------------------*

26

******************************************************************************
*

SERVICIOS DE DISPOSITIVOS

******************************************************************************
******************************************************************************
*

SERVICIOS DEL DISPLAY

******************************************************************************
************************** ESCR_MENSAJE ***************************
* Esta rutina escribe un mensaje completo en el display en el

* sentido natural de escritura cuya direccin de inicio se la pa- *


* samos a travs del registro A0. El smbolo con que deber

ter-

* minarse el mensaje es $00. Si el mensaje es superior a los 16

* caracteres que tiene el LCD, al alcanzar el final de la lnea

* automticamente se cambia del modo AVC al AVT en el que el dis- *


* play acompaa al cursor dando la sensacin de que el texto se

* desplaza.

*******************************************************************
ESCR_MENSAJE
MOVEM.L D0-D2,-(A7)
MOVE.L #LARGO,D2
BSR RETURN_HOME
MOVE.L #CORTO,D2
BSR MODO_AVC
MOVE.B #LCD_LONG,D0

* Cuenta los caracteres escritos en el display.

BUCLE1
TST.B (A0)
BEQ FIN1
MOVE.B (A0)+,BYTE_DATOS
BSR ESCRIBIR
SUB.B #1,D0
BEQ FIN_LIN1
MOVE.L #RETARDO,D1
BSR DELAY
BRA BUCLE1
FIN_LIN1
BSR MODO_AVT

* Cambia al modo AVT para que el display acompae al cursor.

BRA BUCLE1
FIN1
MOVEM.L (A7)+,D0-D2
RTS

27

*************************** DSP_ADELANTE **************************


* Esta rutina desplaza hacia la derecha la pantalla del display

* recorriendo las 80 posiciones del registro DDRAM.

*******************************************************************
DSP_ADELANTE
MOVEM.L D0-D1,-(A7)
MOVE.B #FIN_DR,D0

* Cuenta los caracteres escritos en el display.

BUCLE2
BSR DISP_DCHA
MOVE.L #RETARDO,D1
BSR DELAY
SUB.B #1,D0
BNE BUCLE2
MOVEM.L (A7)+,D0-D1
RTS
*----------------------------------------------------------------------------*

**************************** DSP_ATRAS ****************************


* Esta rutina desplaza hacia la izquierda la pantalla del display *
* recorriendo las 80 posiciones del registro DDRAM.

*******************************************************************
DSP_ATRAS
MOVEM.L D0-D1,-(A7)
MOVE.B #FIN_DR,D0

* Cuenta los caracteres escritos en el display.

BUCLE3
BSR DISP_IZQ
MOVE.L #RETARDO,D1
BSR DELAY
SUB.B #1,D0
BNE BUCLE3
MOVEM.L (A7)+,D0-D1
RTS
*----------------------------------------------------------------------------*
************************** DRIVER_DISPLAY *************************
* Esta rutina realiza el servicio indicado a travs del registro

* D7 con un nmero ordinal. Para llamar a la rutina de servicio

* se coloca el nmero de servicio en el registro D7 y se ejecuta

* un TRAP #0.

*******************************************************************

28

DRIVER_DISPLAY
MOVEM.L D0-D1,-(A7)
CMP.B #1,D7
BEQ

SERVICIO1

CMP.B #2,D7
BEQ

SERVICIO2

CMP.B #3,D7
BEQ

SERVICIO3

SERVICIO1
BSR

ESCR_MENSAJE

BRA

FIN

SERVICIO2
BSR

DSP_ADELANTE

BRA

FIN

SERVICIO3
BSR

DSP_ATRAS

FIN
MOVEM.L (A7)+,D0-D1
RTE
*----------------------------------------------------------------------------*

******************************************************************************
*

PRINCIPAL

******************************************************************************
ORG $400
PRINCIPAL
BSR

INHAB_WDOG

BSR

PORT_EC_CFG

BSR

INI_LCD

MOVEA.L

#MENSAJES,A6

MOVEA.L

(A6)+,A0

MOVE.L

#1,D7

TRAP #0
MOVEA.L

(A6)+,A0

MOVE.L

#1,D7

TRAP #0
BSR MODO_OFF
MOVEA.L

(A6),A0

MOVE.L

#1,D7

29

TRAP #0
BSR MODO_NORMAL
MOVE.B #3,D3
LOOP1
MOVE.L

#2,D7

TRAP #0
SUB.B #1,D3
BNE LOOP1
MOVE.B #3,D3
LOOP2
MOVE.L

#3,D7

TRAP #0
SUB.B #1,D3
BNE LOOP2
FINAL
BRA

FINAL

END

3.3.1.3.1

Observaciones sobre el ajuste de parmetros

Existen ciertos parmetros que ha sido necesario someterlos a un ajuste, como son los
retardos.
3.3.1.3.1.1

Ajuste de la seal de activacin, Enable.

Esta seal es la que gobierna el proceso de comunicacin con el display. La funcin


toggle tiene como objetivo conformar un pulso sobre la lnea de activacin (E). Esta
funcin utiliza una subrutina llamada DELAY que introduce el retardo necesario para
definir el periodo de esta seal. Cada vez que se llama a la funcin TOGGLE, sta
genera un pulso de aspecto ms o menos cuadrado en la seal Enable cuyo periodo
depender del valor que se cargue en el contador de retardo DELAY. A continuacin se
detallan las dos subrutinas:
***************************** DELAY *******************************
* Produce un retardo cuya duracin viene determinada por el valor *
* almacenado en el registro D1.

*******************************************************************
DELAY
SUB.L #1,D1
BNE DELAY
RTS

30

*----------------------------------------------------------------------------*

***************************** TOGGLE ******************************


* Provoca la ejecucin de la instruccin, generando un pulso de

* duracin determinada en la lnea Enable del LCD.

*******************************************************************
TOGGLE
MOVE.L D2,D1
BSET.B #BIT_ENABLE,BYTE_CONTROL
BSR DELAY
MOVE.L D2,D1
BCLR.B #BIT_ENABLE,BYTE_CONTROL
BSR DELAY
RTS

El display requiere de 37 s. para completar la mayora de las instrucciones. Por tanto si


se elige un periodo de seal de 100 s., 50 s. por ciclo, con toda seguridad siempre
habr terminado la instruccin. Para el ajuste de este periodo se ejecuta la rutina
TOGGLE en un bucle infinito y se mide con el osciloscopio el periodo de la seal
resultante, que iremos ajustando variando el valor de la constante CORTO. Tambin se
debe generar esta seal con un retardo superior a los 1.6 ms. que requiere la instruccin
cursor a inicio (Return Home). Para ello se proceder de igual forma ajustando el valor
de la constante LARGO.

3.3.2 Ejemplo de control en bucle cerrado


3.3.2.1 Descripcin de la aplicacin de control
La aplicacin va a consistir en la repeticin secuencial de un conjunto de mensajes, en
particular, los nmeros del uno al nueve ms el cero y la frase siguiente: ES UNA
PRUEBA DE MENSAJE LARGO PARA VER QUE PASA, esperndose que si el
servicio de escritura de mensajes es lo bastante rpido, slo sean visibles en el display
los diecisis caracteres ltimos de la frase, esto es: ARA VER QUE PASA.
3.3.2.2 Descripcin de la conexin y modo de control
El modo de conexin no difiere con respecto al caso anterior, con la salvedad de que en
esta ocasin s se utiliza la seal R/W y, por tanto, no se puede prescindir de ella.

31

3.3.2.3 Implementacin en cdigo ensamblador del programa de


control
El inters de este programa reside en la rapidez de ejecucin basada en la comunicacin
entre los dos dispositivos.
******************************************************************************
*

REGISTROS SIM

******************************************************************************
SIMCR

EQU $FFFA00

* Controla la configuracin del sistema ($00CF).

SYNCR

EQU $FFFA04

* Fija frecuencia y modo de operacin del reloj ($3F08).

RSR

EQU $FFFA06

* Guarda la causa de un reset (Ej.-$80, reset hardware).

PORTE

EQU $FFFA11

* Registro de lectura y escritura en el puerto E.

PORTE1 EQU $FFFA13

* Tiene exactamente la misma funcin que el anterior.

DDRE

EQU $FFFA15

* Determina el sentido del puerto E pin a pin.

PEPAR

EQU $FFFA17

* Asignacin del puerto E (Puerto o control de BUS).

PORTF

EQU $FFFA19

* Registro de lectura y escritura en el puerto F.

PORTF1 EQU $FFFA1B

* Tiene exactamente la misma funcin que el anterior.

DDRF

EQU $FFFA1D

* Determina el sentido del puerto F pin a pin.

PFPAR

EQU $FFFA1F

* Asignacin del puerto F (Puerto F o control de BUS).

PICR

EQU $FFFA22

* Configuracin de interrupciones peridicas ($000F).

PITR

EQU $FFFA24

* Contiene la cuenta del timer peridico ($0000).

SYPCR

EQU $FFFA21

* Controla las funciones de monitorizacin del sistema


* como es el caso del Watchdog. ($40 anula watchdog).

SWSR

EQU $FFFA27

* Se debe escribir peridicamente si Watchdog activado.

CSPAR0 EQU $FFFA44

* Sirve junto con CSPAR1 para configurar la funcin de

CSPAR1 EQU $FFFA46

* los pins de Chip Select (CS, Port C, etc.).

PORTC

* Registro de escritura en el puerto C.

EQU $FFFA41

******************************************************************************
*

REGISTROS GPT-PWM

******************************************************************************
GPTMCR

EQU $FFF900

* Configuracin del GPT.

ICR

EQU $FFF904

* Configuracin de interrupciones del GPT.

DDRGP

EQU $FFF906

* Determina el sentido del puerto GP.

PORTGP

EQU $FFF907

* Registro de lectura y escritura del puerto GP.

OC1M

EQU $FFF908

* Mscara para asignar los pin de captura de OC.

OC1D

EQU $FFF909

* Registro de datos a comparar con el puerto OC.

TCNT

EQU $FFF90A

* Registro del GPT asociado a las capturas IC, OC y PAI.

PACTL

EQU $FFF90C

* Configuracin del acumulador de pulsos PAI.

32

PACNT

EQU $FFF90D

* Es el contador de registro de eventos del PAI.

TIC1

EQU $FFF90E

* Capturan el TCNT cuando se registra un evento en IC1.

TIC2

EQU $FFF910

* Capturan el TCNT cuando se registra un evento en IC2.

TIC3

EQU $FFF912

* Capturan el TCNT cuando se registra un evento en IC3.

TOC1

EQU $FFF914

* Cuando coincide con TCNT causa eventos en los pin OC.

TOC2

EQU $FFF916

* Si el valor coincide con TCNT causa un evento en OC2.

TOC3

EQU $FFF918

* Si el valor coincide con TCNT causa un evento en OC3.

TOC4

EQU $FFF91A

* Si el valor coincide con TCNT causa un evento en OC4.

TI4O5

EQU $FFF91C

* Pin compartido (Puede realizar una funcin TIC o TOC).

TCTL1

EQU $FFF91E

* Configura el modo de comparacin y nivel de salida.

TCTL2

EQU $FFF91F

* Configura que flanco provoca la captura en los IC.

TMSK1

EQU $FFF920

* Habilita las interrupciones de IC y OC.

TMSK2

EQU $FFF921

* Habilita las interrupciones del PAI y del TIMER.

TFLG1

EQU $FFF922

* Registro de flags de interrupciones de IC y OC.

TFLG2

EQU $FFF923

* Registro de flags de interrupciones del PAI y TIMER

CFORC

EQU $FFF924

* Fuerza una salida en los pin OC y PWM.

PWMC

EQU $FFF925

* Configuracin del PWM.

PWMA

EQU $FFF926

* Determina el ancho de pulso. ($80 es medio ciclo)

PWMB

EQU $FFF927

* Determina el ancho de pulso. ($80 es medio ciclo)

PWMCNT

EQU $FFF928

* Registro del contador del PWM.

PWMBUFA EQU $FFF92A

* Buffer para prevenir glitches cuando modificamos PWMA.

PWMBUFB EQU $FFF92B

* Buffer para prevenir glitches cuando modificamos PWMB.

PRESCL

* Guarda el valor del multiplicador del GPT.

EQU $FFF92C

******************************************************************************
*

TIPOS DE RETARDO

******************************************************************************
CORTO

EQU $03FF

* Del orden de 100us.

LARGO

EQU $BFFF

* Del orden de 5ms.

RETARDO

EQU $6FFF

* Se usa para el avance de caracteres.

******************************************************************************
*

CONSTANTES DE INTERS

******************************************************************************
INI_DR

EQU $00

* Inicio de lnea nica de caracteres.

FIN_DR

EQU $4F

* Fin lnea nica de caracteres.

L1_INI_DR

EQU $00

* Inicio de la primera lnea.

L1_FIN_DR

EQU $27

* Fin de la primera lnea.

L2_INI_DR

EQU $40

* Inicio de la segunda lnea.

33

L2_FIN_DR

EQU $67

* Fin de la segunda lnea.

LCD_LONG

EQU $0F

* Longitud de la pantalla del LCD.

******************************************************************************
*

PUERTOS DEL DISPLAY

******************************************************************************
BYTE_DATA

EQU PORTE

* Puerto de datos.

BYTE_CONTROL EQU PORTC

* Puerto de control.

BIT_ENABLE

* Se usa para controlar el proceso de comunicacin.

EQU 4

* con el controlador del display.


BIT_RS

EQU 5

* Seleccin del tipo de registro al que se escribe:


* 0 - Registro de Instrucciones (IR).
* 1 - Registro de Datos (DR).

BIT_RW

EQU 6

* Cambio entre los modos de lectura y escritura.

FLAG

EQU 7

* Posicin del flag de datos en el puerto.

******************************************************************************
*

VECTORES DEL RESET

******************************************************************************
ORG $0
PILA_RESET DC.L FIN_PILA
PC_RESET

DC.L PRINCIPAL

******************************************************************************
*

VECTORES DE INTERRUPCIN

******************************************************************************
ORG $80
VECTOR1

DC.L

DRIVER_DISPLAY

******************************************************************************
*

PUNTERO DE PILA

******************************************************************************
ORG $4000
PILA DS.L 200
FIN_PILA:
******************************************************************************
*

LISTA DE MENSAJES

******************************************************************************
ORG $2000

34

MENSAJES DC.L
MENS1,MENS2,MENS3,MENS4,MENS5,MENS6,MENS7,MENS8,MENS9,MENS0,MENSLARGO
MENS1 DC.B

'UNO',$00

MENS2 DC.B

'DOS',$00

MENS3 DC.B

'TRES',$00

MENS4 DC.B

'CUATRO',$00

MENS5 DC.B

'CINCO',$00

MENS6 DC.B

'SEIS',$00

MENS7 DC.B

'SIETE',$00

MENS8 DC.B

'OCHO',$00

MENS9 DC.B

'NUEVE',$00

MENS0 DC.B

'CERO',$00

MENSLARGO DC.B

'ES UNA PRUEBA DE MENSAJE LARGO PARA VER QUE PASA',$00

******************************************************************************
*

SUBRUTINAS

******************************************************************************
ORG $1000

******************************************************************************
*

CONFIGURACION DEL HARDWARE DEL MICRO

******************************************************************************
*************************** INHAB_WDOG ****************************
* Inhabilita el Watchdog que es una funcin de monitoriracin del *
* sistema para detectar la entrada en un bucle infinito.

*******************************************************************
INHAB_WDOG:
MOVE.B #$40,SYPCR

* Inhabilitamos WatchDog

RTS
*----------------------------------------------------------------------------*

************************** PORT_EC_CFG ****************************


* Con esta rutina se configuran los puertos E y C que son los que *
* se usan para controlar el display y el teclado.

*******************************************************************
PORT_EC_CFG
MOVE.B

#$FF,DDRE

* PE0..PE7 salidas.

MOVE.B

#$00,PEPAR

* Configura el registro de control del puerto E.

MOVE.B

#$00,CSPAR0

* PC0-PC2 utilizables.

35

MOVE.W

#$0000,CSPAR1

MOVE.B

#$00,PORTE

MOVE.B

#$0F,PORTC

* PC3-PC6 utilizables.

RTS
*----------------------------------------------------------------------------*

******************************************************************************
*

RUTINAS DE CONTROL

******************************************************************************
***************************** DELAY *******************************
* Produce un retardo cuya duracin viene determinada por el valor *
* almacenado en el registro D1.

*******************************************************************
DELAY
SUB.L #1,D1
BNE DELAY
RTS
*----------------------------------------------------------------------------*

************************* FLAG_ESPERAR ****************************


* Espera a que se baje el flag de ocupado.

*******************************************************************
FLAG_ESPERAR
MOVE.B #$7F,DDRE
BSET.B #BIT_RW,BYTE_CONTROL
BSET.B #BIT_ENABLE,BYTE_CONTROL
OCUPADO
BTST.B #FLAG,BYTE_DATA
BNE OCUPADO
BCLR.B

#BIT_ENABLE,BYTE_CONTROL

BCLR.B

#BIT_RW,BYTE_CONTROL

MOVE.B #$FF,DDRE
RTS
*----------------------------------------------------------------------------*

*************************** ENABLE_LCD ****************************


* Provoca la ejecucin de la instruccin, generando un pulso en

* la lnea Enable del LCD.

*******************************************************************

36

ENABLE_LCD
BSET.B #BIT_ENABLE,BYTE_CONTROL
BCLR.B #BIT_ENABLE,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*

******************************************************************************
*

INSTRUCCIONES LCD

******************************************************************************
************************** CFG_DISPLAY ****************************
* Configura el modo de funcionamiento del display. Bsicamente se *
* reduce a tres aspectos:

1 - Comunicacin con el display con 8 o 4 bits.

2 - 1 o 2 lneas en pantalla.

3 - Dos tipos de fuentes 5x8 o bien 5x10 puntos.

* Suprimiendo el asterisco correspondiente se puede modificar la

* opcin seleccionada por defecto.

*******************************************************************
CFG_DISPLAY
BSR FLAG_ESPERAR
MOVE.B #$30,BYTE_DATA

* Modo 8 bits, una lnea, fuentes 5x8 puntos.

BCLR.B #4,BYTE_DATA

* Modo 4 bits.

BSET.B #3,BYTE_DATA

* Habilita 2 lneas.

BSET.B #2,BYTE_DATA

* Fuentes de 5x10 puntos.

BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*

*************************** MODO_AVC ******************************


* El cursor avanza cuando se escribe un carcter en el registro

* DR. El display permanece esttico.

*******************************************************************
MODO_AVC
BSR FLAG_ESPERAR
MOVE.B #$06,BYTE_DATA * Cursor adelante, display no acompaa.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*

37

*************************** MODO_AVT ******************************


* El cursor y el display avanzan solidariamente cuando se escribe *
* un carcter en el registro DR.

*******************************************************************
MODO_AVT
BSR FLAG_ESPERAR
MOVE.B #$07,BYTE_DATA * Cursor adelante, display acompaa.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*

*************************** MODO_RTC ******************************


* El cursor retrocede cuando se escribe un carcter en el regis-

* tro DR. El display permanece esttico.

*******************************************************************
MODO_RTC
BSR FLAG_ESPERAR
MOVE.B #$04,BYTE_DATA * Cursor atrs, display no acompaa.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*

*************************** MODO_RTT ******************************


* El cursor y el display retroceden solidariamente cuando se es-

* cribe un carcter en el registro DR.

*******************************************************************
MODO_RTT
BSR FLAG_ESPERAR
MOVE.B #$05,BYTE_DATA * Cursor atrs, display acompaa.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*

************************** MODO_NORMAL ****************************


* Se configura el modo del display. Por defecto estarn tanto el

* display como el cursor encendidos y sin parpadear el carcter

* donde se encuentra el cursor.

38

*******************************************************************
MODO_NORMAL
BSR FLAG_ESPERAR
MOVE.B #$0E,BYTE_DATA

* Display y Cursor ON, blinkin OFF

BCLR.B #2,BYTE_DATA

* Display OFF

BCLR.B #1,BYTE_DATA

* Cursor OFF

BSET.B #0,BYTE_DATA

* Blinking ON

BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*

**************************** MODO_OFF *****************************


* Produce el apagado de la pantalla del LCD. Se puede seguir en-

* viando ordenes al display que ser n ejecutadas. La nica dife-

* rencia es que no aparece reflejado hasta que no se enciende de

* el LCD.

*******************************************************************
MODO_OFF
BSR FLAG_ESPERAR
MOVE.B #$08,BYTE_DATA

* Display y Cursor ON, blinkin OFF

BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*

***************************** CLEAR *******************************


* Borra el contenido del display y situa el cursor a la izquierda *
*******************************************************************
CLEAR
BSR FLAG_ESPERAR
MOVE.B #$01,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*

************************** RETURN_HOME *****************************


* Devuelve el cursor a la primera posicin conservando el conteni- *
* de la memoria del display.

********************************************************************

39

RETURN_HOME
BSR FLAG_ESPERAR
MOVE.B #$02,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*

*************************** CURS_IZQ ******************************


* Mueve el cursor a la izquierda sin modificar el texto.

*******************************************************************
CURS_IZQ
BSR FLAG_ESPERAR
MOVE.B #$10,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*

*************************** CURS_DCHA *****************************


* Mueve el cursor a la derecha sin modificar el texto.

*******************************************************************
CURS_DCHA
BSR FLAG_ESPERAR
MOVE.B #$14,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*

*************************** DISP_IZQ ******************************


* Desplaza la ventana del display hacia la izquierda.

*******************************************************************
DISP_IZQ
BSR FLAG_ESPERAR
MOVE.B #$1C,BYTE_DATA
BSR ENABLE_LCD
RTS
*************************** DISP_DCHA *****************************
* Desplaza la ventana del display hacia la derecha.

*******************************************************************
DISP_DCHA

40

BSR FLAG_ESPERAR
MOVE.B #$18,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*

************************** CGRAM_ADDR *****************************


* Coloca la direccin indicada en D0 en el contador de la Memoria *
* del Generador de Caracteres (CGRAM). Este generador permite de- *
* finir 8 caracteres de usuario en el modo 5x8 y cuatro en el de

* 5x10 puntos. Para un correcto uso de la instruccin deberemos

* escribir una de las 64 direcciones posibles (de $00 a $3F)en D0 *


*******************************************************************
CGRAM_ADDR
BSR FLAG_ESPERAR
ADD.B #$40,D0
MOVE.B D0,BYTE_DATA
BSET.B #BIT_RS,BYTE_CONTROL
BSR ENABLE_LCD
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*

************************** DDRAM_ADDR *****************************


* Coloca la direccin indicada en D0 en el contador de la Memoria *
* de Datos del Display (DDRAM). Existen 80 posiciones disponibles *
* que ser n consecutivas cuando el display trabaje en una nica

* lnea o repartidas en dos grupos de 40 cuando trabaje en el

* modo de dos lneas.

* Vase detalle a continuacin:

- 80 posiciones x 1 lnea

- las direcciones van de $0 a $4F. *

- 40 posiciones x 2 lneas - las direcciones se reparten:

Lnea primera: de $00 a $27.

Lnea segunda: de $40 a $67.

*******************************************************************
DDRAM_ADDR
BSR FLAG_ESPERAR
ADD.B #$80,D0
MOVE.B D0,BYTE_DATA

41

BSET.B #BIT_RS,BYTE_CONTROL
BSR ENABLE_LCD
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*

*************************** ESCRIBIR ******************************


* Esta instruccin permite escribir en el registro de datos (DR)

* una palabra destinada al generador de caracteres (CGRAM) o al

* de datos del display (DDRAM) dependiendo de cual fue la ltima

* seleccin. El dato a escribir lo pondremos en el registro D0.

*******************************************************************
ESCRIBIR
BSR FLAG_ESPERAR
MOVE.B D0,BYTE_DATA
BSET.B #BIT_RS,BYTE_CONTROL
BSR ENABLE_LCD
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*

******************************************************************************
*

RUTINAS DE INICIALIZACIN DE DISPOSITIVOS

******************************************************************************
**************************** INI_LCD ******************************
* Esta rutina realiza toda la inicializacin del display tras el

* encendido del mismo. Despus de su ejecucin el display queda

* preparado para recibir instrucciones y caracteres.

*******************************************************************
INI_LCD:
BSR CFG_DISPLAY
BSR MODO_NORMAL
BSR CLEAR
RTS
*----------------------------------------------------------------------------*
******************************************************************************
*

SERVICIOS DE DISPOSITIVOS

******************************************************************************
******************************************************************************

42

SERVICIOS DEL DISPLAY

******************************************************************************
************************** ESCR_MENSAJE ***************************
* Esta rutina escribe un mensaje completo en el display cuya di-

* reccin de inicio se indica a travs del registro A0, debiendo

* terminar el mensaje con $00. Si es superior a los 16 caracteres *


* que tiene el LCD, al alcanzar el final de la lnea automtica-

* mente se cambia del modo AVC al AVT en el que el display acom-

* paa al cursor dando la sensacin de que el texto se desplaza.

*******************************************************************
ESCR_MENSAJE
MOVEM.L

D0-D1,-(A7)

BSR RETURN_HOME
BSR MODO_AVC
MOVE.B #LCD_LONG,D1

* Cuenta los caracteres escritos en el display.

BUCLE1
TST.B (A0)
BEQ FIN1
MOVE.B (A0)+,D0
BSR ESCRIBIR
SUB.B #1,D1
BEQ FIN_LIN1
BRA BUCLE1
FIN_LIN1
BSR MODO_AVT

* Cambia al modo AVT para que el display acompae al cursor.

BRA BUCLE1
FIN1
MOVEM.L (A7)+,D0-D1
RTS
*----------------------------------------------------------------------------*

*************************** DSP_ADELANTE **************************


* Esta rutina desplaza hacia la derecha la pantalla del display

* recorriendo las 80 posiciones del registro DDRAM.

*******************************************************************
DSP_ADELANTE
MOVEM.L D0-D1,-(A7)
MOVE.B #FIN_DR,D0

* Cuenta los caracteres escritos en el display.

BUCLE2

43

BSR DISP_DCHA
MOVE.L #RETARDO,D1
BSR DELAY
SUB.B #1,D0
BNE BUCLE2
MOVEM.L (A7)+,D0-D1
RTS
*----------------------------------------------------------------------------*

**************************** DSP_ATRAS ****************************


* Esta rutina desplaza hacia la izquierda la pantalla del display *
* recorriendo las 80 posiciones del registro DDRAM.

*******************************************************************
DSP_ATRAS
MOVEM.L D0-D1,-(A7)
MOVE.B #FIN_DR,D0

* Cuenta los caracteres escritos en el display.

BUCLE3
BSR DISP_IZQ
MOVE.L #RETARDO,D1
BSR DELAY
SUB.B #1,D0
BNE BUCLE3
MOVEM.L (A7)+,D0-D1
RTS
*----------------------------------------------------------------------------*

************************** DRIVER_DISPLAY *************************


* Esta rutina realiza el servicio indicado a travs del registro

* D7 con un nmero ordinal. Para llamar a la rutina de servicio

* se coloca el nmero de servicio en el registro D7 y se ejecuta

* un TRAP #0.

*******************************************************************
DRIVER_DISPLAY
MOVEM.L D0-D1,-(A7)
CMP.B #1,D7
BEQ

SERVICIO1

CMP.B #2,D7
BEQ

SERVICIO2

CMP.B #3,D7

44

BEQ

SERVICIO3

BRA

FIN

SERVICIO1
BSR

ESCR_MENSAJE

BRA

FIN

SERVICIO2
BSR

DSP_ADELANTE

BRA

FIN

SERVICIO3
BSR

DSP_ATRAS

FIN
MOVEM.L (A7)+,D0-D1
RTE
*----------------------------------------------------------------------------*

******************************** PRINCIPAL ***********************************


* El programa en cuestin muestra en el display de forma secuencial la lista *
* de mensajes definidos. Para la escritura utiliza el servicio de escritura

* de mensajes del driver a travs de TRAP #0.

******************************************************************************
ORG $400
PRINCIPAL
BSR

INHAB_WDOG

BSR

PORT_EC_CFG

BSR

INI_LCD

INIC_D0
MOVEA.W
MOVE.L

#MENSAJES,A6
#$B,D0

LOOP1
BSR

CLEAR

MOVEA.L

(A6)+,A0

MOVE.L

#1,D7

TRAP #0
MOVE.L

#LARGO,D1

BSR

DELAY

SUBI.B

#1,D0

BEQ

INIC_D0

BRA

LOOP1

END

45

3.4 Anexo I
A continuacin se adjuntan copias de los juegos de caracteres predefinidos extrados del
catalogo original del controlador HD44780U de Hitachi.
Esta primera tabla contiene patrones de caracteres de 5 x10 puntos.

Figura 6 Correspondencia entre cdigos y caracteres (Extrado del catlogo de HITACHI).

46

Esta otra contiene los patrones de caracteres de 5 x 8 puntos, que es adems la que se
usar en el ejemplo de estas pginas.
Figura 7 Correspondencia entre cdigos y caracteres (Extrado del catlogo de HITACHI).

47

NDICE DE CONTENIDO

3. CONTROL DE UN DISPLAY LCD DE MODO TEXTO.......................................1


3.1

DESCRIPCIN GENERAL.............................................................................................................1

3.2

FUNCIONAMIENTO DEL DISPLAY.............................................................................................2

3.2.1

ALIMENTACIN Y CONTROL DE CONTRASTE...............................................................................3

3.2.2

LA PANTALLA Y LOS CARACTERES..............................................................................................3

3.2.3

LA MEMORIA DEL DISPLAY.......................................................................................................4

3.2.3.1 Display Data RAM (DDRAM)...............................................................................................4


3.2.3.2 Character Generator RAM (CGRAM)..................................................................................5
3.2.4

SEALES DE CONTROL Y REGISTROS INTERNOS..........................................................................7

3.2.4.1 Seales de control..................................................................................................................7


3.2.4.2 Registros internos..................................................................................................................8
3.2.5

CONJUNTO DE INSTRUCCIONES...................................................................................................9

3.2.5.1 Borrar display, Clear Display...........................................................................................9


3.2.5.2 Cursor a inicio, Return Home...........................................................................................9
3.2.5.3 Establecer modo de trabajo, Entry Mode Set.................................................................10
3.2.5.4 Control ON/OFF del display...............................................................................................10
3.2.5.5 Desplazamiento del cursor o display..................................................................................10
3.2.5.6 Establecer modo de interfaz, Function Set......................................................................11
3.2.5.7 Fijar direccin de CGRAM..................................................................................................11
3.2.5.8 Fijar direccin de DDRAM.................................................................................................12
3.2.5.9 Escritura de datos en la CGRAM o DDRAM......................................................................12
3.2.5.10

Lectura de datos de la CGRAM o DDRAM....................................................................12

3.2.6

SECUENCIA TPICA DE INICIALIZACIN DEL LCD.....................................................................12

3.2.7

FORMAS DE CONEXIN A UN MICROCONTROLADOR.................................................................13

3.2.7.1 Longitud del bus de datos....................................................................................................13


3.2.7.2 Modos de control del LCD..................................................................................................14
3.3

EJEMPLOS DE CONTROL DEL LCD CON EL MICRO MC68331.......................................15

3.3.1

EJEMPLO DE CONTROL EN BUCLE ABIERTO...............................................................................15

3.3.1.1 Descripcin de la aplicacin de control..............................................................................15


3.3.1.2 Descripcin de la conexin y modo de control...................................................................16
3.3.1.3 Implementacin en cdigo ensamblador del programa de control.....................................16
3.3.1.3.1

Observaciones sobre el ajuste de parmetros..........................................................................30

3.3.1.3.1.1

3.3.2

Ajuste de la seal de activacin, Enable.........................................................................30

EJEMPLO DE CONTROL EN BUCLE CERRADO.............................................................................31

3.3.2.1 Descripcin de la aplicacin de control..............................................................................31

3.3.2.2 Descripcin de la conexin y modo de control...................................................................31


3.3.2.3 Implementacin en cdigo ensamblador del programa de control.....................................32
3.4

ANEXO I...........................................................................................................................................46

II