¿Cómo asegurar la transmisión en serie y la recepción de los datos requeridos sin ningún valor de basura en el 8051?

0

Estoy tratando de transmitir continuamente el carácter 'L' del microcontrolador 8051 al PC a una velocidad de baudios de 9600. La frecuencia del 8051 es de 16 MHz, y por consiguiente cargué el registro BRL con "0XFC" Generación de velocidad en baudios. Sin embargo, puedo ver un flujo de valores de basura en el terminal hiperactivo; Incluso intenté cambiar los valores de recarga automática de 0xFB a 0xFF sin éxito. ¿Hay alguna forma para que pueda generar la velocidad de transmisión exacta en el microcontrolador o una manera para que solucione este problema?

Editar: Además, incluso si transmito un solo alfabeto desde la PC al controlador, y el código está escrito de manera que el controlador haga eco de todo lo enviado desde la PC, a veces el carácter que envía el controlador en respuesta es diferente de lo que había enviado.

Mi código es el siguiente:

#include "reg_c51.h"

char uart_data='L';

void main (void) 
{
    SCON = 0x40;                     
    BDRCON &=0xE0;              
    BDRCON |=0x08;               
    BRL=0xFC;                    
    IEN0 = 0xF0;                            
    BDRCON |=0x10;              

    while(1)                  
    {
        SBUF = uart_data;
        while(TI==0);
        TI=0;
    }
}
    
pregunta user3491636

1 respuesta

2

Eso es en realidad un "gotcha" sutil en comunicaciones en serie asíncronas: si nunca hay espacios en los datos que sean al menos tan largos como un tiempo de caracteres, es posible que el receptor pierda la sincronización con respecto al byte Límites, y no hay manera de recuperarse. Cualquier '1' seguido de un '0' podría interpretarse como un par de bit de inicio / bit de parada.

Una posible solución sería enviar un byte de ceros (o todos) unos de vez en cuando. Si el receptor no está sincronizado, esto lo forzará a volver a sincronizarse en el siguiente bit de inicio.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas