質問

私がしたいこと:結果の16ビット数を(2つの8ビット#sを結合した後)、シリアル送信機能で使用する文字列に変換します

問題:ITOAを使用すると、結果は半分のポイント(15ビットから16番目に渡される)を通過すると負になります。そのため、基本的に16番目のビットをサインビット(驚くべきことのない)として使用して、私の番号が署名されていないはずです。 Sprintfもこれを行います。 Itoa(16)は、本来のように完全に機能することに注意してください。

ハードウェア:ATMEGA16マイクロプロセッサ(AVR C)16ビット外部ADCがSPIバスを介して接続されています(ADC結果を2つの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);

この結果、元のUINT16の代わりに署名された15ビットを印刷します。私はITOAを使用して10ビット内部ADCの結果を印刷していますが、このシンプルなことが私に長い時間を費やしていることを殺しています。

本当に感謝しています。

役に立ちましたか?

解決

sprintfがある場合

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

または、INTが16ビットの場合

sprintf(outString, "%u", ADC_result);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top