Beruflich Dokumente
Kultur Dokumente
9 PTA2/IRQ*/KBI2/TCLK
10 PTB3
11 PTB2
12 PTA1/AD1/TCH1/KBI1
13 PTA0/AD0/TCH0/KBI0
14 PTB1
15 PTB0
16 VSS
1 VSS
2 VDD
3 V0
4 RS
5 R/W
6E
7 DB0
8 DB1
9 DB2
10 DB3
11 DB4
12 DB5
13 DB6
14 DB7
15 BCKL +
16 BCKL
EQU
EQU
EQU
$0080
$EE00
$FFDE
**********************************************************************************************
* rea de variables de RAM (en esta prueba no se usa ninguna variable RAM) *
**********************************************************************************************
ORG RAM_START
*Registro temporario del acumulador
TEMPA RMB 1
*Registro temporario de ndice
TEMPX RMB 1
*********************************************************************************
* Asignacin de puertos
*
*********************************************************************************
ED equ 0; para el PTA0
RS equ 1; para el PTA1
*****************************************************************************************
* PROGRAMA PRINCIPAL - En este punto arranca el micro luego del Reset *
*
*
*****************************************************************************************
$Include
org
'qtqy_registers.inc'
ROM_START
start:
RSP
; Resetea el Stack Pointer
SEI
; Habilita la mscara de interrupciones
CLR PTB
; Limpia el puerto B
CLR PTA
; Limpia el puerto A
MOV #$03,DDRA
;Programo los puertos PortA(0-1) como salida
MOV #$FF,DDRB
;Programa todos los puertos B como salida
*********************************************************************************
* Inicializacin de timmer
*
*********************************************************************************
MOV
#$30,TSC
;Stop y reset Timmer. Prescaler = 1
MOV
#$00,TSC
;Libera Timmer. Prescaler = 1
LDA
JSR
LDA
JSR
#$06
WCTRL
#$01
WCTRL
Como se ve, el primer comando se enva tres veces (ver hoja de datos para ms
detalles) y luego de cada envo se llama a una rutina de demora de 150 mseg.
Este tiempo supera ampliamente el especificado por cualquier fabricante, y lo
haremos de esta manera para seguridad de la prueba.
Tambin se llama a DELAY150 antes de mandar la primera instruccin, para
permitir que se estabilice todo el hardware antes de comenzar este proceso.
Segn los comentarios, con la primera instruccin (repetida tres veces), le
estamos diciendo al display que trabajemos con palabra de 8 bits, en display de
dos lneas, y con tamao de carcter de 5x7 puntos.
La siguiente instruccin enviada ($0C) enciende el display e inhabilita la muestra
del cursor, que no usaremos ahora.
La instruccin siguiente ($06) ordena al display que incremente la direccin de
muestra. Esto es, luego de escribir el carcter, el display automticamente
apuntar a la direccin siguiente para que escribamos en el que sigue. Por lo
tanto, los caracteres de datos que enviemos se irn escribiendo uno tras de otro,
de izquierda a derecha.
Por ltimo, enviamos el comando de borrado ($01) que limpia la DDRAM y por lo
tanto toda muestra que hubiere en la pantalla.
Rutinas WCTRL y WDAT
Antes de seguir con nuestro objetivo, veremos cmo trabajan estas rutinas
fundamentales de la comunicacin con el LCD.
WCTRL:
STA
BSET
NOP
BCLR
RTS
PTB
ED,PTA
;E=1
ED,PTA
;E=0
; RS = 1
; ED = 1
; ED = 0
; RS = 0
00$
01$
02$
03$
04$
05$
06$
07$
08$
09$
40$
41$
42$
43$
44$
45$
46$
47$
48$
49$
0A
$
4A
$
0B
$
4B
$
0C
$
4C
$
0D
$
4D
$
0E
$
4E
$
0F$
4F$
#$03
#$80
WCTRL
#M
WDAT
#$00
; Direccin primer cartel lnea 1
#$80
WCTRL
#'H'
;Enva letra H
WDAT
#'O'
;Enva letra O
WDAT
#'L'
;Enva letra L
WDAT
#'A'
;Enva letra A
RTS
Listado completo del programa:
Para mayor claridad, listaremos el programa completo, incluyendo tambin el
rea de vectores:
*********************************************************************************************
* Prueba display LCD 1602
*
*********************************************************************************************
* Definicin del mapa de Memoria del 68HC908QY4 (68HC908QT1-2/QY1-2) *
*
*
*********************************************************************************************
RAM_START
ROM_START
VECTORES
EQU
EQU
EQU
$0080
$EE00
$FFDE
**********************************************************************************************
* rea de variables de RAM (en esta prueba no se usa ninguna variable RAM) *
**********************************************************************************************
ORG RAM_START
*Registro temporario del acumulador
TEMPA RMB 1
*Registro temporario de ndice
TEMPX RMB 1
*********************************************************************************
* Asignacin de puertos
*
*********************************************************************************
ED equ 0; para el PTA0
RS equ 1; para el PTA1
*****************************************************************************************
* PROGRAMA PRINCIPAL - En este punto arranca el micro luego del Reset *
*
*
*****************************************************************************************
$Include
org
'qtqy_registers.inc'
ROM_START
start:
RSP
; Resetea el Stack Pointer
SEI
; Habilita la mscara de interrupciones
CLR PTB
; Limpia el puerto B
CLR PTA
; Limpia el puerto A
MOV #$03,DDRA
;Programo los puertos PortA(0-1) como salida
MOV #$FF,DDRB
;Programa todos los puertos B como salida
*********************************************************************************
* Inicializacin de timmer
*
*********************************************************************************
MOV
#$30,TSC
;Stop y reset Timmer. Prescaler = 1
MOV
#$00,TSC
; Libera Timmer. Prescaler = 1
*********************************************************************************
* Inicializacin del display
*
*********************************************************************************
JSR
DELAY150
LDA
#$38
; %00111000
JSR
WCTRL
; Function Set 8 bits, 2 lneas, 5x7
JSR
DELAY150
LDA
#$38
JSR
WCTRL
JSR
DELAY150
LDA
#$38
JSR
WCTRL
JSR
DELAY150
LDA
#$0C
JSR
WCTRL
;Enciende el display y apaga el cursor
LDA
#$06
JSR
WCTRL
;Incrementa la direccin de muestra
LDA
#$01
;Limpia display
JSR
WCTRL
***********************************************************************************
JSR
CARTEL1
LOOP1:
STA COPCTL
;Resetea el COP
BRA LOOP1
************************************************************************************
* Rutina que escribe un caracter de control en el display. La instruccin *
* viene en el acumulador
*
************************************************************************************
WCTRL:
STA
BSET
NOP
BCLR
RTS
PTB
ED,PTD
;E=1
ED,PTD
;E=0
*************************************************************************************
* Rutina que escribe un caracter de control en el display. La instruccin *
* viene en el acumulador
*
**************************************************************************************
WCTRL:
STA
BSET
NOP
BCLR
RTS
PTB
ED,PTD
;E=1
ED,PTD
;E=0
*********************************************************************************
* DELAY150 - Subrutina de demora de 150 mseg
*
*********************************************************************************
DELAY150:
LDX #$FF
;[2]
delay02:
LDA #$FF
;[2]
delay01:
DECA
;[1]
CMP #$00
;[2]
BNE delay01
;[3] ((3x2xff)+1+2+3+2)xff+6=392196d
DECX
;[1]
CPX #$00
;[2]
BNE delay02
;[3]
RTS
;[4]
*********************************************************************************
* Rutina CARTEL1
*
*********************************************************************************
CARTEL1:
LDA
#$00
; Direccin primer cartel lnea 1
ORA
#$80
JSR
WCTRL
LDA
#'H'
;Enva letra H
JSR
WDAT
LDA
#'O'
;Enva letra O
JSR
WDAT
LDA
#'L'
;Enva letra L
JSR
WDAT
LDA
#'A'
;Enva letra A
RTS
*********************************************************************************
* VECTORES - Definicin de Vectores del Sistema
*********************************************************************************
org
VECTORES
dw
adc_isr
dw
keyb_isr
; Keyboard Vector
dw
dummy_isr
($FFE2-$FFE3)
dw
dummy_isr
($FFE4-$FFE5)
dw
dummy_isr
($FFE6-$FFE7)
dw
dummy_isr
($FFE8-$FFE9)
dw
dummy_isr
($FFEA-$FFEB)
dw
dummy_isr
($FFEC-$FFED)
dw
dummy_isr
($FFEE-$FFEF)
dw
dummy_isr
($FFF0-$FFF1)
dw
tim_ov_isr
($FFF2-$FFF3)
dw
tim_1_isr
($FFF4-$FFF5)
dw
tim_0_isr
($FFF6-$FFF7)
dw
dummy_isr
($FFF8-$FFF9)
dw
irq_isr
dw
dummy_isr
dw
start
; ~IRQ1
; SWI Vector
; Reset Vector
($FFDE-$FFDF)
($FFE0-$FFE1)
($FFFA-$FFFB)
($FFFC-$FFFD)
($FFFE-$FFFF
*********************************************************************************
end