Преобразование UINT16 из ADC переворачивает отрицательный

StackOverflow https://stackoverflow.com/questions/19848497

Вопрос

Что я хочу сделать:Превратите полученный 16 -битный номер (после объединения двух 8 -битных #S) в строку для использования с моей функцией последовательной отправки

Проблема:При использовании ITOA результат становится отрицательным, как только он пройдет полпути (проходит от 15 -го до 16 -го), так что он, по сути, использует 16 -й бит в качестве бита знака (неудивительно), где предполагается, что мое число не подписывается. Sprintf также делает это. Обратите внимание, что Итоа (16) работает отлично, как и должно.

Аппаратное обеспечение:Микропроцессор ATMEGA16 (AVR C) 16 -битный внешний ADC, подключенный через шину SPI (отправляет результат АЦП в виде двух 8 -битных номеров)

Код:

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);

Результатом этого является то, что он печатает 15 -битный подписанный вместо оригинального UINT16. Я использовал ITOA, чтобы напечатать результаты 10 -битной внутренней АЦП, но меня убивает, что что -то такое простое займет у меня так много времени.

Я очень ценю ваше время.

Это было полезно?

Решение

Если у вас есть Sprintf

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

Или, если ваши INT - 16 битов

sprintf(outString, "%u", ADC_result);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top