Myp писал(а):1. - Код: Выделить всё
if (!(PIND & (1<<PIND.1))) // проверить "0" на линии 1 порта D
2. - Код: Выделить всё
if PIND.1 == 0 // проверить "0" на линии 1 порта D
1.наверное всеже не
PIND.1, а
PD1ибо
PINx.y, на сколько помню, понимает только CV
в avrlibc определены позиции всех битов всех регистров как номер бита
те PD1 == 0x01
пользоваться _BV() я не люблю, т.к. писать нифига не меньше
это всего лишь макрос:
- Код: Выделить всё
#define _BV(x) (1<<x)
а операция достаточно проста:
предположим что PIND = 0b00001010,
тогда:
msk = 0b00000001 << 1 => 0b00000010
PIND & msk => 0b00001010 & 0b00000010 => 0b00000010 > 0 ==
Trueа если PIND = 0b01101000, то
PIND & msk => 0b01101000 & 0b00000010 => 0b00000000 == 0 ==
Falseкстати чтобы не писать это есть макрос
bit_is_set() (изучать хедеры avrlibc)
2.код становится непереносим на другие компиляторы