Логические операции | Программирование микроконтроллеров 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.

Логические операции

С помощью рассмотренных команд мы можем установить, сбросить или изменить на противоположное состояние отдельные биты микроконтроллера. Однако прежде, чем к ним приступить, рекомендую потренироваться на листе бумаги с рассмотренными логическими операциями.

One Comment

Комментировать

Ваш e-mail не будет опубликован. Обязательные поля помечены *