Que tal compañeros, para ampliar un poco el entendimiento de las aportaciones de BrunoF y de AngelGris añado esta información:
Cuando el programa del transmisor se ejecuta enviando el máximo valor del ADC configurado en 10 bits, envia el 1023 en decimal o el 1111111111 en binario, el cual debe ser procesado con los
Operadores de bits con la función sendADC, sin afectar el valor de la variable j. Durante el envio del máximo dato es necesario enviar información adicional en cada byte enviado para distinguir si es el primer byte o el segundo byte, en este caso un 1 en el inicio del primer byte y un cero en el inicio del segundo byte.
MSB LSB
0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1
b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
1er byte:
MSB LSB
1 b13 b12 b11 b10 b9 b8 b7
2do byte:
MSB LSB
0 b6 b5 b4 b3 b2 b1 b0
Visualizando la configuración del envio de datos, 8 bits es la máxima salida, como podemos ver en la siguiente imagen:
Por lo cual nos damos cuenta que no es posible enviar los 16 bits a la vez, si no unicamente 8 bits o lo que correspondería a un máximo de FF en hexadecimal o 255 en decimal.
El envio del dato máximo a traves del hyperteminal una vez que el dato fue procesado nos muestra lo siguiente:
Pero, ¿de donde salen este datos? El
87 es un valor en hexadecimal del primer byte enviado y el
7F también en hexadecimal es el segundo byte.
Sabemos que value en la función sendADC es una copia del valor de la variable j, pero que no afecta a j en el programa principal, entonces para entender de donde salió el 87 en hexadecimal que es el primer byte enviado, es necesario entender el desplazamiento siguiente:
El código:
putc(value>>7 | 0x80);Le aplica un desplazamiento a la derecha a value, y depués el
operador or le añade el uno como información adicional quedando lo siguiente:
Realizando la conversión de binario a hexadecimal nos queda:
El código:
putc(value & 0x7F);Con el
operador and le añade el cero como información, veamos como ocurre:
Realizando la conversión de binario a hexadecimal nos queda:
Saludos.