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

Вы наверняка уже слышали о таком понятии, как напряжение (англ. voltage), которое измеряется в Алессандро Вольтах? Напряжение может быть разным: 220 В, 110 В, 5 В, 3 В и даже 3,3 В. Однако в цифровой технике нам не нужен такой большой разброс значений. Если объяснять совсем просто: когда мы подадим на светодиод, скажем, 5 вольт (так называемая «логическая единица»), он начнет светиться. Если же мы подадим 0 вольт (так называемый «логический ноль»), то светодиод гореть не будет. У чисел «1» и «0» есть и альтернативные названия в зависимости от области их применения: «истина» (англ. true) или «ложь» (англ. false), «высокое состояние» (англ. high) или «низкое состояние» (англ. low).

Логический сигнал – это сигнал, принимающий два возможных значения — «истина» или «ложь», «высокое» или «низкое» состояние, «0» или «1». Конечно, мы живем не в идеальном мире, и получить ровно 5 вольт мы не можем, как и не можем получить чистый ноль (мы лишь «договорились», что он является нулем относительно тех 5 вольт). Что же делать в таком случае? Абстрактные «0» и «1» сильно бы упростили нам жизнь. Уже из определения логического сигнала можно догадаться, что есть понятие «логический уровень». Существуют стандарты, определяющие допустимые уровни напряжений, логических сигналов. В зависимости от технологии исполнения (КМОП, ТТЛ) эти уровни не всегда совпадают. STM32 питается от напряжения 3,3 В, т.е. «высокий уровень» для нашего МК – 3,3 В. «Низкий уровень», соответственно — это 0 В. Следует обратить внимание на то, что в стандартах в качестве логических уровней приведены не одиночные значения напряжений, а диапазоны значений. А между низким и высоким уровнями есть буферная зона. Она нужна для того, чтобы избежать «дребезга состояний», который может возникнуть, если значение сигнала будет колебаться около граничного значения. Ниже приведены некоторые стандарты напряжений.

Logic levels

Микроконтроллер – это сложное устройство, он содержит множество триггеров, которые включают или отключают тот или иной участок цепи, отвечающий за определенную функциональность. Вся информация, которую понимает микроконтроллер, — это те самые нули и единицы, т. е. «высокое» напряжение или «низкое». Программа, которую мы будем писать, представляет собой последовательность нулей и единиц. Не более. О некоторых важных понятиях мы поговорим позже, а сейчас лишь отметим, что нам придется записывать нули и единицы в определенные участки памяти, тем самым включая и отключая части внутренних схем микроконтроллера. Для этого нам понадобятся логические операции.

Алгебра логики, или булева алгебра, оперирует логическими переменными и включает три базовых логических операции:

Таблицы истинности для этих операций:

ABA & BA | B¬ A
00001
01011
10010
11110

Ниже приведены аксиомы булевой алгебры.

  1. Коммутативность (переместительный закон)

A & B = B & A

A | B = B | A

  1. Ассоциативность (сочетательный закон)

(A & B) & C = A & (B & C)

(A | B) | C = A | (B | C)

  1. Дистрибутивность (распределительный закон)

(A | B) & C = (A & C) | (B & C)

(A & B) | C = (A | C) & (B | C)

  1. Свойства констант

A & 0 = 0

A | 0 = A

A & 1 = A

A | 1 = 1

A | A = A

  1. Идемпотентность

A & A = A

A | (~A) = 1

  1. Комплементарность (дополнительный закон)

A & (~A) = 0

  1. Закон снятия двойного отрицания

~(~A) = A

  1. Теорема де Моргана

~(A | B) = (~A) & (~B)

~(A & B) = (~A) | (~B)

В программировании существуют два вида логических операций. Когда оперируют числами (набором бит), то осуществляют побитовую логическую операцию, которая применяется независимо к каждому биту. В языке программирования Си логический оператор «И», как уже говорилось раньше, вызывают символом «&». Например, если A = 0101, а B = 1100, то

A0101
B1100
A & B0100

Другой вид логических операций — с участием булевых значений. В Си булева переменная является «ложью», если равна 0, и «истиной», если равна любому ненулевому числу (стандартная величина для «истины», очевидно, 1). В Си булевый оператор «И» вызывают символом &&. Таким образом:

A1100
B0100
A && B1

Нам потребуются операции первого типа (над набором битов) для настройки микроконтроллера, но об этом позже.


Назад | Оглавление | Дальше