Evite el error de saturación en PIC18F46K80

0

Estoy utilizando PIC18F46K80, a una velocidad en baudios de 115200, un bit de parada de 1 y sin paridad. Estoy enviando datos desde una aplicación de C # (Baud Rate 115200, Stop Bit-1 y No Parity) al PIC. Después de enviar algunos bytes de datos, recibo un error de sobre-ejecución en el PIC. He insertado retrasos antes de recibir los datos en el PIC.

T_UINT8 UARTReceive(T_UINT8 *t_ret)
{
    *t_ret = 0;
    T_UINT8 temp;

    while(!PIR1bits.RC1IF)
    {
        /* Wait till the data is received   */
            if((RCSTA1bits.FERR) || (RCSTA1bits.OERR) )
            {
                temp=RCREG1;
                temp=RCREG1;
                temp=RCREG1;
                temp=RCREG1;
                temp=RCREG1;
                // EUSART1 error - restart
                RCSTA1bits.CREN = 0;
                asm("NOP");
                RCSTA1bits.CREN = 1;              
                *t_ret = 1;
                return 0;
            }
    }

    if(RCSTA1bits.OERR==1)
    {
        k=30;
    }

    /* Return the received data  */
    Delay100TCYX(0);
    asm("NOP");
    asm("NOP");

    return RCREG1;
}

Incluso después de insertar una gran demora, recibo un error de sobre-ejecución, al mantener la misma velocidad de transmisión en la aplicación C #. ¿Cómo evito errores de ejecución excesiva al recibir datos en mi PIC?

    
pregunta Phaneesh

1 respuesta

5

Está obteniendo excedentes, lo que significa que el PIC no está extrayendo los datos del búfer de recepción lo suficientemente rápido. Así que agregar aún más retraso no tiene ningún sentido. Deténgase y, de hecho, piense sobre lo que está sucediendo.

Pruebe con el PIC vaciando RCREG lo más rápido posible cuando RCIF indique que tiene datos. Si el PIC no hace nada más, debería poder mantenerse fácilmente a 115.2 kBaud.

Es posible que tenga una discrepancia en la velocidad de transmisión. Prueba esto enviando algunos caracteres y observando su tiempo cuidadosamente en el alcance. Luego, verifique también que la PC esté enviando caracteres a la misma velocidad de transmisión.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas