Допоможіть розібратися з терморегулятором на ds18b20

Ось написав нещодавно програму на Сі для термометра на МК ATtiny233, який працює з датчиком ds18b20. Термометр працює нормально, а ось захотів нещодавно переробити програму в терморегулятор і начебто все працює нормально, а от коли температура задана "плюсова" і вимірювана теж "плюсова", то порівняння працює нормально. Порівняння повинно працювати так, якщо вимірювана температура більша за задану, то повинен загорятися світлодіод, а якщо менше ніж задана, то світлодіод повинен згаснути. Так от при плюсовій все нормально, а якщо там мінусова, а там плюсова, або навпаки, або там мінусова і там мінусова, то порівняння не працює. Ось може допомогти. За ранні дякую.

Я не програмував МК, тільки писав консольні програми

не можу зрозуміти чому порівняння відбувається перед зчитуванням показань та і це трохи незрозуміло

temperature=ds18b20_temperature(0); //Читаємо температуру

if(temperature>1000) temperature=4096-temperature; temperature=-temperature; >

А який потаємний зміст комбінації операторів: temperature=4096-temperature; temperature=-temperature;

це не те саме, що: temperature=temperature-4096; ?

Цей код не порівняння: temperature=ds18b20_temperature(0); //Читаємо температуру

Тут я читаю температуру, і якщо датчик починає видавати "мінусову" ту мпературу, то від його значень треба відібрати 4096 і поставити знак "-".

Krik99:товідйого значень треба відібрати 4096 і поставити знак "-".ось і відповідьАрс:це не те саме, що: temperature=temperature-4096; ?

Так ви мені поясніть чому не правильно працює порівняння вимірюваноїтемператури та заданої. Так як сама температура виводиться нормально, і у мене з нею проблем немає. Ось код порівняння:

if(temperature>max) //порівняння PORTB.0=0; > else PORTB.0=1; >;

Арс:Не бачу відповідіМало на увазі не вирішення конкретної проблеми зі знаком а поліпшення існуючого коду до більш оптимального та читабельного вигляду.

Krik99Існують певні правила написання програм, нехай на цій невеликій програмі вони не відіграють великої ролі, але надалі можуть значно полегшити розуміння коду. В атачі приклад цієї програми, але із застосуванням деяких простих правил

З приводу конкретної проблеми, судячи з опису губиться знак (хоча начебто такого не повинно бути), можна спробувати штучно в тілі функції порівняння знову привести змінні до типу signed

або записати так (хоча по суті це те ж саме, що й у вихідному коді), але мало, раптом допоможе if((temperature-max)>0)

Прошу вибачити за зауваження та за мій чайниковський підхід, знань мало, а допомогти хочеться.