si está generando un número en binario, el bit de "mano derecha" es el menos significativo, y los procesos suelen contar el índice o "posición de bit" que va hacia la izquierda hacia el bit más significativo. Esto, por supuesto, está completamente relacionado con la "endianzabilidad" de la arquitectura del sistema, que determina si es el bit 7 o el bit cero como el más significativo.
Un código psuedo para el receptor en un registro de desplazamiento de un UART podría ser:
- Oh, mira, ¡detecté un bit de inicio!
- Oh, mira, ¡hay más bits que se ajustan a mi configuración de velocidad en baudios! (no se ha agotado el tiempo de espera, y no demasiado rápido para que se considere ruido, etc.)
- para cada bit, el índice de inicio 0, si el bit es alto, coloque un 1 en el registro de desplazamiento; de lo contrario, coloque un cero en el registro de desplazamiento
-
después del número x de bits de datos (podría ser de 8 a 10 bits de datos en una trama serie)
el proceso ha finalizado y el indicador para que el microcontrolador lea mi registro de datos de recepción!
Todo esto está seguido, por supuesto, por 1 o 2 bits de parada, y luego la línea de datos se mantiene en cualquier nivel de inactividad (¿generalmente alto?) hasta que se detecte la próxima transmisión.
El software serial utiliza el mismo estilo de pensamiento para cambiar los bits. A medida que cambia el nivel del pin, aumenta el índice de bits y configura / restablece el bit en una variable de "byte recibido". Se basa esencialmente en la endiancia del sistema (little o big endian) y en el hecho de que a los programadores les gusta utilizar la indexación 0 y comenzar en el extremo inferior de una variable. Los registros de cambio de transmisión de UART del hardware generalmente cambian los datos "hacia atrás" de lo que usted espera, como mencionó en su pregunta.