;
PORTB		EQU		06H
PORTA		EQU		05H
TRISA		EQU		85H
TRISB		EQU		86H
STATUS		EQU		03H
LCD_VAR 	EQU		0CH
LCD_TEMP_2	EQU		0DH
LCD_TEMP_1	EQU		0EH

#DEFINE		ENABLE		BSF	PORTA,2		;ACTIVA EL PIN E PARA QUE ESTE HABULITADO
#DEFINE		DISABLE		BCF	PORTA,2		;ACTIVA EL PIN E PARA QUE ESTE DESABILITADO
#DEFINE		LEER		BSF	PORTA,1		;PONE EL LCD EN MODO LECTURA
#DEFINE		ESCRIBIR	BCF	PORTA,1		;PONE EL LCD EN MODO ESCRITURA
#DEFINE		OFF_COMANDO	BCF	PORTA,0		;DESACTIVA RS (MODO COMANDO)
#DEFINE		ON_COMANDO	BSF	PORTA,0		;ACTIVA RS (MODO COMANDO)

CBLOCK									;ayuda con esto nose para que sirv y cuando lo 
	LCD_VAR								;compilo me saca un error
	LCD_TEMP_2
	LCD_TEMP_1
ENDC

;CON ESTA RUTINA SE CONFIGURA EL PIC PARA QUE TRABAJE CON UN LCD

UP_LCD
	BSF		STATUS,5	;CAMBIO DE BANK
	CLRF	PORTB		;PONGO TODO COMO SALIDA
	CLRF	PORTA		;PONGO TODO COMO SALIDA
	BCF		STATUS,5	;AMBIO DE BANK
	ENABLE
	RETURN

;CON ESTA RUTINA SE CHEQUE EL ESTADO DE LA ELFG BSUY OSEA SI ESTA OCUPADO EL LCD

LCD_BUSY
		LEER							;ACTIVA EL LCD MODO LECTURA
		BSF		STATUS,5				;CAMBIO DE BAK
		MOVLW	H'FF'					;PONE TODO EN ENTRADA
		MOVWF	PORTB					;MUEVE AL PUERTO B
		BCF		STATUS,5				;CANBIO DE BANK
		ENABLE							;HABILITA EL LCD
		NOP		
L_BUSY	BTFSC	PORTB,7					;SI EL PIN 7 ESTA EN 1 ESTA OCUPADO
		GOTO	L_BUSY		
		DISABLE							;DESABILITO EL LCD
		BSF		STATUS,5				
		CLRF	PORTB
		BSF		STATUS,5
		ESCRIBIR						;PONGO MODO ESCRIBIR
		RETURN

;CON ESTA RUTINA SE ACTIVA EL MODULO

LCD_E
		ENABLE							;HABILITO EL LCD
		NOP	
		DISABLE							;DESABILITO EL LCD
		RETURN
;ESTA RUTINA PASA EL CONTENIDO DE W (UN DATO UNA LETRA) HA EL PUERTO B PARA SER VISTO EN LCD

LDCD_DATO
		OFF_COMANDO						;DESACTIVO MODO COMANDO
		MOVWF	PORTB					;PONGO LO QUE TENGA W UN DATO EN PUERTOB
		CALL	LCD_BUSY				;PARA SABER SI ESTA OCUPADO
		ON_COMANDO						;ACTIVO EL MODO COMANDO
		CALL	LCD_E					;ACTVI EL LCD
		RETURN
;ESTA RUTNINA PASA EL CONTENIDO DE W (CODIGO DE COMANDO PARA EL LCD)

LCD_REG
		OFF_COMANDO						;DESACTIVO EL MODO COMANDO
		MOVWF	PORTB					;PONGO EL COMANDO EL PUETO B
		CALL	LCD_BUSY				;ESTA OCUAPDO ?
		CALL	LCD_E					;ACTIVO
		RETURN

;ESTA RUTINA SE ENCACGAR DE CONFIGFURA EL LCD PARA EL PIC

LCD_INI
		MOVLW	B'00111000'				;DL=BUS DE 8 DATOS N=16X2 F=5X7 PIXLES
		CALL	LCD_REG					;VA PARA QUE SE EJECUTE EL COMANDO 
		CALL	LCD_DELAY				;RETARDO
		MOVLW	B'00111000'				
		CALL	LCD_REG
		CALL	LCD_DELAY
		MOVLW	B'00111000'
		CALL	LCD_REG
		CALL	LCD_DELAY
		RETURN

;ESTA RUTNINA BOORA Y MANDA AL HOME		

BORRAR_Y_HOME
		MOVLW	B'00000001'				;INTRUCION PARA BORAR LA PANTALLA Y PONER EL CURSOR
		CALL	LCD_REG
		RETURN

;ESTA RUTINA ACTIVA EL DISPLAY Y DESACTIVA EL CURSOR

DISPLAY_ON_CUR_OFF
		MOVLW	B'00001100'				;INSTRUCCION PARA QUE ESTE LISTA LA PNATAL PERO QNO HALLA CURSOS NI ESTE PARPADIANDO
		CALL 	LCD_REG
		RETURN

;ESTA RUTNIA ES EL RETADOR DE 15MS

LCD_DELAY
		CLRWDT
		MOVLW	.10
		MOVWF	LCD_TEMP_1
		CLRF	LCD_TEMP_2
LOOP	DECFSZ	LCD_TEMP_2,F
		GOTO	LOOP
		DECFSZ	LCD_TEMP_1,F
		GOTO	LOOP
		RETURN
		END
