Hola groundman ,esta es la rutina que uso cuando quiero usar el lcd 16x2 a 4bits
,el retardo esta hecho para un oscilador 4mhz y me resulto bien para varios modelos de lcd ,el registro TEMPLCD es el que contiene el byte sea de comando o dato. La rutina esta hecha para usar la parte alta del puerto B y las señales de control estan puestas en el puerto A
Saludos!!!
;*********************************************************
;INICIO LCD MODO 4
;*********************************************************
LCD MOVLW 02H
CALL CONTROL
MOVLW 28H
CALL CONTROL
MOVLW 0CH
CALL CONTROL
MOVLW 06H
CALL CONTROL
MOVLW 01H
CALL CONTROL
RETURN
;*********************************************
RETARDO
MOVLW 0FFH
MOVWF TEMP_1
NOP
DECFSZ TEMP_1,F
GOTO $-1
RETURN
;====================================
;**********************************************
CONTROL
BCF PORTA,RS
GOTO DATO2
DATO BSF PORTA,RS
DATO2 BSF PORTA,E
MOVWF TEMPLCD
MOVLW 0FH
ANDWF PORTB,F
MOVF TEMPLCD,W
ANDLW 0F0H
IORWF PORTB,F
CALL RETARDO
BCF PORTA,E
CALL RETARDO
BSF PORTA,E
MOVLW 0FH
ANDWF PORTB,F
SWAPF TEMPLCD,W
ANDLW 0F0H
IORWF PORTB,F
CALL RETARDO
BCF PORTA,E
CALL RETARDO
RETURN
;===============================