Скачиваний:
54
Добавлен:
21.02.2014
Размер:
628.74 Кб
Скачать

7.2.3.Команды группы логических операций:

ANL A,Rr - Логическое И аккумулятора с маской в регистре

"0101'1rrr", "5*"

(А) <-- (A) ^ (Rr); r = {0 ÷ 7}

ANL A,#d - Логическое И аккумулятора с непосредственным

операндом-маской

"0101'0011", "53"

(А) <-- (A) ^ d

ANL A,@Rr - Логическое И аккумулятора с маской

в ячейке памяти

"0101'000r", "50" для R0 и "51" для R1

(А) <-- (A) ^ ((Rr)); r = {0 ÷ 1}

Пример: маска 0816 находится в ячейке FF памяти. Требуется выделить из содержимого аккумулятора бит 3.

ANDM: MOV R0,#FFH ; загрузка регистра R0

ANL A,@R0 ; из ячейки 63 памяти извлекается маска 0000'1000

; и выполняется конъюнкция с аккумулятором

ORL A,Rr - Логическое ИЛИ аккумулятора с маской в регистре

"0100'1rrr", "4*"

(А) <-- (A) v (Rr);

Xrl a,Rr - Исключающее или аккумулятора с маской в регистре

"1101'1rrr", "D*"

(А) <-- (A) !v (Rr); r = {0 ÷ 1}

Xrl a,#d - Исключающее или аккумулятора с непосредственным операндом

"1101'1rrr", d0-d7, "D3"

(А) <-- (A) !v d;

Xrl a,@Rr - Исключающее или аккумулятора и маской в ячейке памяти

"1101'100r", "D0" для R0 и "D1" для R1

(А) <-- (A) !v ((Rr)); r = {0 ÷ 1}

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

"0010'0111", "27"

(А) <-- 0

CPL A - Инвертировать содержимое аккумулятора

"0011'0111", "37"

(А) <-- (A*)

CLR С - Очистить признак переноса

"1001'0111", "97"

(С) <-- 0

CPL С - Инвертировать перенос

"1010'0111", "A7"

(C) <-- (C*)

CLR F0 - Очистить признак F0

"1000'0101", "85"

(F0) <-- 0

CPL F0 - Инвертировать признак F0

"1001'0101", "95"

(F0) <-- (F0*)

CLR F1 - Очистить признак F1

"1010'0101", "A5"

(F0) <-- 0

CPL F1 - Инвертировать признак F1

"1011'0101", "B5"

(F1) <-- (F1*)

Пример: текущее значение признака F1 неизвестно. Требуется установить F1 = 1.

SETF1: CLR F1 ; установить F1 в нуль

CPL F1 ; установить F1 в единицу

7.3.Команды ввода – вывода

Порты Р1 и Р2 МК 1816 представляют собой квазидвунаправленные управляемые статические буферные регистры. При выводе информации выводимый байт данных фиксируется в буферном регистре порта, а при вводе - не фиксируется и должен быть прочитан контроллером в течение периода присутствия байта на входах порта.

Ориентация МК 1816 на применение в устройствах управления объектами привела к появлению в его системе таких команд, которые позволяют выполнять операции ввода-вывода информации с использованием маскирования, что предоставляет разработчику удобные средства организации обмена не только байтами, но и отдельными битами и их произвольными комбинациями.

Схемотехника портов Р1 и Р2 такова, что ввод данных в некоторую линию возможен только в том случае, если предварительно в данный бит порта программой МК была записана 1. Вывод информации через порты Р1 и Р2 может выполняться с использованием маскирования (И, ИЛИ) и фиксацией результата операции в буферном регистре, что позволяет выборочно изменять отдельные биты портов вывода информации. Данное свойство очень важно в том случае, если МК генерирует и выдает управляющие слова (наборы управляющих двоичных сигналов) для управления режимами работы различных исполнительных механизмов и агрегатов объекта управления.

Порт BUS может выполнять все функции, перечисленные для портов Р1 и Р2, но в отличие от них все восемь линий порта BUS должны одновременно быть либо входными, либо выходными линиями. По команде MOVX порт BUS используется в качестве двунаправленного синхронного канала для доступа к внешней оперативной памяти.

Три встроенных порта (Р1, Р2, BUS) могут быть расширены в случае необходимости для обеспечения связи МК 1816 с объектом управления, имеющим большое число датчиков и исполнительных механизмов. В том случае, если расширение осуществляется через младшую тетраду порта Р2 (порт-расширитель), то дополнительные порты имеют адреса 4 ÷ 7. В том случае, если в качестве порта-расширителя используется порт BUS, то все дополнительные порты входят в адресуемое пространство памяти и адресуются (как и внешняя память данных) через регистры косвенного адреса R0 и R1.

IN А, Рр - Ввести данные из порта в аккумулятор для порта Р1 "09"

и "0А" для порта Р2

"0000'10pp"

(A) <-- (Pp); где p = 1 или 2

