int DS18B20_Start_Converts(void) { if(OK_Flag == 1) {// если датчик не ответил return 1; } DS18B20_init(); // инициализация DS18B20 write_18b20(0xCC); // проверка кода датчика write_18b20(0x44); // запуск температурного преобразования return 0; }
void TnC_read_temperature(unsigned char * tp_data) { DS18B20_init(); DS18B20_write_byte(0xCC); DS18B20_write_byte(0x44); /** Looks like we don't need following wait code **/ // This is the official way, but big delay while(!DS18B20_read_bit()); // or ??? //while(!DS18B20_IN & DS18B20_PIN); // This is the easy way, but only delay enough time for temperature convertion //delay_ms(750); // No delay here, we will read temperature every 1 second using Timer Interrupt. DS18B20_init(); DS18B20_write_byte(0xCC); DS18B20_write_byte(0xBE); // Now the temperature *tp_data = DS18B20_read_byte(); // The low part of temperature register *(tp_data + 1) = DS18B20_read_byte(); // The high part of temperature register }
int DS18B20_Temperature(char *ptrTemperature) { uint8_t tempint = 0,tempint1,tempint2,tempint3; // переменные для целого значения температуры uint16_t temppoint = 0,temppoint1; // переменные для дробного значения температуры DS18B20_init(); // инициализация DS18B20 write_18b20(0xCC); // проверка кода датчика write_18b20(0xBE); // считываем содержимое ОЗУ Temp_L = read_18b20(); // читаем первые 2 байта блокнота Temp_H = read_18b20(); temp_flag = 1; // флаг знака температуры равен 1(плюс) if(Temp_H &(1 << 3)) // проверяем бит знака температуры на равенство единице { signed int tmp; temp_flag = 0; // флаг знака равен 0(минус) tmp = (Temp_H << 8) | Temp_L; tmp = -tmp; Temp_L = tmp; Temp_H = tmp >> 8; }