Преобразовать 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д