Aqui pongo el codigo que estoy usando, ahora sia lgo cambios como el que me indicaste de colocar H"80" antes de escribir HOLA me pasa que la primera fila se pone toda en negrita toda sombreada
;************** Comandos para manejo del LCD *************
LIST P=16F877A
INCLUDE <P16F877A.INC>
STATUS EQU 0X03 ;Dirección del registro STATUS.
LCD_E EQU 2 ;Bit del puerto A para control de E.
LCD_RW EQU 1 ;Bit del puerto A para control de R/W.
LCD_RS EQU 0 ;Bit del puerto A para control de RS.
RETARDO1 EQU 0X0D ;Constante del temporizador 1
RETARDO2 EQU 0X00 ;Constante del temporizador 2
CONTA EQU 20
ORG 0X0C ;registro de Uso general
CONT1 RES 1 ;Reserva un Byte para la Variable CONT1
CONT2 RES 1 ;Reserva un Byte para la Variable CONT2
ORG 0X00
GOTO START
ORG 05
;INCIALIZACION LCD POR SOFTWARE
START
CALL TEMPO2
MOVLW 0X38
CALL LCDI
CALL TEMPO2
CALL TEMPO2
MOVLW 0X38
CALL LCDI
CALL TEMPO2
MOVLW 0X38
CALL LCDI
MOVLW B"00111000" ;Modo de transferencia a 8 bits, 2 lineas y matriz de 5X7
CALL LCDI
MOVLW B"00001000" ;Display OFF
CALL LCDI
MOVLW B"00000001" ;Clear DISPLAY
CALL LCDI
MOVLW B"00000110" ;Display trabaja con desplazamiento a la derecha despues de
CALL LCDI ;;Cada dato, e incremento del cursor
MOVLW B"00001110" ;Display ON cursor ON sin Parpadeo
CALL LCDI
BSF STATUS,5 ;Cambio al banco 1
MOVLW 0X06
MOVWF ADCON1
MOVLW B"00000000"
MOVWF TRISA ;Configura todo el puerto A como salida.
MOVLW B"00000000"
MOVWF TRISD ;;Configura todo el puerto B como salida
MOVLW 0xC7 ;dato de configuración para el timer0
MOVWF OPTION_REG ;modo temporizador, preescalador 1/256 asignado a timer0
BCF STATUS,5 ;Cambio al banco 0
CLRF PORTA
CLRF PORTD
MENU
MOVLW H"80"
CALL LCDI
MOVLW "H" ;Coloca el carácter ASCII en W
CALL LCDC
MOVLW "O" CALL LCDC ;
MOVLW "L" ;
CALL LCDC MOVLW "A" CALL LCDC .
INFINITO
CLRF PORTA
CLRF PORTD
GOTO INFINITO
LCDI
BCF PORTA,LCD_RW ;Coloca "0" en el Pin RW.
BCF PORTA,LCD_RS ;Coloca "0" en el Pin RS.
BSF PORTA,LCD_E ;Coloca "1" en el Pin E
MOVWF PORTD ; BCF PORTA,LCD_E ;Coloca "0" en el Pin E
CALL TEMPO1 ;Llamada de una tiempo de 40 micro segundos.
RETURN ;Finaliza la Rutina de tiempo.
LCDC
BCF PORTA,LCD_RW ;Coloca "0" en el Pin RW.
BSF PORTA,LCD_RS ;Coloca "1" en el Pin RS.
BSF PORTA,LCD_E ;Coloca "1" en el Pin E
MOVWF PORTD ;Coloca el contenido al modulo LCD.
BCF PORTA,LCD_E ;Coloca "0" en el Pin E
CALL TEMPO1 ;subrutina de 40 micro segundos.
RETURN ;Finaliza la Rutina de tiempo.
TEMPO1 MOVLW RETARDO1
MOVWF CONT1
CICLOT1 NOP
DECFSZ CONT1,1
GOTO CICLOT1
RETURN
TEMPO2 MOVLW RETARDO2
MOVWF CONT2
CICLOT2 CALL TEMPO1
DECFSZ CONT2,1
GOTO CICLOT2
RETURN
END