Hola kitiara, soy muy novato con el 876, y aunque creo que programas en C, te paso la parte principal de mi libreria en ASM por si te sirviera de algo. Lo uso a 4 bits, y el pin RW a masa. La parte alta del LCD conectada a la parte baja del puerto C (DB4-RC0; DB5-RC1, ... PIN RS-RC4; PIN E-RC5). Mi LCD no tiene iluminacion asi que en eso.... Si necesitas la libreria entera te la paso por email.
CBLOCK
LCD_Dato
LCD_GuardaDato
LCD_GuardaTRISC
LCD_Auxiliar1
LCD_Auxiliar2
ENDC
LCD_CaracteresPorLinea EQU .16 ; Número de caracteres por línea de la pantalla.
#DEFINE LCD_BusDatos PORTC
LCD_Inicializa
bcf PINE
bcf PINRS
call Retardo_20ms
movlw b'00110000'
call LCD_EscribeLCD
call Retardo_5ms
movlw b'00110000'
call LCD_EscribeLCD
call Retardo_200micros
movlw b'00110000'
call LCD_EscribeLCD
movlw b'00100000'
call LCD_EscribeLCD
call LCD_2Lineas4Bits5x7
call LCD_Borra
call LCD_CursorOFF
call LCD_CursorIncr
return
LCD_EscribeLCD
andlw b'11110000'
movwf LCD_Dato
swapf LCD_Dato,F
movf LCD_BusDatos,W
andlw b'11110000'
iorwf LCD_Dato,F
bsf STATUS,RP0
movf PORTC,W
movwf LCD_GuardaTRISC
movlw b'11110000'
andwf PORTC,F
bcf STATUS,RP0
movf LCD_Dato,W
movwf LCD_BusDatos
bsf PINE
bcf PINE
bsf STATUS,RP0
movf LCD_GuardaTRISC,W
movwf PORTC
bcf STATUS,RP0
return
LCD_EnviaComando
bcf PINRS
goto LCD_Envia
LCD_Caracter
bsf PINRS
call LCD_CodigoCGROM
LCD_Envia
movwf LCD_GuardaDato
call LCD_EscribeLCD
swapf LCD_GuardaDato,W
call LCD_EscribeLCD
btfss PINRS
call Retardo_2ms
call Retardo_50micros
return
Un saludo.