Hola a todos, alguien puede decirme cual es el error que estoy cometiendo en el código para el manejo de un lcd con el pic16f873a?.
Tengo las rutinas para manejar el LCD con el pic 16f84a y funciona perfectamente pero cuando aplico el mismo código con el pic16f873a no funciona, la pantalla solo muestra la primera linea llena de cuadritos negros.
Bueno, de antemano agradezco su atención y toda la ayuda que puedan darme.
Este es el código que estoy manejando:
LCD01.asm
   list   p=16f873a
   INCLUDE "PIC16F873A.INC"    ; Directivas del pic
   CBLOCK 0x20
    DATO_TMP
   ENDC
   org   0x00
   goto   inicio
   org   0x05   
inicio
   call   inicializa
   call   lcd_configura
principal
   call   BORRAR_LCD
   call   CURSOR_P_LINEA1
   movlw   Mensaje1
   call   msj_mensaje
   sleep
mensaje
   addwf   PCL,F
Mensaje1
   dt   "Hola",0x00
   INCLUDE "RETARDOS_AL_OK.INC"  ; Rutinas de retardos
   INCLUDE "LCD_LIB_OK.INC" ; Rutinas para el manejo de LCD
   INCLUDE "MSJS.INC" ; Rutina para transmitir mensaje
   end
_______________________________________________________________
LCD_LIB_OK.INC
   #DEFINE   PinRs   TRISA,0
   #DEFINE   PinRw   TRISA,1
   #DEFINE   PinE   TRISA,2
inicializa
   BSF      STATUS,5   ;seleccion del banco 1
   BCF      PinRs      ;configuracion de los pines
   BCF      PinRw      ;RS,RW,E como salidas
   BCF      PinE
   CLRF   TRISB
   BCF      STATUS,5     ;seleccion del banco
   BCF   PinRs       ;activa modo comando
   BCF   PinRw      ;operacion de lectura si RW esta conectado
   BCF   PinE      ;deshabilita lcd
   CALL   Retardo_20ms
   MOVLW   B'00110000'
   CALL   ESCRIBE_LCD
   CALL   Retardo_5ms
   MOVLW   B'00110000'
   CALL   ESCRIBE_LCD
   CALL   Retardo_200us
   MOVLW   B'00110000'
   CALL   ESCRIBE_LCD
   MOVLW   B'00100000'
   CALL   ESCRIBE_LCD   
   RETURN
lcd_configura
   CALL      ENTRY_MODE
   CALL      DISPLAY_CONTROL
   CALL      DISPLAY_CURSOS
   CALL      FUNCTION_SET
   CALL      CURSOR_P_LINEA1   
   RETURN
ENTRY_MODE
   MOVLW   B'00000111'
   GOTO   TX_COMANDO
DISPLAY_CONTROL
   MOVLW   B'00001000'
   GOTO   TX_COMANDO
DISPLAY_CURSOS
   MOVLW   B'00011100'
   GOTO   TX_COMANDO
FUNCTION_SET
   MOVLW   B'00101000'
   GOTO   TX_COMANDO
BORRAR_LCD
   MOVLW   B'00000001'
   GOTO   TX_COMANDO
CURSOR_P_LINEA1
   MOVLW   B'10000000'
   GOTO   TX_COMANDO
CURSOR_P_LINEA2
   MOVLW   B'11000000'
   GOTO   TX_COMANDO
ESCRIBE_LCD
   ANDLW   B'11110000' ;ENMASCARA PARTE ALTA DEL DATO A TX
   MOVWF   PORTB
   BSF      PinE
   BCF      PinE
   RETURN
TX_COMANDO
   BCF      PinRs
   GOTO   TX_DATOS
TX_CARACTER
   BSF      PinRs
TX_DATOS
   MOVWF   DATO_TMP
   CALL   ESCRIBE_LCD ;ENVIA PARTE ALTA DEL DATO
   SWAPF   DATO_TMP,0 ;EL DATO SE ALMACENA EN W
   CALL   ESCRIBE_LCD ;ENVIA PARTE BAJA DEL DATO
   BTFSS   PinRs
   CALL   Retardo_2ms
   CALL   Retardo_50us
   RETURN