Код
#define ONEPIN PINC // PIN register
#define ONEDDR DDRC // Data Direction Register
#define ONEPORT PORTC// PORT
unsigned char OneWireReset(unsigned char mask)
{
ONEPORT &= ~(mask); // Normal input no pull up
if (ONEPIN == 0) return 0; // detect 0V on buss error
ONEDDR |= mask; // out at 0
delay_us(500);
ONEDDR &= ~(mask); // Set to input
delay_us(70);
if ((ONEPIN & mask) == 0)
{
delay_us(500);
return mask;
}
mask&=~ONEPIN;
delay_us(500);
return mask;
}
#define ONEDDR DDRC // Data Direction Register
#define ONEPORT PORTC// PORT
unsigned char OneWireReset(unsigned char mask)
{
ONEPORT &= ~(mask); // Normal input no pull up
if (ONEPIN == 0) return 0; // detect 0V on buss error
ONEDDR |= mask; // out at 0
delay_us(500);
ONEDDR &= ~(mask); // Set to input
delay_us(70);
if ((ONEPIN & mask) == 0)
{
delay_us(500);
return mask;
}
mask&=~ONEPIN;
delay_us(500);
return mask;
}
Работают замечательно, НО в железе есть восемь датчиков DS18b20, подключенных к одному порту (PORTC) и еще один датчик, подключенный к другому порту. Пробовал переделать функции так, чтобы рабочий порт можно было передавать, как параметр в функцию, но либо я чего-то не допер, либо это невозможно. На текущий момент предыдущим разработчиком просто сделан второй набор функций, где они работают с другим портом. На мой взгляд это не совсем правильно.