Para poder ayudarte es necesario ver el código ASM.
El programa que actulmente tienes puede haberse hecho de miles de formas, por tanto para poder entenderlo y ayudarte, cualquiera de nosotros debe ver primero el código fuente.
Ideal, si además del código anexaras el diagrama de conexionado. Sin un poco más de información es como dar "palos a ciegas".
Saludos.-
Mi Codigo es el siguiente:
INCLUDE <P16F887.INC>
LIST p=16F887
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _DEBUG_OFF & _IESO_OFF & _BOR_ON & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR40V
CBLOCK 0X40
val1
val2
ETE
ENDC
;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
ORG 0x00 ;Inicio en el Vector de Reset
GOTO INICIO ;Va a la primera instruccion del programa
;<<<<<<------------------- VECTOR DE INTERRUPCION -------------------->>>>>>>
ORG 0x04 ;Vector de interrupcion
goto INTER ;salta a la linea INTER
;<<<<<<----------------- CONFIGURACION DE LOS REGISTROS GENERALES ------------------->>>>>>>
INICIO
BANKSEL ANSEL;;---Se definen PORTA y PORTB como digitales
CLRF ANSEL
CLRF ANSELH
BANKSEL TRISA
CLRF TRISD
CLRF TRISE
MOVLW .25 ;--valor para seleccionar 9600 baudios
MOVWF SPBRG
MOVLW b'00100100' ;Configuracion USART modo alta velocidad 9600 baud y activacion de transmision
MOVWF TXSTA ;carga valor anterior en registro asociado al generador del baud rate
BANKSEL RCSTA
MOVLW b'10010000' ;Configuracion de la usart
MOVWF RCSTA ;para recepcion continua y habilitacion del USART
bsf PIE1,RCIE ;Habilitacion interrupcion RX
BANKSEL INTCON ;Cambio al banco 0
movlw b'11000000' ;Habilitacion para las
movwf INTCON ;interrupciones generales
BANKSEL PORTA
CLRF PORTA
CLRF PORTB
CLRF PORTC
CLRF PORTD
CLRF PORTE
START_LCD:
call INICIA_LCD ;Configura el LCD
;<<<<<<<<-------------------------VISUALIZACION DE DATO RECIBIDO------------>>>>>>>>>>>>>>
leer_teclado
NOP ;--Se comporta como un tiempo de asentamiento
MOVF RCREG,W;;---Leer el buffer de recepción
MOVWF PORTD ;Visualiza dato recibido
call ENVIA
CALL DELAY
CALL DELAY
call INTER
CLRF RCREG
GOTO leer_teclado
ENVIA:
bsf PORTE,0 ; RS=1 MODO DATO
call COMANDO ; Se da de alta el comando
RETURN
;<<<<<<<<-------------------COMPROVACION DE TIPO DE INTERRUPCION------------>>>>>>>>>>>>>>
INTER
BCF STATUS,RP0
BCF STATUS,RP1
btfss PIR1,RCIF ;comprueba si el shift register(RSR)esta lleno.y si es asi salta
retfie ;retorno de interrupcion si no se ha dado la circunstancia anterior
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIA_LCD:
bcf PORTE,0 ; RS=0 MODO INSTRUCCION
movlw 0x01 ; El comando 0x01 limpia la pantalla en el LCD
movwf PORTD
call COMANDO ; Se da de alta el comando
movlw 0x0C ; Selecciona la primera línea
movwf PORTD
call COMANDO ; Se da de alta el comando
movlw 0x3C ; Se configura el cursor
movwf PORTD
call COMANDO ; Se da de alta el comando
bsf PORTE, 0 ; Rs=1 MODO DATO
return
;Subrutina para enviar comandos
COMANDO:
bsf PORTE,1 ; Pone ENABLE en 1
call DELAY ; Tiempo de espera
bcf PORTE,1 ; ENABLE=0
call DELAY
return
; Subrutina de retardo
DELAY:
movlw 0xFF
movwf val2
ciclo:
movlw 0xFF
movwf val1
ciclo2:
decfsz val1,1
goto ciclo2
decfsz val2,1
goto ciclo
return
END
Si pueden corregirlo con la ayuda que les pido seria genial, gracias!!