Преобразовать float в два байта с определением знака - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день уважаемые! Есть датчик

DS18B20

у него температура хранится в двух байтах. Карта данных температуры в прикреплении. Даташит на русском тут: http://labkit.ru/userfiles/file/documentation/Sensor/DS18B20_RU.pdf Такой код может напечатать температуру в нормальном виде:
temp1 = read_1w();
temp2 = read_1w();
float val = ((int16_t) (temp1 << 8) + temp2) / 16.0;
printf("%.4f", val);
А у меня задача вывести температуру на индикатор. То есть мне нужно получить два байта. Один из целым числом , второй из дробным плюс ко всему нужно определять знак "-". Со знаком минус все понятно читаем последний бит. А вот остальное непонятно... нужно что типа такого:
temp1 = read_1w();
temp2 = read_1w();
long int val = (((temp1 << 8) + temp2)*10) / 16;
data1 = val/10;
if(temp1 & 0x80)
{
  // знак минус
}
data2 = val%10;
Вопрос: правильно ли я сделал? Чувствую что нет...

Решение задачи: «Преобразовать float в два байта с определением знака»

textual
Листинг программы
temp1 = read_1w();
temp2 = read_1w();
long int val = (((temp1 << 8) + temp2)*10) / 16;
 
if(temp1 & 0x80)  // знак минус
{
val = 0xFFFF-val;
data1 = val/10;
data2 = val%10;
}
else // знак +
{
data1 = val/10;
data2 = val%10;
}

Объяснение кода листинга программы

  1. temp1 = читается первое однобайтовое значение из файла
  2. temp2 = читается второе однобайтовое значение из файла
  3. val = выполняется преобразование двухбайтового значения в десятичное число, с учетом знака
  4. if (значение temp1 больше или равно 0x80)
  5. val = отнимается от значения в val число 65535 (0xFFFF)
  6. data1 = десятичное значение делится на 10
  7. data2 = остаток от деления десятичного значения на 10
  8. else (значение temp1 меньше 0x80)
  9. data1 = десятичное значение делится на 10
  10. data2 = остаток от деления десятичного значения на 10

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.75 из 5
Похожие ответы