Варианты
работы с
портами
УСТАНОВКА
БИТА
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 <avr/io.h>
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