Код: Выделить всё
//========
// Вычисление температуры DS18B20
//========
void get_temp (void)
{
char integer;
int frac;
ds18b20_read_spd(0); // Читаем scratcpad
if (__ds18b20_scratch_pad.temp_msb & 0xF8) // Проверка знака температуры, если "-" то выполнить
{
integer=((((~__ds18b20_scratch_pad.temp_msb) & 0x07)<<4)|((~__ds18b20_scratch_pad.temp_lsb)>>4));
frac=(10000-((__ds18b20_scratch_pad.temp_lsb & 0x0F)*625));
if (frac==10000)
{
integer++;
frac=0;
};
if (integer>=50)
{
integer=50;
frac=0;
};
temp=0-(((int)integer)*10+frac/1000);
}
else
{
integer=(((__ds18b20_scratch_pad.temp_msb & 0x07)<<4)|(__ds18b20_scratch_pad.temp_lsb>>4));
frac=((__ds18b20_scratch_pad.temp_lsb & 0x0F)*625);
if (integer>=99)
{
integer=99;
frac=0;
};
temp=(((int)integer)*10+frac/1000);
};
}

