Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
15.04.2015
Размер:
662.53 Кб
Скачать

Цель работы

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

Порядок выполнения работы

В МК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. Команды логического умножения

1. Запустите симулятор/отладчик AVSIM51, отключите отображение меток и занесите в память программ коды программы, реализующей операцию

(A) = (A)  (R2)  (30H)  (В)  (7FH).

ANL A, R2 ; (A)  (A)  (R2)

MOV R0, #30H ; (R0)  #30H - адрес ячейки 30H

ANL A, @R0 ; (A)  (A)  ((R0))

ANL A, B ; (A)  (A)  (B)

ANL A, #7FH ; (A)  (A)  #7FH

NOP ; Пустая команда

Занесите в регистры и ячейку памяти исходные данные (A) = 81H, (R2) = 77H, (B) = 6EH, (30H) = 45H. Выполните программу в пошаговом режиме, наблюдая за содержимым регистров и ячеек памяти, участвующих в программе, а также флагами МК. Запишите содержимое аккумулятора – результат выполнения программы.

Выполните проверку правильности работы программы «вручную», произведя логические операции над исходными данными по правилам алгебры логики.

2. Занесите в память программ симулятора программу, выполняющую маскирование (сброс, обнуление, очистку) 7-го разряда числа, находящегося в регистре r4.

Текст программы

MOV A, R4 ; Пересылка (A)  (R4)

ANL A, #01111111B ; Лог. умножение аккумулятора и маски 01111111B=7FH

MOV R4, A ; Пересылка (R4)  (A)

NOP ; Пустая команда

Выполните программу в пошаговом режиме, предварительно записав в регистр R4 исходные данные в соответствии с табл. 1.

Таблица 1

Исходные значения

Результат

Получено практически

Получено теоретически

FFH

7FH

7FH

0AH

7FH

7FH

2 Команды логического сложения

Запишите в память симулятора программу, выполняющую установку в 1 разрядов младшей тетрады байта, находящегося в регистре R5.

Текст программы

MOV A, R5 ; Пересылка (A)  (R5)

ORL A, #00001111B ; Лог. сложение с маской 00001111B = 0FH

MOV R5, A ; Пересылка (R5)  (A)

NOP

Выполните программу в пошаговом режиме, предварительно записав в регистр R5 исходные данные в соответствии с табл.2.

Таблица 2.

Исходные значения

Результат

Получено практически

Получено теоретически

F0H

FFH

FFH

AAH

AFH

AFH

Проверьте правильность работы программы «вручную», результаты проверки занесите в табл. 2.

3. Команды Исключающего ИЛИ

Запишите в память симулятора программу, инвертирующую младшую тетраду байта, находящегося в регистре R6.

Текст программы

MOV A, R6 ; Пересылка (A)  (R6)

XRL A, #00001111B ; Искл. ИЛИ с маской 00001111B = 0FH

MOV R6, A ; Пересылка (R6)  (A)

NOP

Выполните программу в пошаговом режиме, предварительно записав в регистр R6 исходные данные в соответствии с табл. 3.

Таблица 3.

Исходные значения

Результат

Получено практически

Получено теоретически

FFH

F0H

F0H

0FH

00H

00H

4. Команды инверсии, обмена тетрад и сброса аккумулятора

Занесите в память симулятора текст программы

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

SWAP A ; Обменять тетрады в аккумуляторе

CLR A ; Очистить аккумулятор

NOP

Задав исходные данные (A) = A5H, выполните программу в пошаговом режиме, наблюдая за содержимым аккумулятора.

. Задания для самостоятельной работы

  1. Напишите и выполните программу маскирования (обнуления) младшей тетрады байта, находящегося в регистре R5.

  1. Напишите и выполните программу маскирования 6-го и 3-го разрядов байта, находящегося в ячейке памяти с адресом 30H.

  1. Напишите и выполните программу, выполняющую установку в 1 двух разрядов (0-го и 3-го) числа, находящегося в регистре R3.

  1. Напишите и выполните программу, инвертирующую 3-й и 4-й разряды в байте, находящемся в ячейке памяти данных с адресом 32H.

  1. Напишите и выполните программу, которая инвертирует содержимое ячеек памяти данных с адресами 20H…24H.

  1. Разработайте и выполните программу, которая вводит в регистр R7 информацию с линий 0, 1, 2, 7 порта P1 микроконтроллера.

  1. Напишите и выполните программу, которая после сброса МК производит выбор 2-го банка РОН.

Команды сдвига

Применение команд сдвига для умножения и деления

При обработке информации в микроконтроллерах часто возникает необходимость умножения и деления чисел на некоторую константу. Эту задачу можно решить применением команд микроконтроллера MUL AB или DIV AB, если операнды – однобайтные числа, или применением стандартных подпрограмм умножения и деления многобайтных чисел. Однако во многих применениях более эффективным (по быстродействию и длине программы) может оказаться способ умножения или деления числа на константу путем сдвигов. Данный способ основан на том, что сдвиг двоичного кода числа на один разряд влево эквивалентен его умножению на 2, а сдвиг на один разряд вправо – делению на 2.

Занесите в память симулятора следующую программу

RL A ; Умножение на 2

RL A ; Умножение на 2

MOV P1, A ; Вывод в порт P1

NOP

Программа выполняет умножение содержимого аккумулятора на 4 и выводит результат в порт P1.

Следует, однако, отметить, что результат будет правильным только в том случае, если при умножении не происходит переполнение аккумулятора, т.е. результат должен быть меньше FFH.

Перед выполнением программы следует занести в аккумулятор исходные данные согласно табл. 4.

Таблица 4.

Исходное значение

Результат

HEX-код

Двоичный код

HEX-код

Двоичный код

10

0001 0000

40

0100 0000

20

0010 0000

80

1000 0000

40

0100 0000

01

0000 0001

2. При выполнении умножения содержимого аккумулятора методом сдвигов влево для исключения ошибки при переполнении можно использовать расширитель аккумулятора (регистр B или любой из регистров R0…R7). В этом случае расширитель и аккумулятор образуют 16-разрядный регистр.

Занесите в память симулятора следующую программу

MOV B, #0 ; Очистить регистр B

CLR C ; Сбросить флаг C

RLC A ; Сдвиг влево объединенного

XCH A, B ; 16-разрядного результата

RLC A ; в регистровой паре (B)(A)

XCH A, B

RLC A

XCH A, B

RLC A

XCH A, B

NOP

Программа производит умножение содержимого аккумулятора на 4. Умножение на 2 заменяется сдвигом влево через перенос аккумулятора и расширителя B. Выполните программу умножения в пошаговом режиме и заполните табл. 5.

Таблица 5

Исходное значение

в аккумуляторе

Результат

Регистр B

Аккумулятор A

HEX-код

Двоичный код

HEX-код

Двоичный код

HEX- код

Двоичный код

08

0000 1000

00

0000 0000

20

0010 0000

88

1000 1000

02

0000 0010

20

0010 0000

FF

1111 1111

03

0000 0011

FC

1111 1100

Соседние файлы в папке МПТлабы4-6