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