Варианты работы с портами УСТАНОВКА БИТА PORTX = PORTX | 0b00000001; СБРОС БИТА PORTX = PINX & 0b11111110; ПРОВЕРКА БИТА if ((PINX & 0b00000001) == 0); // Истина при 0bxxxxxxx0 if ((PINX & 0b00000001) != 1); // Истина при 0bxxxxxxx0. if ((PINX | 0b11111110) != 0xFF); // Истина при 0bxxxxxxx0 if ((PINX | 0b11111110) == 0b11111110); // Истина при 0bxxxxxxx0 if ((PINX & 0b00000001) == 1); // Истина при 0bxxxxxxx1 if ((PINX & 0b00000001) != 0); // Истина при 0bxxxxxxx1 if ((PINX | 0b11111110) == 0xFF); // Истина при 0bxxxxxxx1 if ((PINX | 0b11111110) != 0b11111110); // Истина при 0bxxxxxxx1 ПРОВЕРКА ДВУХ БИТ if ((PINX & 0b00000011) == 0); // Истина при 0bxxxxxx00 (оба нули). if ((PINX | 0b11111100) == 0b11111100); // Истина при 0bxxxxxx00 (оба нули). if ((PINX & 0b00000011) != 0b11); // Истина при 0bxxxxxx00, 0b00000010, 0bxxxxxx01.(хотя бы один ноль). if ((PINX | 0b11111100) != 0xFF); // Истина при 0bxxxxxx00, 0bxxxxxx10, 0bxxxxxx01 (хотя бы один ноль). if ((PINX & 0b00000011) == 0b11); // Истина при 0bxxxxxx11 (обе единицы). if ((PINX | 0b11111100) == 0xFF); // Истина при 0bxxxxxx11 (обе единицы). if ((PINX & 0b00000011) != 0); // Истина при 0bxxxxxx11, 0bxxxxxx10, 0bxxxxxx01 (хотябы одна единица). if ((PINX | 0b11111100) != 0b11111100); // Истина при 0bxxxxxx11, 0bxxxxxx10, 0bxxxxxx01 (хотябы одна единица). Другим вариантом работы с портами является конвертирование номера разряда в байтовое число, содержащее 1 в том разряде, который нужно установить или сбросить. УСТАНОВКА БИТА // Устанавливаем в 1 разряд 2 порта B (накладывается маска 0b00000100) PORTB |= (1 << 2); PORTB |= (1 << (PB2)); // PB2 дефайнится, как число 2. Подк. #include PORTB |= _BV(PB2); // _BV() дефайнится как 1 << 2 // Устанавливаем флаг разрешения прерываний от Т/С1 (накладывается маска 0b00000100) TIMSK |= _BV(TOIE1); PORTB = PORTB | (1 << (TOIE1)); СБРОС БИТА PORTB &= ~(_BV(PB7)); // Сбрасываем в «0» разряд 7 порта B (накладывается маска 0b01111111) ПРОВЕРКА БИТА if ((PINX & _BV(PX0)) == 0); // Истина при 0bxxxxxxx0 if ((PINX & _BV(PX0)) != 1); // Истина при 0bxxxxxxx0. if ((PINX | _BV(PX0)) != 0xFF); // Истина при 0bxxxxxxx0 if ((PINX | _BV(PX0)) == 0b11111110); // Истина при 0bxxxxxxx0 if ((PINX & _BV(PX0)) == 1); // Истина при 0bxxxxxxx1 if ((PINX & _BV(PX0)) != 0); // Истина при 0bxxxxxxx1 if ((PINX | _BV(PX0)) == 0xFF); // Истина при 0bxxxxxxx1 if ((PINX | _BV(PX0)) != 0b11111110); // Истина при 0bxxxxxxx1