Problema con la recepción del usart

Hola, tengo el siguiente problema. Tengo controlador PID analógico y necesito visualizar sus parámetros y la velocidad del motor en un pc, y además tiene que variar el set point desde el pc, entonces me puse hacer un programa en un pic 16F877 que tomara los valotres de cuatro entradas analógicas y las mande por puerto serial, y que a su vez reciba el valor deseado para el set point y lo mande al puerto B para pasarlo a analógico. El programa es este.


TXF EQU H'04'
GODONE EQU H'02'

ORG 0x0000
GOTO IN
ORG 0x0004
BSF STATUS,RP0
BCF STATUS,RP1
BT: BTFSS TXSTA,TRMT ;(*)
GOTO BT ;(*)
BCF STATUS,RP0 ;(*)
BTFSS PIR1,RCIF
GOTO VL
BCF PIR1,RCIF
MOVF RCREG,W
MOVWF PORTB
VL: RETFIE

IN: CLRF PORTA
CLRF PORTB
CLRF PORTC
BSF STATUS,RP0
BCF STATUS,RP1
MOVLW B'11111111'
MOVWF TRISA
CLRF TRISB
MOVLW B'10111111'
MOVWF TRISC
MOVLW B'00100100'
MOVWF TXSTA
MOVLW .25
MOVWF SPBRG
BSF PIE1,RCIE
BCF STATUS,RP0
MOVLW B'10010000'
MOVWF RCSTA
MOVLW B'11000000'
MOVWF INTCON
MOVLW B'00000000'
MOVWF ADCON1
BU: CLRWDT
MOVLW B'10101010'
CALL TR
MOVLW B'01010101'
CALL TR
MOVLW B'10101010'
CALL TR
MOVLW B'11000101'
MOVWF ADCON0
MOVLW B'11000101'
MOVWF ADCON0
A1: BTFSC ADCON0,GODONE
GOTO A1
MOVF ADRESH,W
CALL TR
MOVLW B'11001101'
MOVWF ADCON0
A2: BTFSC ADCON0,GODONE
GOTO A2
MOVF ADRESH,W
CALL TR
MOVLW B'11010101'
MOVWF ADCON0
A3: BTFSC ADCON0,GODONE
GOTO A3
MOVF ADRESH,W
CALL TR
MOVLW B'11011101'
MOVWF ADCON0
A4: BTFSC ADCON0,GODONE
GOTO A4
MOVF ADRESH,W
CALL TR
GOTO BU
END

TR
MOVWF TXREG
BSF STATUS,RP0
BCF STATUS,RP1
BX: BTFSS TXSTA,TRMT
GOTO BX
BCF STATUS,RP0
RETURN

En un principio no había incluído las lineas con la marca (*), y el programa enviaba los datos datos desde el pic pero cuando los recibía se trababa el programa en la rutina de interrupción y no mostraba nada en el puerto B, pero al incluir esas lineas igual no sale de la interrupción, pero al menos muestra lo que recibe en el puerto B. Eso me pone a pensar algo así como que el pic no puede recibir y no enviar via serial al mismo tiempo, pero no he podido solucionar el problema de porqué no me sale de la interrupción.

Les agradesco cualquier sugerencia ya que necesito esto funcionando urgente.

Saludos
 
pues no se chico. Mira

Inter btfss PIR1,RCIF ;¿Interrupción por recepción?
retfie ;No: retorno.
bcf PIR1,RCIF ;Sí: restaura flag de recepción.
movf RCREG,W ;Lee el dato recibido.
retfie

Con solo esto va de muerte. (amplificadora todo lo que quieras lo de la lectura
 
Atrás
Arriba