
- •Программирование цифровой техники и микроконтроллеров управления
- •Алматы 2012
- •1 Микроконтроллеры в современном мире
- •1.1 Краткая история развития микроконтроллеров
- •1.2 Задачи и роль микроконтроллеров
- •2 Выполнение арифметических операций в мп
- •2.1 Системы счислений
- •2.2 Двоичная арифметика
- •2.3 Дополнительный код
- •2.4 Знаковый разряд
- •3 Регистры общего и специального назначения
- •3.1 Регистры portc и trisc
- •3.2 Регистр Status
- •3.3 Фиксированная (абсолютная) адресация
- •4 Косвенная адресация. Логика
- •4.1 Косвенная адресация
- •4.2 Логические функции
- •5 Маскирование. Стек
- •5.1 Маскирование
- •5.2 Счетчик команд
- •5.3 Стек
- •6 Конвейер и подпрограмма задержки
- •6.1 Конвейер
- •6.2 Программа задержки
- •6.3 Расчет времени задержки
- •7 Выполнение умножения и деления
- •7.1 Умножение и деление при помощи сдвига
- •7.2 Инструкции условных переходов
- •7.3 Целочисленное умножение
- •7.4 Целочисленное деление
- •7.5 Умножение на дробное число
- •8 Программирование клавиатуры. Дешифратор
- •8.1 Клавиатура
- •8.2 Фрагменты программы
- •8.3 Дешифратор
- •8.4 Компаратор
- •9 Основные элементы цифровой техники
- •9.1 Сумматор
- •9.2 Арифметико-логическое устройство
- •9.3 Бистабильные схемы
- •9.4 Триггеры и регистры
- •10 Структура микроконтроллера. Индикатор
- •10.1 Применение операций сдвига
- •10.2 Цифровой индикатор
- •10.2 Структурная схема мк
- •11 Прерывания и сторожевой таймер
- •11.1 Прерывания
- •11.2 Подсчет посетителей с помощью прерываний
- •11.3 Сторожевой таймер
- •12 Фактор времени и аналоговый мир
- •12.1 Модуль таймера tmr1
- •12.2 Применение таймера tmr1
- •12.3 Аналоговый мир
- •Приложение а Список некоторых сокращений
- •Список литературы
- •Содержание
- •050013, Алматы, Байтурсынова, 126
4.2 Логические функции
Английский математик Джордж Буль в середине 19-го столетия создал раздел алгебры, касающийся символической обработки логических отношений. Этот раздел алгебры, называемый Булевой алгеброй, оперирует величинами, которые могут иметь только два состояния: истина или ложь.
4.2.1 Инверсия или операция NOT (НЕ).
Инверсия
обозначается символом надчеркивания.
Таким образом, выражение
означает,
что переменная f является обратной
величиной переменной А. То есть, если А
= 0, то f = 1, и наоборот, если А = 1, то f = 0. На
рисунке 4.2а эта зависимость представлена
в виде таблицы истинности (truth
table).
Рисунок 4.2 – Операция NOT
Общепринятое изображение элемента НЕ приведено на рисунке 4.2б. Кружок на изображении логических схем всегда означает инверсию и очень часто используется в сочетании с другими логическими элементами (см. например, рисунок 4.3в).
4.2.2 Операция AND.
Операция AND (И) реализует функцию «все или ничего». Результат операции будет истинным только в том случае, если оба входа истинны. На рисунке 4.3 имеются две входные переменные. Операцию AND иногда называют операцией логического умножения, поскольку (по аналогии с обычным умножением) результат этой операции между любым битом и 0 всегда будет равен 0.
Рисунок 4.3 - Операция AND
4.2.3 Операция OR
Операция OR (ИЛИ) может использоваться, в тех случаях, когда нужно обнаружить ситуацию, что на всех входах нули, см. рисунок 4.4.
Рисунок 4.4 - Операция OR
Если предположить, что вход В является управляющим входом, а вход А — входом данных, то из рисунка 4.4а видно, что данные проходят через вентиль при В = 0 и задерживаются (на выходе постоянно 1) при В = 1.
4.2.4 Операция Exclusive OR – XOR ( Исключительно ИЛИ).
Функция XOR (Исключающее ИЛИ) истинна, если истинен только один из входов. Поэтому на символе изображено «=1», см. рисунок 4.5б. В отличие от обычной операции ИЛИ, при 1 на обоих входах на выходе будет 0.
Аналогично, из таблицы истинности операции Исключающее ИЛИ-НЕ (XNOR), показанной на рисунке 4.5в, видно, что выход такого элемента истинен при одинаковых сигналах на обоих входах. Таким образом, вентиль Исключающее ИЛИ-НЕ можно рассматривать в качестве однобитного компаратора.
Рисунок 4.5 - Операция XOR
Исключающее ИЛИ и Исключающее ИЛИ-НЕ часто применяются для определения переполнения в знаковом бите. Эта ситуация возникает, если знаковые биты (sign) обоих операндов одинаковы (SB =SA), а знаковый бит SC результата отличается от них. Схема такого детектора, см. рисунок 4.6, описывается логической функцией:V=(SBSA)( SBSC).
Рисунок 4.6 – Обнаружение переполнения в знаковом бите
5 Маскирование. Стек
Цель лекции: изучение маскирования, стека и его назначение.
Краткое содержание лекции. Использование логических функций для контроля и изменения значений регистров (маскирование). Счетчик команд и стек. Их работа при вызове подпрограмм.
5.1 Маскирование
При маскировании выполняется побитные логические операции разрядов исходного числа или проверки равенства чисел:
логическая операция AND исходного числа и числа-маски очищает разряд числа в исходном числе, если в соответствующем разряде числа-маски записан 0, и не изменяет его, если в разряде маски записана единица;
логическая операция OR исходного числа и числа-маски устанавливает в разряд исходного числа 1, если в таком же разряде маски будет записана 1, и не изменяет его, если в этом разряде маски записан 0;
логическая операция XOR («исключающее ИЛИ») исходного числа и числа-маски инвертирует содержимое бита исходного числа, если в соответствующем разряде числа маски записана 1. И не изменяет его, если в этом разряде маски записан 0. Часто применяется для определения равенства регистра какому-либо числу, записанному в маске.
Примеры результатов маскирования приведены в таблице 5.1.
Т а б л и ц а 5.1 – Результаты маскирования
Объекты |
Операция |
|||
OR (установка с 4 по 7 бит) |
AND (очистка с 0 по 3 бит) |
XOR (биты с 0 по 3 не изменяем, инверсия с 4 по 7 бит) |
XOR (проверка на равенство) |
|
Число |
10101010 |
10101010 |
10101010 |
11011101 |
Маска |
11110000 |
11110000 |
11110000 |
11011101 |
Результат |
11111010 |
10100000 |
01011010 |
00000000 |
Применяя маскирование, напишем программу регулирования расхода газа в установку для её нагрева без применения обратной связи.
Пусть определен требуемый расход газа (Treb_Raskhod), подаваемый в горелку установки при котором идет нормальный технологический процесс. Давление в трубе меняется, поэтому фактический расход (Fakt_Raskhod) не совпадает с требуемым расходом.
Вращая шток заслонки на трубе с помощью МЭО в сторону Bolshe, мы можем увеличить расход газа, вращая шток в сторону Menshe, мы можем уменьшить расход газа.
Сравнивая значения Treb_Raskhod и Fakt_Raskhod, будем определять направление вращения МЭО. Если Treb_Raskhod < Fakt_Raskhod заслонку надо прикрыть, если Treb_Raskhod > Fakt_Raskhod приоткрыть.
Подпрограмма определения направления "B" или "M" вращения МЭО.
В программе используется особенность кодировки латинских букв “М” и “В” в нулевом и первом разрядах.
MEO MOVF TREB_RASKHOD, W; требуемый расход --> W.
SUBWF FAKT_RASKHOD, W; W= Fakt_Raskhod - Treb_Raskhod.
MOVLW b'01001101'; записываем код буквы М, направление Menshe.
BTFSS STATUS, C; проверяем C = 1?
MOVLW b'01000010'; при C=0, записываем код буквы "В" (Bolshe).
MOVWF NAPRAV_MEO; запоминаем код символа направления.
ANDLW b'00000011'; маской оставляем только 0 и 1 разряды для МЭО.
MOVWF PORTC; пересылаем импульс управления на МЭО.
RETURN
С помощью применения операций AND и XOR можно определить, равны ли определенные биты входного числа заданному значению.
Пусть входное число в регистре PORTB равно 10101110. Три младших разряда контролируют состояние наличия в баке жидкости, заданной температуры и наличие нормального напряжения. Если эти три бита, равны 111, то открывается задвижка слива содержимого бака (это жидкий рубильник на 1000А с расплавом натрия).
MOVLW b’00000111’; заданное число-маска.
ANDWF PORTB, W; считываем из PORTB нужные биты в W.
XORLW b’00000111’; проверяем равенство их заданному числу.
BTFSC STATUS, Z; если Z = 0, пропускается следующая команда.
CALL SLIV; если Z = 1, вызываем подпрограмму SLIV.
MOVLW b’01100111’; дальнейшее продолжение программы.
В рассматриваемом случае подпрограмма SLIV не будет вызвана.