"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 con PIC's. 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 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'00000110'

call C_LCD

movlw b'00001111'

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