Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР_8.doc
Скачиваний:
2
Добавлен:
27.09.2019
Размер:
122.37 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ДОРОЖНО-СТРОИТЕЛЬНЫЙ КОЛЛЕДЖ имени Ленинского комсомола

Методические указания по выполнению лабораторных работ по дисциплине «ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ»

Лабораторная работа № 8 Логические команды

ГГДСК Гомель 2011

  1. Цель работы

Изучить и практически исследовать работу логических команд однокристальных микроконтроллеров семейства MCS-51 (МК51) на персональном компьютере.

2.Основные теоретические сведения

К группе логических команд микроконтроллеров семейства МК51 относят команды, выполняющие операции алгебры логики (И, ИЛИ, исключающее ИЛИ, НЕ), команды сдвига, а также команды обмена тетрад в аккумуляторе и его очистки (сброса).

Команды логического умножения реализуют поразрядную логическую операцию И (конъюнкцию). Результат операции равен 1, если оба соответствующих бита равны 1, и равен 0, если хотя бы один из них равен нулю. Например

1 0 1 0 1 0 0 1

AND

0 0 1 1 0 0 1 0

––––––––––––––––

0 0 1 0 0 0 0 0,

где AND – обозначение логической операции И.

Команды логического сложения реализуют поразрядную логическую операцию ИЛИ (дизъюнкцию). Результат операции равен 1, если хотя бы один из соответствующих битов равен 1, и равен 0, если оба равны нулю. Например

1 0 1 0 1 0 0 1 .

OR

0 0 1 1 0 0 1 0

------------------------

1 0 1 1 1 0 1 1 ,

где OR – обозначение логической операции ИЛИ.

Команды Исключающего ИЛИ реализуют поразрядную логическую операцию Исключающее ИЛИ, которая иногда называется сложением по модулю два. Результат операции равен 1, если соответствующие биты противоположны (1 и 0), и равен 0, если они одинаковы (1 и 1, 0 и 0). Например

1 0 1 0 1 0 0 1

XOR

0 0 1 1 0 0 1 0

------------------------

1 0 0 1 1 0 1 1,

где XOR – обозначение логической операции Исключающее ИЛИ.

Команда логического отрицания реализует логическую операцию НЕ (инверсия, обращение). Она производит поразрядное инвертирование битов. Например

1 0 1 0 1 0 0 1

NOT

------------------------

0 1 0 1 0 1 1 0,

где NOT – обозначение логической операции НЕ (инверсии).

В МК51 имеются следующие команды логических операций

ANL A, Rn ; (A)  (A)  (Rn) - Логическое И аккумулятора и регистра

ANL A, ad ; (A)  (A)  (ad) - Логическое И аккумулятора и прямоадресуемого байта

ANL A, @Ri ; (A)  (A)  ((Ri)) - Логическое И аккумулятора и байта из ПД

ANL A, #d ; (A)  (A)  #d - Логическое И аккумулятора и константы

ANL ad, A ; (ad)  (ad)  (A) - Логическое И прямоадресуемого байта и аккумулятора

ANL ad, #d ; (ad)  (ad)  #d - Логическое И прямоадресуемого байта и константы

ORL A, Rn ; (A)  (A)  (Rn) - Логическое ИЛИ аккумулятора и регистра

ORL A, ad ; (A)  (A)  (ad) - Логическое ИЛИ аккумулятора и прямоадресуемого

; байта

ORL A, @Ri ; (A)  (A)  (Ri)) - Логическое ИЛИ аккумулятора и байта из ПД

ORL A, #d ; (A)  (A)  #d - Логическое ИЛИ аккумулятора и константы

ORL ad, A ; (ad)  (ad)  (A) - Логическое ИЛИ прямоадресуемого байта и

 аккумулятора

ORL ad, #d ; (ad)  (ad)  #d - Логическое ИЛИ прямоадресуемого байта и

 константы

XRL A, Rn ; (A)  (A)  (Rn) - Исключающее ИЛИ аккумулятора и регистра

XRL A, ad ; (A)  (A)  (ad) - Исключающее ИЛИ аккумулятора и прямоадресуемого

 байта

XRL A, @Ri ; (A)  (A)  ((Ri)) - Исключающее ИЛИ аккумулятора и байта из ПД

XRL A, #d ; (A)  (A)  #d - Исключающее ИЛИ аккумулятора и константы

XRL ad, A ; (ad)  (ad) (A) - Исключающее ИЛИ прямоадресуемого байта и

 аккумулятора

XRL ad, #d ; (ad)  (ad)  #d - Исключающее ИЛИ прямоадресуемого байта и

 константы

CPL A ; (A)  (/A) - Инверсия аккумулятора

CLR A ; (A)  0 - Сброс (очистка) аккумулятора

SWAP A ; - Обмен местами тетрад в аккумуляторе

Логические команды позволяют использовать особые приемы в ходе обработки цифровых данных. Так, во многих случаях при выполнении программ необходимо проверять или изменять значения одного или нескольких разрядов (битов) числа, находящегося в аккумуляторе. Это можно выполнить с помощью следующих операций

  1. логического умножения числа в аккумуляторе и маски, которая очищает (маскирует, сбрасывает в 0) разряд числа, если в соответствующем разряде маски будет записан 0. И не изменяет его, если в разряде маски записана 1

  2. логического сложения числа в аккумуляторе и маски, которая устанавливает разряд числа в 1, если в таком же разряде маски будет записана 1. И не изменяет его, если в этом разряде записан 0

  3. логического Исключающего ИЛИ числа в аккумуляторе и маски, которая инвертирует содержимое разряда числа, если в соответствующем разряде маски записана 1. И не изменяет его, если в этом разряде записан 0.

Число-маска может являться непосредственными данными в самой логической команде, а также может находиться в регистре или ячейке ПД. Примеры использования маскирования

Таблица 1

Мнемокод

Число в аккумуляторе

Маска (байт #d)

Результат в аккумуляторе

ANL A, #d

11111111

01000010

01000010

00000000

01000010

00000000

11111111

11110000

11110000

11111111

00001111

00001111

ORL A, #d

00001111

00001111

00001111

11110000

00001111

11111111

XRL A, #d

00001111

00001111

00000000

11110000

00001111

11111111

В рассмотренных примерах с помощью маски изменяются биты аккумулятора, однако те же операции можно проводить и с прямоадресуемыми ячейками памяти. Чаще всего – это регистры специальных функций, например, порты ввода/вывода.

Микроконтроллеры семейства МК51 имеют 4 команды сдвига аккумулятора

RL A - Сдвиг аккумулятора влево циклический

RLC A - Сдвиг аккумулятора влево через перенос

RR A - Сдвиг аккумулятора вправо циклический

RRC A - Сдвиг аккумулятора вправо через перенос.

Все эти команды осуществляют сдвиг содержимого аккумулятора на один разряд. Их действие можно изобразить в виде

1) RL A – сдвиг влево

Аккумулятор

2) RR A - сдвиг вправо

Аккумулятор

3) RLC A – сдвиг влево через перенос

4) RRC A – сдвиг вправо через перенос

Из этих схем следует, что команды RL A и RR A не влияют на флаг переноса C.

Команды сдвига могут использоваться для умножения и деления на число, кратное 2. Это основано на том, что сдвиг двоичного кода на один разряд влево эквивалентен его умножению на 2, а сдвиг на один разряд вправо – делению на 2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]