Pregunta

Lo que quiero hacer:Convierta el número de 16 bits resultante (después de combinar los dos #s de 8 bits) en una cadena para usar con mi función de envío en serie

El problema:Cuando se usa ITOA, el resultado se vuelve negativo una vez que pasa el punto medio (pasando del 15 ° a 16º), por lo que esencialmente usa el bit 16 como el bit de signo (no sorprendente) donde se supone que mi número no está firmado. Sprintf también hace esto. Tenga en cuenta que ITOA (16) funciona perfectamente, como debería.

El hardware:ATMEGA16 Micro procesador (AVR C) ADC externo de 16 bits conectado a través del bus SPI (envía el resultado ADC como dos números de 8 bits)

El código:

uint16_t ADC_result = ADC_data_LSB | (ADC_data_MSB<<8); // Combine both halves of the data
unsigned char *outString = "0123456789abcdef";
itoa(ADC_16_result, outString, 10);
send_A_String(outString);

El resultado de esto es que imprime un 15 bits firmado en lugar del UINT16 original. He estado usando ITOA para imprimir los resultados del ADC interno de 10 bits, pero me está matando que algo tan simple me está llevando tanto tiempo.

Realmente aprecio tu tiempo.

¿Fue útil?

Solución

Si tienes sprintf

char outString[10];
sprintf(outString, "%hu", ADC_result);

O, si sus ints son de 16 bits

sprintf(outString, "%u", ADC_result);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top