Autor Tema: Recepción de 119 bytes por Rx antes de transmitir por Tx  (Leído 2485 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Murphist

  • PIC10
  • *
  • Mensajes: 2
Recepción de 119 bytes por Rx antes de transmitir por Tx
« en: 10 de Febrero de 2010, 12:07:45 »
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.
« Última modificación: 10 de Febrero de 2010, 12:18:36 por Murphist »

Desconectado JBQ

  • PIC16
  • ***
  • Mensajes: 118
Re: Recepción de 119 bytes por Rx antes de transmitir por Tx
« Respuesta #1 en: 10 de Febrero de 2010, 16:34:36 »
Hola Murphist, la mejor forma de hacer eso es con un buffer para cada proceso de tx y rx, creo que con uno de 64 bytes mas que suficiente.
Me explico mejor, creas un buffer para la rx de 64 bytes (osea una variable de 64 bytes), y lo trabajas con 3 variables màs, un contador, y 2 vectores que te indiquen la posición del buffer, uno cuenta el numero de bytes que se almacenan incrementando el contador y la dirección del buffer para almacenar el sgte dato, y el otro decrementa el contador con el numero de variables que saca del buffer, incrementado tambien la dirección del buffer para poder sacar el sgte. dato guardado. lo mismo haces para el buffer de tx. ambos, tx y rx lo trabajas a interrrup. espero haberte ayudado, suerte.

Desconectado Murphist

  • PIC10
  • *
  • Mensajes: 2
Re: Recepción de 119 bytes por Rx antes de transmitir por Tx
« Respuesta #2 en: 11 de Febrero de 2010, 15:43:05 »
Ok, gracias JBQ por la ayuda...intentaré de esa manera, si sigo con problemas, lo posteo. De todas maneras como avance, ahora me imprime sin inconvenientes si envío directamente a Tx, el problema es que tengo que agregar algunos datos antes de enviar a imprimir.

Bueno, cualquier cosa, lo aviso