PIC24f16KL402 omitiendo valores en el puerto serie

0

Estoy intentando escribir los valores de un contador en la interfaz serial, solo para probar la interfaz. El problema es que el escritorio solo recibe cada segundo valor (2,4,6,8, ...). Uso el puerto PORTA para verificar los valores del contador. Una traza del puerto muestra que los valores impares del contador están presentes en el puerto solo por un tiempo mucho más corto, como si no tuviera que esperar hasta que el valor se haya escrito a través de la interfaz serial relativamente lenta (9600 baudios). Parece que cada segundo valor nunca se escribe en el puerto serie.

Si descomento la segunda llamada de UART1PutChar (a); (última declaración en el código de abajo) todo funciona bien. Recibo todos los valores como se esperaba (1,2,3,4, ...), pero no puedo explicar este comportamiento.

void UART1Init(int bautrate)
{
   U1BRG = bautrate;
   U1MODE   =   0x8000;
   U1STA    =   0x8400;
   IFS0bits.U1RXIF = 0;
}

void UART1PutChar(char Ch)
{
   while(U1STAbits.UTXBF == 1);
   U1TXREG = Ch;
}

int16_t main(void)
{

    UART1Init(51);

    TRISA = TRISA & 0xFF00; 
    PORTA = 0;
    unsigned char a = 0;
    int i;
    while(1)
    {
        a = a+1;
        PORTA = a;
        UART1PutChar(a);
        //UART1PutChar(a);
    }
}

Configuración:

  • PIC24f16KL402
  • Compilador C30
  • MPLAB X 1.60 con PICKIT 3
pregunta mrks

1 respuesta

2

Intente verificar que el registro de cambio de transmisión también esté vacío: agregue while(TRMT == 0) en su rutina UART1PutChar. Esto debería garantizar que la última transmisión esté completa antes de ingresar el siguiente valor.

    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas