*Trigger* писал(а):P.S. Я полностью переработал в своё время библиотеку DS18B20, тоже была нехватка памяти. Ниже моя версия.
Использовал Ваш код, получилось 80,7%. Все ли верно? Инициализацию можно выкинуть наверное, ds18b20 по умолчанию включается как 12 бит
Код: Выделить всё
#include <my_ds18b20.h>
// temp. conversion time [ms] depending on the resolution
static flash int conv_delay[4]={100,200,400,800};
// valid temp. bit mask depending on the resolution
static flash unsigned bit_mask[4]={0xFFF8,0xFFFC,0xFFFE,0xFFFF};
signed int my_ds18b20_temperature()
{
unsigned char resolution;
//if (ds18b20_read_spd(addr)==0) return -9999;
resolution=(__ds18b20_scratch_pad.conf_register>>5) & 3;
//if (ds18b20_select(addr)==0) return -9999;
w1_write(0x44);
delay_ms(conv_delay[resolution]);
//if (ds18b20_read_spd(addr)==0) return -9999;
w1_init();
return ((*((int *) &__ds18b20_scratch_pad.temp_lsb) & ((int) bit_mask[resolution]))*5/8);
}
int temp=0;
void tem(void)
{
temp=my_ds18b20_temperature(); // Чтение температуры
if (temp>=0) {d1=12; //пусто
};
if (temp<0) { temp=-temp; d1=10; //минус
};
d2=temp/10;
d3=temp%10;
}
void main(void)
{
w1_init();
// ds18b20_simple_init(4);
while (1)
{
tem();
}
}
слева!