- •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.1.Команды пересылки и обмена
Все команды пересылки данных в МК 1816 выполняются с использованием аккумулятора. Обобщенная схема выполнения этой группы команд представлена на рисунке ниже.
Данные могут пересылаться между аккумулятором и восемью рабочими регистрами каждого банка РОН с прямой адресацией. Обмен с ячейками внутреннего ОЗУ осуществляется с использованием косвенных адресов, находящихся в регистрах R0 или R1 активизированного блока РОН. Кроме того, регистры R0 и R1 являются регистрами косвенных адресов при работе с внешней памятью. Команды пересылки данных внутри МК выполняются за один машинный цикл, а обмен с внешней памятью требует двух машинных циклов.
MOV A, Rr - Передать содержимое регистра в аккумулятор
"1111'1rrr", "F*" где r = {0 ÷ 7}
MOV Rr,A - Передать содержимое аккумулятора в регистр
"1010'1rrr", "А*" где r = {0 ÷ 7}
MOV A,#d - Передать непосредственный операнд в аккумулятор
"0010'0011", "23" где #d - 8-разрядный операнд
MOV Rr#d - Передать непосредственный операнд в регистр R0÷R7
"1011'1rrr", "B*" где r = {0 ÷ 7}, #d - 8-разрядный операнд
Эти команды используются для инициализации регистров с целью организации программных циклов или загрузки косвенных адресов в R0 и R1.
MOV A,PSW - Передать содержимое регистра ССП в аккумулятор
"1100'0111", "C7"
(A) <- (PSW)
Пример: передать управление по метке LL, если признак селектора банков РОН в ССП (BS, бит 4) установлен в 1.
JBRSET: MOV A,PSW ; передать ССП в аккумулятор
JB4 LL ; перейти, если А4 = 1
MOV PSW,A - Передать содержимое аккумулятора в регистр ССП
"1101'0111", "D7"
(PSW) <- (A)
По этой команде изменяется содержимое регистра признаков (ССП). Команда используется как средство восстановления состояния после прерывания или подпрограммы и для инициализации указателя стека (см. ниже).
MOV A,T - Передать содержимое счетчика в аккумулятор
(А) <-- (Т)
Пример: передать управление по метке LABEL, если счетчик событий достиг состояния 64.
TESTT: MOV А,Т ; передать содержимое счетчика в аккумулятор
JB6 LABEL ; перейти по метке, если А6 = 1
MOV Т,А - Передать содержимое аккумулятора в счетчик
"0110'0010", "62"
(Т) <-- (А)
Пример: инициировать и запустить счетчик событий
INITT: CLR А ; очистить аккумулятор
MOV Т,А ; установить исходное значение счетчика
STRT CNT ; включить счетчик событий
MOV А,@Rr - Загрузить в аккумулятор содержимое
ячейки памяти с косвенной адресацией
"1111'000r", "F0" для R0 и "F1" для R1
(A) <-- ((Rr)); r = {0 ÷ 1}
По этой команде содержимое ячейки внутренней памяти данных, адресуемой разрядами 0÷5 регистра r, передается в аккумулятор. Содержимое регистра r не изменяется.
MOV @Rr,A - Передать содержимое аккумулятора в
ячейку памяти с косвенной адресацией
"1010'000r", "A0" для R0 и "A1" для R1
((Rr)) <-- (A); r = {0 ÷ 1}
Содержимое аккумулятора передается в ячейку внутренней памяти по адресу, задаваемому разрядами 0÷5 регистра r. Содержимое регистра r не изменяется.
MOV @R,#d - Передать непосредственный операнд в
ячейку памяти с косвенной адресацией
"1011'000r", "B0" для R0 и "B1" для R1
((Rr)) <-- d; r = {0 ÷ 1}
Пример: требуется записать во внутреннее ОЗУ шестнадцатеричное число 1C3F
в ячейки с адресами 41 и 42.
LOADM: MOV R0,#41 ; загрузка в R0 десятичного числа 41
MOV @R0,#1CH ; загрузка 1С в ячейку 41
INC R0 ; (R0) <- (R0) + 1
MOV @R0,#3F ; загрузка числа 3F в ячейку 42
MOVX A,@Rr - Передать содержимое внешней памяти в
аккумулятор с косвенной адресацией
"1000'000r", "80" для R0 и "81" для R1
(A) <-- ((Rr)); r = {0 ÷ 1}
MOVX @Rr,A - Передать содержимое аккумулятора во внешнюю
память с косвенной адресацией
"1001'000r", "90" для R0 и "91" для R1
((Rr)) <-- (A); r = {0 ÷ 1}
MOVP A,@A - Передать в аккумулятор данные из текущей
страницы памяти программ
"1010'0011", "A3"
(PC0÷7) <-- (A);
(A) <- ((PC))
По этой команде аккумулятор адресует ячейку СППЗУ через разряды 0÷7 счетчика команд, т.е. в пределах одной страницы (256 байт). После получения аккумулятором адресованного байта данных содержимое счетчика команд восстанавливается. Хотя это и однобайтная команда, но она выполняется за два машинных цикла. В том случае, если эта команда находится в ячейке с адресом 255 текущей страницы, косвенный адрес @A адресует ячейку на следующей странице памяти программ.
MOVP3 A,@A - Передать данные со страницы 3 в аккумулятор
"1110'0011", "E3"
(PC0÷7) <-- (A);
(PC8÷11) <-- 0011;
(A) <- ((PC))
По этой команде, выполняемой за два машинных цикла, байт данных с третьей страницы памяти программ из ячейки, адресуемой аккумулятором через счетчик команд, передается в аккумулятор. По окончании операции содержимое счетчика команд восстанавливается. Пример: требуется найти ASCII-эквивалент шестнадцатеричного кода по таблице, расположеной в начале страницы 3.
TABL: MOV A,#B8H ; загрузить в аккумулятор число B816 (1011'1000)
ANL A,#7FH ; замаскировать старший бит (0011'1000), т.к. ASCI-символы
; представляются 7-битным кодом
MOVP3 A,@A ; передать содержимое ячейки 3816
; страницы 3 в аккумулятор (8 в коде ASCII)
XCH A,Rr - Обменять содержимое аккумулятора и регистра
"0010'0rrr", "2*"
(A) <--> (Rr) где r = {0 ÷ 7}
Пример: переслать текущее значение таймера в регистр 5 без потери содержимого аккумулятора.
XCHTR: XCH A,R5 ; обменять содержимое R5 и аккумулятора
MOV А,Т ; передать содержимое счетчика в А
ХСН A,R5 ; обменять содержимое R5 и аккумулятора
ХСН A,@Ri - Обменять содержимое аккумулятора и ячейки памяти
"0010'00rr", "20" для R0 и "21" для R1
(A) <--> ((Rr)) где r = {0 ÷ 1}
Содержимое аккумулятора и содержимое ячейки внутреннего ОЗУ, адресуемой разрядами 0 ÷ 5 регистра r, меняются местами. Содержимое регистра r не изменяется.
Пример: увеличить нд 1 содержимое ячейки 40.
INC40: MOV R0,#40 ; загрузить регистр косвенного адреса
ХСН A,@R0 ; обменять содержимое А и ячейки 40
INC A ; (A) <-- (А) + 1
ХСН A,@R0 ; обменять еще раз
XCHD A,@Rr - Обменять младшие тетрады аккумулятора и ячейки памяти
"0011'000r", "30" для R0 и "31" для R1
(A0÷3) <--> ((Rr0÷3))
где r = {0 ÷ 1}
По команде осуществляется взаимный обмен битами 0 ÷ 3. Содержимое регистра r, разряды 4 ÷ 7 аккумулятора и ячейки памяти остаются неизменными. Команда используется при обработке десятичных чисел.