Bueno, hola a todos. La verdad he estado revisando en extenso el foro en busca de "inspiración" para resolver el problema. Sucede que tengo un equipo que envía en forma serial 119 bytes en forma consecutiva a 9600 bps. Lo que necesito hacer es tomar esos 119 bytes y enviarlos en forma serial por Tx.
Estoy utilizando un PIC 18F452 con un max232 mediante USART.
Mi idea es almacenar los 119bytes antes de mandar a Tx, esto para no interrumpir el proceso de transmisión con el proceso de recepción. El código para recibir que uso es el siguiente (está basado en material que encontré en este foro):
******************************************************
CBLOCK 0x100 ;Variables en el banco 1
BuffRx:.256 ;Buffer para recepción
ENDC
CBLOCK 0x200 ;Variables en el banco 2
BuffTx:.256 ;Buffer para transmisión
ENDC
******************** Rx **********************************
RXLOOP:
BTFSS PIR1,RCIF ;Espera por byte
GOTO RXLOOP
MOVF RCREG,W,.0
MOVWF POSTINC1
BTFSC RCREG,OERR
CALL UCLEAR ;Error de Sobreescritura
BTFSC RCREG,FERR
CALL UCLEAR ;Error de Trama
INCF RXCOUNT
MOVLW .118
CPFSGT RXCOUNT
GOTO RXLOOP
CLRF RXCOUNT
RETURN
UCLEAR:
BCF RCSTA,CREN
MOVF RCREG,w
MOVF RCREG,w
MOVF RCREG,w ;Vacío buffers de usart
BSF RCSTA,CREN
RETURN
******************** Tx **********************************
TXLOOP:
MOVLW HIGH BuffRx
MOVWF FSR1H,.0
MOVLW LOW BuffRx
MOVWF FSR1L,.0
MOVLW HIGH BuffTx
MOVWF FSR2H,.0
MOVLW LOW BuffTx
MOVWF FSR2L,.0
TXCOPIA:
MOVF POSTINC1,W
MOVWF POSTINC2
INCF TXCOUNT
MOVLW .118
CPFSGT TXCOUNT
GOTO TXCOPIA
MOVLW HIGH BuffTx
MOVWF FSR2H,.0
MOVLW LOW BuffTx
MOVWF FSR2L,.0
RETURN
TXPRINTER:
DECFSZ TXCOUNT,f
CALL TXCARGA
RETURN
TXCARGA:
MOVF POSTINC2,W
MOVWF TXREG
GOTO TXPRINTER
******************************************************
No he podido validar bien si efectivamente recibo los bytes bien, pero si en vez de almacenar los bytes, los envío a Tx inmediatamente, envía la información pero con muchos errores.
El caso es que con este código no se envía nada por Tx.
Bueno, agradecería cualquier ayuda.