INS A,BUS - Стробируемый ввод из порта BUS в аккумулятор

"0000'1000"

(А) <-- (BUS)

Эта команда исполняется за два машинных цикла. Ввод данных из порта BUS в аккумулятор осуществляется по спаду управляющего сигнала ЧТ*.

OUTL Рр,А - Вывод из аккумулятора в порт P1 или P2

"0011'10pp", "39" для порта P1 или "3A" для порта P2

(Рр) <- (А); р = {1 ÷ 2}

Команда выполняется за два машинных цикла. Выводимый байт фиксируется в буферном регистре порта.

Пример: вывести содержимое регистров R3 и R4 в порты Р1 и Р2 соответственно.

OUTR: MOV A,R3 ; пересылка содержимого R3 в аккумулятор

OUTL P1,A ; вывод в порт Р1

MOV A,R4 ; пересылка R4 в аккумулятор

OUTL P2,A ; вывод в порт Р2

OUTL BUS,A - Вывод из аккумулятора в порт BUS

"0000'0010", "02"

(BUS) <-- (A)

Команда выполняется за два машинных цикла. Байт данных из аккумулятора передается и фиксируется в буферном регистре порта BUS до тех пор, пока он не изменяется очередной командой OUTL или любой командой (например, MOVX при работе с внешней памятью), требующей использования порта BUS, Исключение составляет только команда INS, по которой осуществляется через порт BUS стробируемый ввод байта, но в регистре-защелке порта BUS ранее выведенный по команде OUTL байт данных сохраняется. Эта особенность двунаправленных схем порта BUS MK 1816 может быть эффективно использована разработчиком.

ANL Pp,#d - Логическое И порта Р1 или Р2 и маски,

заданной непосредственным операндом

"1001'10pp" d0 ÷ d7, "99" для порта Р1 и "9А" для порта Р2

(Рр) <-- (Pp) && d; p = 1 или 2

Пример: из поступающего в порт Р2 байта данных выделить только старшую тетраду.

ANDP2: ANL P2,#0F0H ; наложение маски F016

; очистка битов 0 ÷ 3 порта Р2

ANL BUS,#d - Логическое И порта BUS и маски, заданной

непосредственным операндом

"1001'1000" d0 ÷ d7, "98"

(BUS) <-- (BUS) && d

ORL Pp,#d - Логическое ИЛИ порта Р1 или Р 2 и маски,

заданной непосредственным операндом

"1000'10pp" d0 ÷ d7, "89" для порта Р1 и "8А" для порта Р2

(Рр) <-- (Рр) V d

Пример: установить код "все единицы" в порте Р1.

SETP1: ORL P1,#0FFH ; Логическое ИЛИ порта Р1 с маской FF16

ORL BUS,#d - Логическое ИЛИ порта BUS с маской,

заданной непосредственным операндом

"1000'1000", d0 ÷ d7; "88"

(BUS) <- (BUS) V d

MOVD A,Pp - Ввести из порта 4 ÷ 7 в аккумулятор

0 ÷ 3) <- (Рр); (A4 ÷ 7); p = {4 ÷ 7}

Команда выполняется за два машинных цикла. Из внешнего порта в аккумулятор принимается только младшая тетрада, а старшие биты 4 ÷ 7 обнуляются. Кодирование команд ввода-вывода в зависимости от номера порта показано в таблице:

PORT

IN

OUT

AND

OR

 

PORT

IN

OUT

AND

OR

BUS

08

02

98

88

 

P4

ОС

3C

9C

8C

PI

09

39

99

89

 

P5

0D

3D

9D

8D

Р2

8A

 

P6

0E

3E

9E

8E

 

 

 

 

 

 

P7

0F

3F

9F

8F

MOVD Рр, А - Вывести из аккумулятора в порт 4 ÷ 7

(Рр) <- (А0÷3); p = {4÷7}

Команда выполняется за два машинных цикла. Младшая тетрада аккумулятора передается во внешний порт.

Пример: вывести содержимое аккумулятора в порты 6 и 7.

OUTP: MOVD P6, А ; выдать биты 0 ÷ 3 в порт 6

SWAP A ; поменять местами тетрады

MOVD P7, А ; выдать биты 4 ÷ 7 в порт 7

ANLD Pp,A - Логическое И порта 4 ÷ 7 с маской из аккумулятора

"1001'11pp", "9*"

(Pp) <- (Pp) ^ (A0-3); p = {4 ÷ 7}

Команда выполняется за два машинных цикла. Содержимым аккумулятора маскируются только биты 0÷3 порта. Биты 4÷7 порта остаются неизменными.

ORLD Рр, А - Логическое ИЛИ порта 4 ÷ 7 с маской из аккумулятора

"1000'1pp", "8*"

(Pp) <- (Pp) v (A0÷3); p = {4 ÷ 7}

Команда выполняет операцию аналогично предыдущей.

Соседние файлы в папке МП К1816ВЕ4