- •1.Организация микроконтроллера мк1816
- •1.1.Общие сведения о семействе микроконтролеров к1816.
- •2.Арифметическо-логическое устройство (алу) микроконтроллера мк1816
- •3.Память микроконтроллера мк1816
- •3.1.Память программ (или - память команд, пк)
- •3.2.Память данных (или - оперативная память, озу)
- •4.Организация ввода – вывода в микроконтроллере мк1816
- •4.1.Порты (или каналы) ввода - вывода р1 и р2.
- •4.2.Порт ввода - вывода bus (или db).
- •5.Управление работой микроконтроллера мк1816
- •5.1.Синхронизация микроконтроллера.
- •5.2.Системный сброс.
- •5.3.Пошаговый режим работы.
- •6.Варианты структур микроконтроллерных систем(мкс) на основе мк1816
- •6.1.Мк-система с расширенной памятью программ.
- •6.2.Мк-система с расширенной памятью данных.
- •6.3.Мк-система с расширенным вводом-выводом.
- •7.Система команд микроконтроллера мк1816
- •7.1.Команды пересылки и обмена
- •7.2.Команды арифметических и логических операций (в том числе и операций над признаками)
- •7.2.1.Общие сведения.
- •7.2.2.Команды группы арифметических операций
- •7.2.3.Команды группы логических операций:
- •Xrl a,Rr - Исключающее или аккумулятора с маской в регистре
- •Xrl a,#d - Исключающее или аккумулятора с непосредственным операндом
- •Xrl a,@Rr - Исключающее или аккумулятора и маской в ячейке памяти
- •7.3.Команды ввода – вывода
- •7.4.Команды передачи управления (в том числе и операций с подпрограммами)
- •7.5.Команды операций с таймером
- •7.6.Команды управления режимом работы мк
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 |
0А |
3А |
9А |
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}
Команда выполняет операцию аналогично предыдущей.