Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
controla con las tres lneas de control (RS, R/W y E) conforme al cronograma del
dispositivo.
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.
$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
{
|
}
~
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
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
Figura 5 Ejemplo de cronograma de las seales de control. (Extrado del catlogo de Hitachi).
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).
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.
3.2.5.1
CDIGO: $01
CDIGO: $02
TIEMPO DE EJECUCIN: 37 s.
TIEMPO DE EJECUCIN: 37 s.
TIEMPO DE EJECUCIN: 37 s.
10
R/L=1/0
se
indica
que
el
desplazamiento
sea
derecha/izquierda.
TIEMPO DE EJECUCIN: 37 s.
CDIGO: 0 0 1 DL N F 0 0
TIEMPO DE EJECUCIN: 37 s.
CDIGO: 0 1 A5 A4 A3 A2 A1 A0
TIEMPO DE EJECUCIN: 37 s.
CDIGO: 1 A6 A5 A4 A3 A2 A1 A0
TIEMPO DE EJECUCIN: 37 s.
CDIGO: 1 0 D D D D D D D D
3.2.5.10
TIEMPO DE EJECUCIN: 37 s.
CDIGO: 1 1 D D D D D D D D
TIEMPO DE EJECUCIN: 37 s.
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:
13
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
REGISTROS SIM
******************************************************************************
SIMCR
EQU $FFFA00
SYNCR
EQU $FFFA04
RSR
EQU $FFFA06
PORTE
EQU $FFFA11
DDRE
EQU $FFFA15
16
PEPAR
EQU $FFFA17
PORTF
EQU $FFFA19
DDRF
EQU $FFFA1D
PFPAR
EQU $FFFA1F
PICR
EQU $FFFA22
PITR
EQU $FFFA24
SYPCR
EQU $FFFA21
SWSR
EQU $FFFA27
PORTC
EQU $FFFA41
******************************************************************************
*
REGISTROS GPT-PWM
******************************************************************************
GPTMCR
EQU $FFF900
ICR
EQU $FFF904
DDRGP
EQU $FFF906
PORTGP
EQU $FFF907
OC1M
EQU $FFF908
OC1D
EQU $FFF909
TCNT
EQU $FFF90A
PACTL
EQU $FFF90C
PACNT
EQU $FFF90D
TIC1
EQU $FFF90E
TIC2
EQU $FFF910
TIC3
EQU $FFF912
TOC1
EQU $FFF914
TOC2
EQU $FFF916
TOC3
EQU $FFF918
TOC4
EQU $FFF91A
TI4O5
EQU $FFF91C
TCTL1
EQU $FFF91E
TCTL2
EQU $FFF91F
TMSK1
EQU $FFF920
TMSK2
EQU $FFF921
TFLG1
EQU $FFF922
17
TFLG2
EQU $FFF923
CFORC
EQU $FFF924
PWMC
EQU $FFF925
PWMA
EQU $FFF926
PWMB
EQU $FFF927
PWMCNT
EQU $FFF928
PRESCL
EQU $FFF92C
******************************************************************************
*
TIPOS DE RETARDO
******************************************************************************
CORTO
EQU $03FF
LARGO
EQU $BFFF
RETARDO
EQU $6FFF
******************************************************************************
*
CONSTANTES DE INTERS
******************************************************************************
INI_DR
EQU $00
FIN_DR
EQU $4F
L1_INI_DR
EQU $00
L1_FIN_DR
EQU $27
L2_INI_DR
EQU $40
L2_FIN_DR
EQU $67
LCD_LONG
EQU $0F
******************************************************************************
*
******************************************************************************
BYTE_DATA
EQU PORTE
* Puerto de datos.
* Puerto de control.
BIT_ENABLE
EQU 4
EQU 5
BIT_RW
EQU 6
18
******************************************************************************
*
******************************************************************************
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
MENS2 DC.B
******************************************************************************
*
SUBRUTINAS
******************************************************************************
ORG $1000
******************************************************************************
*
******************************************************************************
19
*******************************************************************
INHAB_WDOG:
MOVE.B #$40,SYPCR
* Inhabilitamos WatchDog
RTS
*----------------------------------------------------------------------------*
*******************************************************************
PORT_EC_CFG
MOVE.B
#$FF,DDRE
* PE0..PE7 salidas.
MOVE.B
#$00,PEPAR
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
*******************************************************************
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:
2 - 1 o 2 lneas en pantalla.
*******************************************************************
CFG_DISPLAY
MOVE.B #$30,BYTE_DATA
BCLR.B #4,BYTE_DATA
* Modo 4 bits.
BSET.B #3,BYTE_DATA
* Habilita 2 lneas.
BSET.B #2,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*******************************************************************
21
MODO_AVC
MOVE.B #$06,BYTE_DATA * Cursor adelante, display no acompaa.
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*******************************************************************
MODO_AVT
MOVE.B #$07,BYTE_DATA * Cursor adelante, display acompaa.
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*******************************************************************
MODO_RTC
MOVE.B #$04,BYTE_DATA * Cursor atrs, display no acompaa.
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*******************************************************************
MODO_RTT
MOVE.B #$05,BYTE_DATA * Cursor atrs, display acompaa.
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
22
*******************************************************************
MODO_NORMAL
MOVE.B #$0E,BYTE_DATA
BCLR.B #2,BYTE_DATA
* Display OFF
BCLR.B #1,BYTE_DATA
* Cursor OFF
BSET.B #0,BYTE_DATA
* Blinking ON
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
* el LCD.
*******************************************************************
MODO_OFF
MOVE.B #$08,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*******************************************************************
CLEAR
MOVE.B #$01,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
23
********************************************************************
RETURN_HOME
MOVE.B #$02,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*******************************************************************
CURS_IZQ
MOVE.B #$10,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*******************************************************************
CURS_DCHA
MOVE.B #$14,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
*******************************************************************
DISP_IZQ
MOVE.B #$1C,BYTE_DATA
BSR TOGGLE
RTS
24
*******************************************************************
DISP_DCHA
MOVE.B #$18,BYTE_DATA
BSR TOGGLE
RTS
*----------------------------------------------------------------------------*
* BYTE_DATA.
*******************************************************************
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
- 80 posiciones x 1 lnea
*******************************************************************
25
DDRAM_ADDR
ADD.B #$80,BYTE_DATA
BSET.B #BIT_RS,BYTE_CONTROL
BSR TOGGLE
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
*******************************************************************
ESCRIBIR
BSET.B #BIT_RS,BYTE_CONTROL
BSR TOGGLE
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
******************************************************************************
*
******************************************************************************
**************************** INI_LCD ******************************
* Esta rutina realiza toda la inicializacin del display tras el
*******************************************************************
INI_LCD
MOVE.L #CORTO,D2
BSR CFG_DISPLAY
BSR MODO_NORMAL
BSR CLEAR
RTS
*----------------------------------------------------------------------------*
26
******************************************************************************
*
SERVICIOS DE DISPOSITIVOS
******************************************************************************
******************************************************************************
*
******************************************************************************
************************** ESCR_MENSAJE ***************************
* Esta rutina escribe un mensaje completo en el display en el
ter-
* 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
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
BRA BUCLE1
FIN1
MOVEM.L (A7)+,D0-D2
RTS
27
*******************************************************************
DSP_ADELANTE
MOVEM.L D0-D1,-(A7)
MOVE.B #FIN_DR,D0
BUCLE2
BSR DISP_DCHA
MOVE.L #RETARDO,D1
BSR DELAY
SUB.B #1,D0
BNE BUCLE2
MOVEM.L (A7)+,D0-D1
RTS
*----------------------------------------------------------------------------*
*******************************************************************
DSP_ATRAS
MOVEM.L D0-D1,-(A7)
MOVE.B #FIN_DR,D0
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
* 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
Existen ciertos parmetros que ha sido necesario someterlos a un ajuste, como son los
retardos.
3.3.1.3.1.1
*******************************************************************
DELAY
SUB.L #1,D1
BNE DELAY
RTS
30
*----------------------------------------------------------------------------*
*******************************************************************
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
31
REGISTROS SIM
******************************************************************************
SIMCR
EQU $FFFA00
SYNCR
EQU $FFFA04
RSR
EQU $FFFA06
PORTE
EQU $FFFA11
DDRE
EQU $FFFA15
PEPAR
EQU $FFFA17
PORTF
EQU $FFFA19
DDRF
EQU $FFFA1D
PFPAR
EQU $FFFA1F
PICR
EQU $FFFA22
PITR
EQU $FFFA24
SYPCR
EQU $FFFA21
SWSR
EQU $FFFA27
PORTC
EQU $FFFA41
******************************************************************************
*
REGISTROS GPT-PWM
******************************************************************************
GPTMCR
EQU $FFF900
ICR
EQU $FFF904
DDRGP
EQU $FFF906
PORTGP
EQU $FFF907
OC1M
EQU $FFF908
OC1D
EQU $FFF909
TCNT
EQU $FFF90A
PACTL
EQU $FFF90C
32
PACNT
EQU $FFF90D
TIC1
EQU $FFF90E
TIC2
EQU $FFF910
TIC3
EQU $FFF912
TOC1
EQU $FFF914
TOC2
EQU $FFF916
TOC3
EQU $FFF918
TOC4
EQU $FFF91A
TI4O5
EQU $FFF91C
TCTL1
EQU $FFF91E
TCTL2
EQU $FFF91F
TMSK1
EQU $FFF920
TMSK2
EQU $FFF921
TFLG1
EQU $FFF922
TFLG2
EQU $FFF923
CFORC
EQU $FFF924
PWMC
EQU $FFF925
PWMA
EQU $FFF926
PWMB
EQU $FFF927
PWMCNT
EQU $FFF928
PRESCL
EQU $FFF92C
******************************************************************************
*
TIPOS DE RETARDO
******************************************************************************
CORTO
EQU $03FF
LARGO
EQU $BFFF
RETARDO
EQU $6FFF
******************************************************************************
*
CONSTANTES DE INTERS
******************************************************************************
INI_DR
EQU $00
FIN_DR
EQU $4F
L1_INI_DR
EQU $00
L1_FIN_DR
EQU $27
L2_INI_DR
EQU $40
33
L2_FIN_DR
EQU $67
LCD_LONG
EQU $0F
******************************************************************************
*
******************************************************************************
BYTE_DATA
EQU PORTE
* Puerto de datos.
* Puerto de control.
BIT_ENABLE
EQU 4
EQU 5
BIT_RW
EQU 6
FLAG
EQU 7
******************************************************************************
*
******************************************************************************
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
******************************************************************************
*
SUBRUTINAS
******************************************************************************
ORG $1000
******************************************************************************
*
******************************************************************************
*************************** 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
MOVE.B
#$FF,DDRE
* PE0..PE7 salidas.
MOVE.B
#$00,PEPAR
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
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
*----------------------------------------------------------------------------*
*******************************************************************
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:
2 - 1 o 2 lneas en pantalla.
*******************************************************************
CFG_DISPLAY
BSR FLAG_ESPERAR
MOVE.B #$30,BYTE_DATA
BCLR.B #4,BYTE_DATA
* Modo 4 bits.
BSET.B #3,BYTE_DATA
* Habilita 2 lneas.
BSET.B #2,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*******************************************************************
MODO_AVC
BSR FLAG_ESPERAR
MOVE.B #$06,BYTE_DATA * Cursor adelante, display no acompaa.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
37
*******************************************************************
MODO_AVT
BSR FLAG_ESPERAR
MOVE.B #$07,BYTE_DATA * Cursor adelante, display acompaa.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*******************************************************************
MODO_RTC
BSR FLAG_ESPERAR
MOVE.B #$04,BYTE_DATA * Cursor atrs, display no acompaa.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*******************************************************************
MODO_RTT
BSR FLAG_ESPERAR
MOVE.B #$05,BYTE_DATA * Cursor atrs, display acompaa.
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
38
*******************************************************************
MODO_NORMAL
BSR FLAG_ESPERAR
MOVE.B #$0E,BYTE_DATA
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
*----------------------------------------------------------------------------*
* el LCD.
*******************************************************************
MODO_OFF
BSR FLAG_ESPERAR
MOVE.B #$08,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
********************************************************************
39
RETURN_HOME
BSR FLAG_ESPERAR
MOVE.B #$02,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*******************************************************************
CURS_IZQ
BSR FLAG_ESPERAR
MOVE.B #$10,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*******************************************************************
CURS_DCHA
BSR FLAG_ESPERAR
MOVE.B #$14,BYTE_DATA
BSR ENABLE_LCD
RTS
*----------------------------------------------------------------------------*
*******************************************************************
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
*----------------------------------------------------------------------------*
- 80 posiciones x 1 lnea
*******************************************************************
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
BSR FLAG_ESPERAR
MOVE.B D0,BYTE_DATA
BSET.B #BIT_RS,BYTE_CONTROL
BSR ENABLE_LCD
BCLR.B #BIT_RS,BYTE_CONTROL
RTS
*----------------------------------------------------------------------------*
******************************************************************************
*
******************************************************************************
**************************** INI_LCD ******************************
* Esta rutina realiza toda la inicializacin del display tras el
*******************************************************************
INI_LCD:
BSR CFG_DISPLAY
BSR MODO_NORMAL
BSR CLEAR
RTS
*----------------------------------------------------------------------------*
******************************************************************************
*
SERVICIOS DE DISPOSITIVOS
******************************************************************************
******************************************************************************
42
******************************************************************************
************************** ESCR_MENSAJE ***************************
* Esta rutina escribe un mensaje completo en el display cuya di-
*******************************************************************
ESCR_MENSAJE
MOVEM.L
D0-D1,-(A7)
BSR RETURN_HOME
BSR MODO_AVC
MOVE.B #LCD_LONG,D1
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
BRA BUCLE1
FIN1
MOVEM.L (A7)+,D0-D1
RTS
*----------------------------------------------------------------------------*
*******************************************************************
DSP_ADELANTE
MOVEM.L D0-D1,-(A7)
MOVE.B #FIN_DR,D0
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
MOVEM.L D0-D1,-(A7)
MOVE.B #FIN_DR,D0
BUCLE3
BSR DISP_IZQ
MOVE.L #RETARDO,D1
BSR DELAY
SUB.B #1,D0
BNE BUCLE3
MOVEM.L (A7)+,D0-D1
RTS
*----------------------------------------------------------------------------*
* 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
*----------------------------------------------------------------------------*
******************************************************************************
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.
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
DESCRIPCIN GENERAL.............................................................................................................1
3.2
3.2.1
3.2.2
3.2.3
CONJUNTO DE INSTRUCCIONES...................................................................................................9
3.2.6
3.2.7
3.3.1
3.3.1.3.1.1
3.3.2
ANEXO I...........................................................................................................................................46
II