#define ENABLE #define DISABLE #define LEER
bsf PORTA,2 ;Activa E bcf PORTA,2 ;Desactiva bsf PORTA,1 ;Pone LCD en Modo RD
#define ESCRIBIR bcf PORTA,1 ;Pone LCD en Modo WR #define OFF_COMANDO bcf PORTA,0 ;Desactiva RS (modo comando) #define ON_COMANDO CBLOCK LCD_VAR bsf PORTA,0 ;Activa RS (modo datos)
LCD_TEMP_2;Inicio de las variables. Ser la primera direccin libre ; disponible LCD_TEMP_1 ENDC
;RUTINA UP_LCD: Con esta rutina se configura el PIC para que trabaje con el LCD.
UP_LCD clrf clrf bcf
bsf
STATUS,RP0
;Banco 1 ;RB <0-7> salidas digitales ;RA <0-4> salidas digitales ;Banco 0 ;RS=0
PORTB PORTA STATUS,RP0
OFF_COMANDO DISABLE return ;E=0
;RUTINA LCD_BUSY: Con esta rutina se chequea el estado del
;flag BUSY del mdulo LCD, que indica, cuando est activado, que el ;mdulo an no ha terminado el comando anterior. La rutina espera a ;que se complete cualquier comando anterior antes de retornar al ;programa principal, para poder enviar un nuevo comando.
LCD_BUSY
LEER bsf STATUS,RP0 H'FF'
;Pone el LCD en Modo RD
movlw movwf bcf
PORTB
;Puerta B como entrada ;Selecciona el banco 0 ;Activa el LCD
STATUS,RP0
ENABLE nop L_BUSY btfsc PORTB,7 goto L_BUSY DISABLE bsf clrf bcf STATUS,RP0 PORTB STATUS,RP0
;Chequea bit de Busy
;Desactiva LCD
;Puerta B salida
ESCRIB return
;Pone LCD en modo WR
;RUTINA LCD_E: Se trata de una pequea rutina que se encarga de generar ;un impulso de 1 s (para una frecuencia de funcionamiento de 4 Mhz) ;por la patita de salida de la Puerta A RA2, que se halla conectada
;a la seal E (Enable) del mdulo LCD. Con esta rutina se pretende activar ;al mdulo LCD.
LCD_E nop
ENABLE
;Activa E
DISABLE return
;Desactiva E
;RUTINA LCD_DATO: Es una rutina que pasa el contenido cargado en el ;registro W, el cual contiene un car cter ASCII, a la PUERTA B, para ;visualizarlo por el LCD o escribirlo en la CGRAM.
LCD_DATO
OFF_COMANDO movwf call PORTB
;Desactiva RS (modo comando) ;Valor ASCII a sacar por PORTB
LCD_BUSY
;Espera a que se libere el LCD ;Activa RS (modo dato) ;Genera pulso de E
ON_COMANDO call return LCD_E
;RUTINA LCD_REG: Rutina parecida a la anterior, pero el contenido de W ;ahora es el cdigo de un comando para el LCD, que es necesario pasar ;tambin a la PUERTA B para su ejecucin.
LCD_REG
OFF_COMANDO movwf call call return PORTB
;Desactiva RS (modo comando) ;Cdigo de comando
LCD_BUSY LCD_E
;LCD libre?. ;S. Genera pulso de E.
;RUTINA LCD_INI: Esta rutina se encarga de realizar la secuencia de ;inicializacin del mdulo LCD de acuerdo con los tiempos dados por ;el fabricante (15 ms). Se especifican los valores de DL, N y F, ;as como la configuracin de un interfaz de 8 lneas con el bus ;de datos del PIC, y 2 lneas de 16 caracteres de 5 x 7 pixels.
LCD_INI
movlw call call
b'00111000' ;Cdigo de instruccin
LCD_REG
LCD_DELAY ;Temporiza b'00111000' ;Cdigo de instruccin
movlw call call
LCD_REG
LCD_DELAY ;Temporiza b'00111000' ;Cdigo de instruccin
movlw call call
LCD_REG
LCD_DELAY ;Temporiza b'00111000'
movlw
call call
LCD_REG
;Cdigo de instruccin
LCD_DELAY ;Temporiza b'00111000' ;Cdigo de instruccin
movlw call call
LCD_REG
LCD_DELAY ;Temporiza b'00111000' ;Cdigo de instruccin
movlw call call return
LCD_REG
LCD_DELAY ;Temporiza