esta es una libreria mia de una version anterior, es de una conexcion de 4 bits por el nibble bajo, ya que por ahi lei que estabas usando el nibble bajo.
FLAG_ADDRES_LCD_4LBITS es un registro donde guardo el dato leido en el lcd. en este caso, la addres del pc del lcd, junto con el busy flag.
;Lee el bus del LCD;
;******************;
BF_4L
LCD_4LBITS_LEE ;R/W = 1, modo lectura
nop
LCD_4LBITS_COMANDO ;RS = 0, modo comando
nop
LCD_4LBITS_E_ON ;E = 1, habilita bus del LCD
nop
LCD_4LBITS_E_OFF ;E = 0, deshabilita el bus del LCD
nop
movf PORT_LCD_4LBITS,W ;Lee el LCD los 4 bits MSB
andlw 0x0F
banksel FLAG_ADDRES_LCD_4LBITS
movwf FLAG_ADDRES_LCD_4LBITS
swapf FLAG_ADDRES_LCD_4LBITS,F
banksel PORT_LCD_4LBITS
LCD_4LBITS_LEE ;R/W = 1, modo lectura
nop
LCD_4LBITS_COMANDO ;RS = 0, modo comando
nop
LCD_4LBITS_E_ON ;E = 1, habilita bus del LCD
nop
LCD_4LBITS_E_OFF ;E = 0, deshabilita el bus del LCD
nop
movf PORT_LCD_4LBITS,W ;Lee el LCD los 4 bits LSB
andlw 0x0F
banksel FLAG_ADDRES_LCD_4LBITS
addwf FLAG_ADDRES_LCD_4LBITS,F
;LCD ocupado o listo?; ;Si el bit 7 del FLAG_ADDRES_LCD_4LBITS
;********************; ;esta a cero, el LCD se encuentra
; banksel FLAG_ADDRES_LCD_4LBITS ;listo, si esta a uno, el LCD se
; movwf FLAG_ADDRES_LCD_4LBITS ;encuentra ocupado. Los otros bits
btfsc FLAG_ADDRES_LCD_4LBITS,7 ;indican direccion actual del LCD
goto BF_4L ;
hay dos cosas que quizas deba de aclarar. la seccion donde leo el bus del lcd y lo guardo en el registro FLAG_ADDRES_LCD_4LBITS, lo hago mediante un arreglo rudimentario (es una version desfasada) ya que lo que deseo es tener el dato en un solo registro. Lo otro, es el desorden, como los tabs no funcionan y solo hice un copy paste del mplab a la web, se ve asi. trate de arreglarlo un poco, pero no queda bien.
Como te decia, en esta version, leo el lcd, y lo guardo en un registro, y ahi testeo el bit busy flag del lcd. La nueva version ya no la hace asi, lo testea directamente.
Como te decia, el dato se actualiza en el flanco de bajada, y por ser una conexion de 4 bits, se tiene que leer 2 veces.