"Teoría es cuando se sabe todo y nada funciona. Práctica es cuando todo funciona y nadie sabe porqué. En este recinto se conjugan Teoría y Práctica: nada funciona y nadie sabe porqué..."

---------------------------------------------------------------


Rutinas para inicializar un LCD con PIC's


Con estas pequeñas rutinas podras enviar un dato (D_LCD) o un comando (C_LCD) a un display de cristal liquido LCD mediante los microcontroladores PIC's. El puerto PB (nibble alto) se usa para enviar la información y los pines PA.0 y PA.1 para control del LCD (RS y EN respectivamente; la terminal R/W' del display debe ser conectada a 0 volts) Puedes hacer uso del Sistema de Desarrollo para PIC16F84A. Sólo tienes que definir las siguientes variables: DATA_LCD, TEMP1 y TEMP2 y la información colocarla en el registro W.

;*****************************************************
; ------ Rutina de configuracion de puertos para el display ------
;--------------------------------------------------------------------------

INI_LCD:  bsf           STATUS,5         ;Banco 1
               movlw      b'00001111'      ;Salida (0's)/ entrada (1's)
               movwf      TRISB               ;Puerto B = 0000 1111
               movlw      b'00011000'      ;Salida (0's)/ entrada (1's)
             movwf     TRISA            ;Puerto A salida PA0=RS, PA1=EN
               bcf           STATUS,5          ;Banco 0
               bsf           PORT_A,1          ;E=1 Desactiva LCD
               return
;****************************************************
; ------- Rutina de configuracion del DISPLAY LCD -------
;-------------------------------------------------------------------------

LCD_CNFG:movlw    b'00110011'
               call          C_LCD
               movlw      b'00100010'
               call          C_LCD
               movlw      b'00101000'
               call          C_LCD
               movlw      b'00000001'
               call          C_LCD
               movlw      b'10000000'
               call          C_LCD
               movlw      b'00001100'
               call          C_LCD
               return
;****************************************************
; ------- Rutina para enviar DATO y COMANDO al DISPLAY -------
;------------------------------------------------------------------------

C_LCD:    bcf          PORT_A,0         ;RS = 0 (modo comando)
               goto        LCD_GO

D_LCD:    bsf          PORT_A,0         ;RS = 1 (modo dato)

LCD_GO: movwf     DATA_LCD
              movwf     PORT_B         ;Información a sacar por PORT_B
              call          DELAY_LCD       ;Espera a que se libere el LCD
              bcf          PORT_A,1          ;Activa señal E
              call          DELAY_LCD       ;Espera a que se libere el LCD
              bsf          PORT_A,1         ;Activa señal E
              call          DELAY_LCD
              swapf      DATA_LCD,W
              movwf    PORT_B        ;Información a sacar por PORT_B
              call         DELAY_LCD       ;Espera a que se libere el LCD
              bcf         PORT_A,1         ;Activa señal E
              call         DELAY_LCD      ;Espera a que se libere el LCD
              bsf         PORT_A,1         ;Activa señal E
              return
;*****************************************************
; ------- RUTINA DE RETARDO PARA EL LCD -------
;------------------------------------------------------------------
DELAY_LCD: movlw      0x03
                   movwf      TEMP2            ;Carga la variable TEMP2
L1:              clrf   TEMP1                    ;Carga la variable TEMP1
L2:             decfsz       TEMP1,1      ;Decrementa la variable TEMP1
                  goto L2
               decfsz       TEMP2,1        ;Decrementa la variable TEMP2
                  goto L2
                  return