
; El pin de lectura/escritura del lcd se debe colocar a tierra, esta libreria es de
; solo escritura en el lcd...




#define	Enable			bsf	6h,3;  Activa E PORTB
#define	Disable			bcf	6h,3;  Desactiva E PORTB
#define	COMANDO			bcf	7h,1;  DesactivaRS(modo comando)PORTC
#define	DATOS			bsf	7h,1;  ActivaRS(modo DATOS) PORTC

	CBLOCK
		LCD_VAR		;inicio de las variables
		Lcd_temp_2
		lcd_temp_1
	ENDC
;---------------------------------------------------------------------------------- 
		;SE CONFIGURA EL PIC PARA QUE TRABAJE CON EL LCD.
;---------------------------------------------------------------------------------- 
UP_LCD	BSF		3,5 		;BANCO 1
	 	CLRF 	6h 			;RBB <0-7> SALIDAS DIGITALES
		CLRF	7h			;PORTC
	 	BCF 	3,5 		;BANCO 0
		COMANDO			;RS=0
		DISABLE 			;E=0
		RETURN

;---------------------------------------------------------------------------------- 
		;ACTIVA Y DESACTIVA EL LCD
;---------------------------------------------------------------------------------- 
LCD_E 	ENABLE				;ACTIVA E
		NOP
		DISABLE				;DESACTIVA E
		RETURN

;----------------------------------------------------------------------------------  
		;PASA EL CONTENIDO CARGADO EN EL REGISTRO W A LA DDRAM.
;----------------------------------------------------------------------------------  
LCD_DATO 	COMANDO				;DESACTIVA RS (MODO COMANDO)
		MOVWF	6h			;VALOR ASCII A SACAR POR PORTB
		CALL 	LCD_DELAY_2 		;ESPERA PARA ASEGURAR QUE EL DATO ESTA EN EL BUS DE DATOS
		DATOS 				;ACTIVA RS (MODO DATO)
		CALL 	LCD_E 			;GENERA PULSO DE E PARA QUE EL LCD TOME EL DATO
 		RETURN

;----------------------------------------------------------------------------------   
		;CODIGO DE UN COMANDO PARA EL LCD 
;----------------------------------------------------------------------------------  
LCD_REG 	COMANDO				;DESACTIVA RS (MODO COMANDO)
		MOVWF 	6h			;CODIGO DE COMANDO
		CALL 	LCD_DELAY_2		;ESPERA UN TIEMPO PARA QUE SE EJECUTE ALGUN COMANDO
						;ENVIADO PREVIAMENTE
		CALL 	LCD_E 			;GENERA PULSO DE E PARA QUE EL LCD CAPTE EL NUEVO COMANDO
						;QUE ESTA COLOCADO EN EL BUS DE DATOS.
 		RETURN
;----------------------------------------------------------------------------------   
		;SECUENCIA DE INICIALIZACION DEL MODULO LCD 
;----------------------------------------------------------------------------------  
LCD_INI		MOVLW	B'00111000'
			CALL	LCD_REG 		;CODIGO DE INSTRUCCION
			CALL	LCD_DELAY		;TEMPORIZA
			MOVLW	B'00111000'
			CALL	LCD_REG			;CODIGO DE INSTRUCCION
			CALL	LCD_DELAY		;TEMPORIZA
			MOVLW 	B'00111000'
			CALL	LCD_REG			;CODIGO DE INSTRUCCION
			CALL 	LCD_DELAY		;TEMPORIZA
			RETURN

;----------------------------------------------------------------------------------   
		;BORRA EL DISPLAY Y RETORNA EL CURSOR A LA POSICION 0. 
;----------------------------------------------------------------------------------  
BORRA_Y_HOME	MOVLW 	B'00000001' 		;BORRA LCD Y HOME.
				CALL 	LCD_REG
				RETURN

;----------------------------------------------------------------------------------   
		;RUTINA DESPLAZAMIENTO DEL CURSOR
;----------------------------------------------------------------------------------  
CURSOR		MOVLW 	B'00000110' 		;Mensaje en modo normal y 
			CALL 	LCD_REG
			RETURN

;----------------------------------------------------------------------------------   
		;CONTROL DEL DISPLAY Y CURSOR.
;----------------------------------------------------------------------------------  
DISPLAY_ON_CUR_OFF	MOVLW B'00001100'	 	;LCD ON, CURSOR OFF.
					CALL 	LCD_REG
					RETURN

;----------------------------------------------------------------------------------  
		;CONTROL DEL DISPLAY Y CURSOR.
;----------------------------------------------------------------------------------  
DIS_ON_CUR_ON	MOVLW 	B'00001111' 		;LCD ON, CURSOR ON.
				CALL 	LCD_REG
				RETURN

;----------------------------------------------------------------------------------   
		;IMPLEMENTA UN RETARDO  DE 12.3 msg
;----------------------------------------------------------------------------------  
LCD_DELAY	MOVLW 	10
			MOVWF 	LCD_TEMP_1
			CLRF 	LCD_TEMP_2
LCD_DELAY_1 
			DECFSZ	LCD_TEMP_2,F
			GOTO	LCD_DELAY_1
			DECFSZ	LCD_TEMP_1,F
			GOTO	LCD_DELAY_1
			RETURN

;----------------------------------------------------------------------------------  
		;SE IMPLEMENTA UN RETARDO ENTRE COMANDOS Y DATOS HACIA EL LCD DE 2.3 msg
;---------------------------------------------------------------------------------- 
LCD_DELAY_2		MOVLW 	3
				MOVWF 	LCD_TEMP_1
				CLRF 	LCD_TEMP_2
LCD_DELAY_1_2 	DECFSZ	LCD_TEMP_2,F
				GOTO	LCD_DELAY_1_2
				DECFSZ	LCD_TEMP_1,F
				GOTO	LCD_DELAY_1_2
				RETURN	

;		BORRAR PRIMERA LINEA 

CLRLIN1		MOVLW	0X80	
		CALL	LCD_REG
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO		
		MOVLW	' '		
		CALL	LCD_DATO
		MOVLW	' '		
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		RETURN

;;		BORRAR SEGUNDA LINEA

CLRLIN2		MOVLW	0XC0	
		CALL	LCD_REG
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO		
		MOVLW	' '		
		CALL	LCD_DATO
		MOVLW	' '		
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		MOVLW	' '
		CALL	LCD_DATO
		RETURN
