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

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 аккумулятора и ячейки памяти остаются неизменными. Команда используется при обработке десятичных чисел.

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