Преобразовать 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;
}
Объяснение кода листинга программы
- temp1 = читается первое однобайтовое значение из файла
- temp2 = читается второе однобайтовое значение из файла
- val = выполняется преобразование двухбайтового значения в десятичное число, с учетом знака
- if (значение temp1 больше или равно 0x80)
- val = отнимается от значения в val число 65535 (0xFFFF)
- data1 = десятичное значение делится на 10
- data2 = остаток от деления десятичного значения на 10
- else (значение temp1 меньше 0x80)
- data1 = десятичное значение делится на 10
- data2 = остаток от деления десятичного значения на 10