pic Jul. 2016 | Page 72

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