Здесь показаны только основные функции. Код библиотеки целиком см. в examples\Nordic.zip из архива [2].
typedef uint8_t ScratchPad[9];
/**@brief Процедура выполняет чтение памяти scratchpad
*/
void ds18b20_readScratchPad(uint8_t *scratchPad, uint8_t fields)
{
ds18b20_reset(); // Reset Pulse
ds18b20_send_byte(0xCC); // выдача команды Skip ROM
ds18b20_send_byte(0xBE); // выдача команды Read Scratchpad
for(uint8_t i=0; i < fields; i++)
{
scratchPad[i] = OneWire_read();
}
// Этот сброс выполнять не обязательно:
//ds18b20_reset();
}
/**@brief Подпрограмма выполняет запрос преобразования температуры
*/
void ds18b20_requestTemperatures(void)
{
ds18b20_reset();
ds18b20_send_byte(0xCC); // выдача команды Skip ROM
ds18b20_send_byte(0x44); // выдача команды Convert T
}
/**@brief Функция возвращает сырой результат чтения температуры
*/
uint32_t ds18b20_get_temp_method_1(void)
{
ds18b20_requestTemperatures();
ScratchPad scratchPad;
ds18b20_readScratchPad(scratchPad, 2);
int16_t rawTemperature = (((int16_t)scratchPad[TEMP_MSB]) << 8) | scratchPad[TEMP_LSB];
uint32_t temp = 625 * rawTemperature;
return temp;
}
Код, который нужно вставить в тело цикла main:
uint32_t temp = ds18b20_get_temp_method_1();
umsg("%u.%04u\n", temp/10000, temp%10000);