Tengo este código para enviar un texto a una pantalla LCD mediante un PIC16F877 pero no puedo hacer que funcione. La comprobación de estado del buffer de la LCD lo realizo mediante el bit 3 de PORTA. Podrían ayudarme con esto, ya rehice el código varias veces y no encuentro el posible error.
processor 16f877
include <p16f877.inc>
__config _RC_OSC & _WDT_OFF & _PWRTE_ON
;INICIALIZACIÓN DE VARIABLES
EN equ 0
RS equ 1
RW equ 2
letra equ H'1F'
org 0
;CONFIGURACIÓN DE PUERTOS DE E/S
bsf STATUS,RP0
bcf STATUS,RP1
clrf TRISB
movlw b'00000110'
movwf ADCON1
movlw b'1000'
movwf TRISA
bcf STATUS,RP0
;INICIO DEL PROGRAMA
call INIT_LCD
call LIMPIA_LCD
;POSICIÓN DE LA PRIMER LETRA
bcf PORTA,1
movlw H'C0'
bsf PORTA,0
bcf PORTA,0
call ESP_LCD
;ENVÍA LOS DATOS A LA LCD
movlw B'01001000' ;ASCII de la letra H
movwf letra
call ESCRIBIR_LCD
movlw B'01001111' ;ASCII de la letra O
movwf letra
call ESCRIBIR_LCD
movlw B'01001100' ;ASCII de la letra L
movwf letra
call ESCRIBIR_LCD
movlw B'01000001' ;ASCII de la letra A
movwf letra
call ESCRIBIR_LCD
goto FINAL
;FUNCIÓN PARA VERIFICAR EL BUFFER DE LA LCD
ESP_LCD:
bcf PORTA,EN
bcf PORTA,RS
bsf PORTA,RW
movlw H'FF'
movwf PORTB
bsf PORTA,EN
bcf PORTA,EN
movfw letra
btfsc PORTA,3
call ESP_LCD
bcf PORTA,EN
bcf PORTA,RW
return
;FUNCIÓN PARA INICALIZAR Y CONFIGURAR LA LCD
INIT_LCD:
bsf PORTA,EN
bcf PORTA,RS
movlw H'38'
movwf PORTB
bcf PORTA,EN
bsf PORTA,EN
bcf PORTA,EN
call ESP_LCD
bsf PORTA,EN
bcf PORTA,RS
movlw H'0E'
movwf PORTB
bcf PORTA,EN
bcf PORTA,EN
call ESP_LCD
bsf PORTA,EN
bcf PORTA,RS
movlw H'06'
movwf PORTB
bsf PORTA,EN
bcf PORTA,EN
call ESP_LCD
return
;FUNCIÓN PARA LIMPIAR LA PANTALLA DE LA LCD
LIMPIA_LCD:
bcf PORTA,RS
movlw H'01'
movwf PORTB
bsf PORTA,EN
bcf PORTA,EN
call ESP_LCD
return
;FUNCIÓN PARA ENVIAR TEXTO A LA PANTALLA DE LA LCD
ESCRIBIR_LCD:
bsf PORTA,RS
movwf PORTB
bsf PORTA,EN
bcf PORTA,EN
call ESP_LCD
return
FINAL:
end