La utilización de la LCD es lenta. Una escritura o lectura puede tardar entre 40 y
120 µsegundos; otras instrucciones pueden llegar a los 5 ms. Para lograr que el PIC no
necesite esperar tiene una instrucción de 1µseg que lee la dirección del contador y una
bandera interior de ocupado. Cuando la bandera de ocupado (BF) está a 1, la LCD no
puede leer ni escribir.
En nuestro ejemplo, del que a continuación mostramos el esquema, las líneas de
datos se comparten con el teclado y una barra de diodos. Compartir la puerta B es una
de las ventajas del PIC, puesto que le da una gran capacidad de reconfiguración, por su
sencillez y rapidez.
HABILITACIÓN DE UNA LCD. RUTINA LCD_HABILITA
La línea EN de habilitación de una LCD necesita estar activada durante, al menos,
500 ns. La rutina LCD_Habilita de la LCD.LIB se asegura de que así sea, siendo LCDE
= PORTA.2, es decir, EN:
LCD_Habilita
;
;
;
;
;
Envía un impulso de habilitación de 500 ns a la LCD para
completar la operación de escribir un registro o un carácter
La instrucción NOP sólo es necesaria para procesadores de
una velocidad superior a 8 MHz. Si el procesador es de
más de 16 MHz, se debe añadir un segundo NOP
BSF LCDE
NOP
BCF LCDE
RETURN
;
;
;
;
Pone a 1 la línea EN (habilita la LCD)
Pausa para 250 ns extra
(según velocidad del micro)
Pone a 0 la línea EN (deshabilita la LCD)
SELECCIÓN DE MODO (COMANDO/DATOS).
La línea I/D selecciona entre el modo comando si vale 0 o el modo datos si es 1.
Una llamada tipo CALL LCD_Comando asegurará dicho modo antes de una
habilitación de la LCD; lo mismo sucederá con LCD_Carácter.
LCD_Comando
;
;
;
;
;
Carga W con una constante software LCD de la tabla de
igualdades. LCD_Comando saca el comando a la LCD y
activa la línea de comando de la LCD, y la propia LCD
mediante la llamada a LCD_Habilita, completando así
el comando.
BCF LCDModo ; Entra en modo registro
MOVWF portb ; y envía W a LCD en puertoB.
; W, por tanto, habrá de tener ya el valor
; del comando antes de que el programa
; invoque a LCD_Comando
CALL LCD_Chequea ; Chequea la bandera de LCD ocupada
GOTO LCD_Habilita
; Envía el comando
LCD_Carácter
; Carga W con el código ASCII del carácter que desea
; enviar a la LCD. Activará para ello el modo datos
; y, posteriormente, la LCD mediante una llamada a
70