Логические операции | Программирование микроконтроллеров AVR
Логические операции положили начало возникновения цифровых микросхем, дальнейшим развитием которых стали микропроцессоры и микроконтроллеры. Поэтому, изучая программирование микроконтроллеров AVR, в обязательном порядке следует освоить все логические операции. Их на самом деле совсем немного и они достаточно понятны. К тому же соответствующие знания помогут с легкость научиться управлять отдельными битами микроконтроллера, что значительно повышает гибкость программ.
Логические операции
Логические операции отличаются от математических операций, но не в сторону усложнения, а в сторону упрощения. Всего их существует 6 «штук». Мы не будем рассматривать углубленно данную тему, изучим только с позиции, необходимой для программирования МК AVR, но база – есть база, — для всех одинакова.
Сдвиг вправо >>
С помощью данной команды все биты регистра сдвигаются вправо на количество позиций, указанной справа после знака >>. Например, присвоим двоичное значение порту D микроконтроллера:
PORTD = 0b00011100; // начальное значение
Теперь применим операцию сдвига вправо на три разряда
PORTD >> 3; // выполнение операции сдвига
В итоге получим следующее значение в порте D:
PORTD == 0b00000011; // результат
Обратите внимание, что применяя операцию сдвига, освободившиеся разряды заполняются нулями, а вышедшие за пределы биты теряются.
Еще один пример.
PORTD = 0b00011100;
PORTD >> 1;
Результат:
PORTD == 0b00001110;
Сдвиг влево <<
Данная операция полностью аналогична предыдущей команде, только сдвигаемые биты перемещаются влево.
Пример:
PORTD = 0b00011100;
PORTD << 3;
Результат:
PORTD == 0b11100000;
Еще один пример:
PORTD = 0b00011100;
PORTD << 1;
Результат:
PORTD == 0b00111000;
Следующие четыре логические операции называются побитовыми.
Логическая ИЛИ |
Операция | ИЛИ выполняет сравнение двух битов. Если хотя-бы один из них или они оба имеют истинное значение, то есть единицу, то результат будет истинна – единица. Результатом будет ноль (ложь), когда оба разряда равны нулю.
00011100
|01001001
Результат
01011101
Операцию ИЛИ можно представить на примере двух выключателей, соединенных параллельно. Чтобы светодиод засветился достаточно замкнуть один любой выключатель. Разомкнутый выключатель – это аналог ложного состояния (ноль), а замкнутый – истинна (единица).
Логическая И &
Результатом сравнения двух чисел будет единица (истинна), только в том случае, когда оба бита имеют истинное значение. В противном случае получим ноль.
На примере двух выключателей, соединенных последовательно, побитовая И работает так. Светодиод будет светиться только в том случае, когда оба выключателя замкнуты.
Пример с двоичными числами.
00011100
&01001001
Результат
01001000
Исключающее ИЛИ ^
Исключающее ИЛИ выполняет сравнение двух битов и если только один из них, но не два сразу, будет истинным, то результат будет истинна – единица.
00011100
^ 01001001
01010101
Логическая НЕ ~
НЕ – самая простая команда, ее еще называют инверсия или отрицание, изменяющая биты на противоположные значения, то есть выполняющая их инверсию или инвертирование:
~00011100
11100011
Теперь мы рассмотрели все 6-ть необходимых операций и можем с пониманием задействовать их при программировании микроконтроллеров AVR.
С помощью рассмотренных команд мы можем установить, сбросить или изменить на противоположное состояние отдельные биты микроконтроллера. Однако прежде, чем к ним приступить, рекомендую потренироваться на листе бумаги с рассмотренными логическими операциями.
Доходчиво!!!
Ошибка где описано как работает логическое И.
00011100
&01001001
Результат
01001000
спасибо дружище за труд !!
+++5
Спасибо, но в ответ на лог. И ест ошибка.
И если можно в видео уроках оставте комментариев.
Пример. PORTD = 0b00011100;
PORTD << 3; // PORTD == 0b11100000;
Хоту поддержать автора. Для начала спасибо огромное за те труды, достойные труды, которые затрачены на создание видео и статей. Некоторые вещи автор не договаривает, но думаю это к лучшем ибо разобравшись один раз сам в недосказанном, запомнишь надолго. В самом деле , не в детском, же, садике. На том и основано самообучение, где никто не разжует и в ротик не положит, что бы только проглотить. В наше время в информации дефицита нету. Но, если автор позволит, оставлю одну просьбу. Вопросы, таки, возникают и, порой, тратится очень много времени для нахождения ответов. По моему мнению было бы очень не плохо после нескольких уроков делать хотя бы один стрим с ответами на вопросы в комментариях и онлайн. Автору можно ориентироваться в дальнейшем для восполнения пробелов в объяснении и зрителям будет проще искать ответы на вопросы. Этот шаг должен положительно сказаться на количестве подписчиков. В любом случае огромная благодарность автору за статьи и видео.
Дякую, повністю зрозуміло .Але помилку в опереторі «І» виправте.