формирует 1, если бит №bit в reg равен нулю, и 0 в противном случае. Здесь 1 и 0 рассматриваются как "истина" и "ложь", ну а само название макроса прямо говорит о его назначении, хотя не совсем грамотно, правильнее было бы IsBitClear (т.е. вопрос: "бит сброшен?").
Мне запись как раз понятна!
не понятно другое:3
DDRX_BUTTON &= ~(MASK_BUTTONS);
DDRX_BUTTON ето число в двоичном коде значит оно инвертируется на какойто бит или биты MASK_BUTTONS просто не могу понять что мы делаем с портами???
DDRX_BUTTON это тоже какое то двоичное число какое я не могу понять.
В DDRX_BUTTON адрес регистра направления DDRA. PORT_BUTTON- это PORTA.
DDRX_BUTTON &= ~(MASK_BUTTONS);
Эквивалентно записи DDRA &= 0b10001111; Здесь 4,5, и 6-й выводы устанавливаются как входы, а все остальные на этом порте- выходы. Тильда в ~(MASK_BUTTONS) означает инвертирование разрядов.
Nixon83 писал(а):А можно это записать зразу без маски
DDRX_BUTTON=0х8f
смысл макроопределний как раз в том, чтобы уйти от обезличенных цифр к осмысленным текстовым символам-именам. более того, если число или распределение по пинам кнопок у вас поменяется, то поменяются и соответствующие битовые констатны в программе. так что проще: найти и откорректировать все числа типа 0х8F, или изменить значение единственного макроса? в каком случае вероятность ошибки меньше?
битва с дураками проиграна, победители торжествуют. слава победителям!