Нужно организовать сравнение температуры, передаваемой с датчика
Код:
#include <mega8.h> //библиотека ввода\вывода
#include <delay.h> //библиотека задержки
#asm //сообщаем куда подключен датчик
.equ __w1_port=0x15; PORTC
.equ __w1_bit=3
#endasm
#asm //сообщаем куда подключен экран
.equ __lcd_port=0x18
#endasm
#include <lcd.h> //библиотека для LCD
#include <1wire.h> //библиотека работы с 1Wire
#include <ds18b20.h> //библиотека для работы с датчиком ds18b20
#include <stdio.h> //стандартная библиотека
char lcd_buffer[33]; //массив с данными для экрана
void main(void)
{
unsigned char devices; //переменная в которой количество присоеденённых датчиков
int temp;
int izm;
DDRD = 0x01;
PORTD.0=0;
ADCSRA |= (1 << ADEN) //Включение АЦП
|(1 << ADPS1)|(1 << ADPS0); // предделитель преобразователя на 8
ADMUX |= (0 << REFS1)|(0 << REFS0) // внешний ИОН
|(0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3); // вход PC0
lcd_init(16); //инициализация LCD, и говорим что он на 16 символов
devices=w1_init(); //ищем датчики
while(devices>0) //бесконечный цикл, если датчик подключен
{
unsigned int u;
temp=ds18b20_temperature(0); //читаем температуру
PORTD.0=0;
if (temp>1000) //если датчик выдает больше 1000
{
temp=4096-temp; //отнимаем от данных 4096
temp=-temp; //и ставим знак "минус"
}
sprintf(lcd_buffer,"t=%i.%u\xdfC",temp,temp%1); //записываем массив для экрана
lcd_clear(); //чистим дисплей перед выводом
lcd_puts(lcd_buffer); //выводим массив на LCD
ADCSRA |= (1 << ADSC); //Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования
u = (ADCL|ADCH << 8); // Считываем ADC
if (u > 128) //0.625V
{izm = 0x140;
while(izm!=temp)
{
PORTD.0=1;
}
}
if (u > 256) //1.25V
{izm = 0x150;
while(izm!=temp)
{
PORTD.0=1;
}
}
if (u > 384) //1.875V
{izm = 0x160;
while(izm!=temp)
{
PORTD.0=1;
}
}
if (u > 512) //2.5V
{izm = 0x170;
while(izm!=temp)
{
PORTD.0=1;
}
}
if (u > 640) //3.125V
{izm = 0x180;
while(izm!=temp)
{
PORTD.0=1;
}
}
if (u > 768) //3.75V
{izm = 0x190;
while(izm!=temp)
{
PORTD.0=1;
}
}
if (u > 896) //4.375V
{izm = 0x1B0;
while(izm!=temp)
{
PORTD.0=1;
}
}
if (u > 1020) //5V
{izm = 0x1C0;
while(izm!=temp)
{
PORTD.0=1;
}
}
delay_ms(500);
}
}
не могу понять в какой системе счисления записывается temp
вроде как датчик передает шестнадцатеричный код, но сравнения с izm не происходит получается