Добрый день. Мне нужно считывать данные с конкретной ноги МК. Эта операция делается в обработке прерывания тамера, то я хочу ее облегчить до минимума. Поэтому отказался от digitalRead(). Собственно, заработало, но возник вопрос. Почему вот такая конструкция работает: Код (C++): uint8_t v = PIND; v = v & (1 << pinData[i]); if(v > 0){...} А вот такая нет: Код (C++): if(PIND & (1 << pinData[i]) > 0){...} И даже вот такая тоже не работает: Код (C++): uint8_t v = PIND; if(v & (1 << pinData[i]) > 0){...} Массив pinData содержит номера контактов, т.к. читать надо с нескольких портов по одному синхросигналу.
Облегчить до минимума, это убрать вычисление Код (C++): (1 << pinData[i]) В pinDataMask [] должны быть готовые маски (1 << pinData) , а не сдвиги. К стати оператор > 0 тут не нужен. Достаточно того, что & вернул ненулевой результат. Код (C++): if(PORTD & pinDataMask[i]){