Команди передачі даних
Дана група є найбільшою в системі команд МК 51 і містить 4 підгрупи: пересилок, завантаження, обміну даними і стекові команди. Крім того їх можна поділити на команди, які оперують з байтами та команди бітових операцій. Тут будуть розглядатись команди, які оперують з байтами (таблиця 8.14).
Таблиця 8.14- Команди передачі даних
Назва команди
| Мнемоніка
| КОП
| Т
| В
| Ц
| Операція
|
Команди пересилок
|
Пересилка в акумулятор з регістра (n=0 7)
| MOV A,Rn
| 11101ііі
|
|
|
| (A)ß(Rn)
|
Пересилка в акумулятор прямоадресованого байта
| MOV A,ad
|
|
|
|
| (A)ß(ad)
|
Пересилка в акумулятор байта з РПД (і=0,1)
| MOV A,
@Ri
| 1110011і
|
|
|
| (A)ß((Ri))
|
Пересилка в регістр з акумулятора
| MOVRn,A
| 11111ііі
|
|
|
| (Rn)ß(A)
|
Пересилка в регістр прямоадресованого байта
| MOV Rn,ad
| 10101ііі
|
|
|
| (Rn)ß(ad)
|
Пересилка за прямою адресою ак.
| MOV ad,A
|
|
|
|
| (ad)ß(A)
|
Пересилка за прямою адресою регістра
| MOV ad,Rn
| 10001ііі
|
|
|
| (ad)ß(Rn)
|
Пересилка прямоадресованого байта по прямій адресі
| MOV add,
ads
|
|
|
|
| (add)ß(abs)
|
Пересилка байта з РПД по прямій адресі
| MOV ad,
@Ri
| 1000011і
|
|
|
| (ad)ß((Ri))
|
Пересилка в РПД з акумулятора
| MOV @Ri,
A
| 1111011і
|
|
|
| ((Ri))ß(A)
|
Пересилка в РПД прямоадресованого байта
| MOV @Ri,
ad
| 0110011і
|
|
|
| ((Ri))ß(ad)
|
Пересилка в акуму-лятор байта з ПП
| MOVC A,
@A+DPTR
|
|
|
|
| (A) ß((A)+
+(DPTR))
|
Пересилка в акуму-лятор байта з ПП
| MOVC A,
@A+PC
|
|
|
|
| (PC)ß(PC)+1
(A)ß((A)+(PC))
|
Пересилка в акуму-лятор байта з ЗПД
| MOVX A,@Ri
| 1110001і
|
|
|
| (A)ß((Ri))
|
Пересилка в акуму-лятор байта з розширеної ЗПД
| MOVX A,
@DPTR
|
|
|
|
| (A)ß((DPTR))
|
Пересилка в ЗПД з акумулятора
| MOVX @Ri,A
| 1111001і
|
|
|
| ((Ri))ß(A)
|
Пересилка в розши-рену ЗПД з акуму-лятора
| MOVX @DPTR,A
|
|
|
|
| (DPTR)ß(A)
|
Команди завантаження
|
Завантаження в регістр константи
| MOV Rn,#d
| 01111ііі
|
|
|
| (Rn)ß #d
|
Завантаження в акумулятор константи
| MOV A,#d
|
|
|
|
| (A)ß#d
|
Пересилка за прямою адресою константи
| MOV ad,#d
|
|
|
|
| (ad)ß#d
|
Пересилка в РПД константи
| MOV @Ri,
#d
| 0111011і
|
|
|
| ((Ri))ß#d
|
Завантаження вказівника даних
| MOV DPTR,
#d16
|
|
|
|
| (DPTR)ß#d16
|
Стекові команди
|
Завантаження в стек
| PUSH ad
|
|
|
|
| (SP)ß(SP)+1
((SP))ß(ad)
|
Вилучення зі стека
| POP ad
|
|
|
|
| (ad)ß(SP) (SP)ß(SP)-1
|
Команди обміну
|
Обмін акумулятора з регістром
| XCH A,Rn
| 11001ііі
|
|
|
| (A) (Rn)
|
Обмін акумулятора з
Прямоадресованим
Байтом
| XCH A,ad
|
|
|
|
| (A) (ad)
|
Обмін акумулятора з байтом із РПД
| XCH A,@Ri
| 1100011і
|
|
|
| (A) ((Ri))
|
Обмін молодшої тетради акумулятора з молодшою тетрадою байта РПД
| XCHD A,@Ri
| 1101011і
|
|
|
| (A0-3) ((Ri) 0-3))
|
Команди пересилки даних мають три модифікації:
MOV - пересилки в межах резидентної пам’яті даних, регістрів, спеціальних функцій та портів;
MOVC - пересилки з пам’яті програм (внутрішньої та зовнішньої) в акумулятор;
MOVX - двонаправлені пересилки із зовнішньої пам’яті даних і акумулятора.
Команда MOV забезпечує двонаправлені пересилки, джерелами та приймачами яких з одного боку є акумулятор, а з другого - регістри оперативного призначення Rn (від R0 до R7 відповідного банку регістрів), комірки внутрішнього ОЗП, адреси яких (операнд ad задається в діапазоні адрес від 00 H до FF H) прямо задається в команді, комірки резидентної пам’яті даних (адреси від 00 Н до 7F H) вказується опосередковано через регістри R0 i R1 відповідного банку. Низка пересилок може виконуватись без участі акумулятора. Зокрема пересилки з однієї комірки внутрішнього ОЗП в іншу, адреса приймача (add) і джерела (ads) задається відповідно в другому і третьому байтах команди MOV, з комірки ОЗП в регістр оперативного призначення і навпаки. Можлива і опосередкована адресація комірки РПД через регістри R0 i R1. Основні способи пересилки з використанням команди MOV показані на таких прикладах:
MOV A,R3
| ; Пересилка даних з регістра R3 в акумулятор
|
MOV P1,A
| ; Пересилка байта з акумулятора в порт Р1
|
MOV @R1,P2
| ; Пересилка з порту Р2 в комірку РПД, адреса якої в;регістрі R1
|
MOV R5,P0
| ; Пересилка байта з порту Р0 в регістр R5
|
MOV@R0,SUBF
| ; Пересилка прийнятого в послідовному каналі байта в;РПД
|
Команди MOVC забезпечують занесення до акумулятора байта з комірок пам’яті програм, адреса яких утворена сумою поточного вмісту акумулятора та вказівника даних (MOVC A,@A+DPTR) або сумою вмісту акумулятора і лічильника команд (MOVC A,@A+PC). Перша команда дозволяє пересилати байти з комірок, що знаходяться в повному адресному просторі зовнішньої пам’яті програм об’ємом 64 Кбайти, а друга - в суміщеному адресному просторі ПП (тобто ЗП складає 64 Кбайтів +256 байтів, що задаються байтом акумулятора). Дані команди зручно використовувати у тому випадку, коли готові результати розв’язку певної задачі написані в ПП (наприклад, таблиця sin x для цілих кутів, квадратів чисел тощо).
В МК51 при використанні команди MOVX @,Ri забезпечується доступ до 256 байтів ЗПД для виконання пересилок, а також є двосторонній обмін байтами між акумулятором і розширеною ЗПД, коли для доступу до комірок пам’яті використовується 16-бітна адреса, що зберігається в регістрі-покажчику даних DPTR. Команда MOVX @DPTR забезпечує доступ до 65536 байтам ЗПД.
Команди арифметичних операцій
Дану групу утворюють 24 команди (таблиця 8.15), які використовують команди віднімання, десяткової корекції, інкременту/декременту байтів а також команди множення та ділення. Основною особливістю основних команд арифметичних операцій є те, що одним із операндів і приймачем результату є акумулятор. Другим операндом є регістри оперативного призначення, комірки внутрішнього ОЗП, безпосередні дані, комірки РПД. Всі безпосередні дані, крім інкременту/декременту байтів діють на індикатори.
Дія команд додавання, віднімання, десяткової корекції, інкременту/декремету співпадає з дією аналогічних команд вже розглянутих в МП (наприклад, КМ 1810 ВМ 86).
Таблиця 8.15- Група команд арифметичних операцій
Назва команди
| Мнемоніка
| КОП
| Т
| В
| Ц
| Операція
|
Додавання акумулятора і регістра (n=0 7)
| ADD A,Rn
| 00101iii
|
|
|
| (A) (A)+(Rn)
|
Додавання акумулятора і прямоадресовано-го байта
| ADD A,ad
|
|
|
|
| (A) (A)+(ad)
|
Додавання акумулятора і байта з РПД
| ADD A,@Ri
| 0010011i
|
|
|
| (A) (A)+((Ri))
|
Додавання акумулятора і константи
| ADD A,#d
|
|
|
|
| (A) (A)+#d
|
Додавання акумулятора і регістра з перено-сом
| ADDC A,Rn
| 00111iii
|
|
|
| (A) (A)+(Rn)+(C)
|
Додавання акумулятора і прямоадресовано-го байта з переносом
| ADDC A,ad
|
|
|
|
| (A) (A)+(ad)+(C)
|
Додавання акуму-лятора і байта з РПД з переносом
| ADDC A,@Ri
| 0011011i
|
|
|
| (A) (A)+((Ri))+(C)
|
Додавання акуму-лятора і константи з переносом
| ADDC A,#d
|
|
|
|
| (A) (A)+#d+(C)
|
Десяткова корекція акумулятора
| DA A
|
|
|
|
| Якщо (A0-3) >9V ((AC)=1),
то (A0-3) (A0-3)+6 потім,
якщо(A4-7) >9V ((C)=1),
то (A4-7) (A4-7)+6
|
Віднімання з акумулятора регістра з за-позиченням
| SUBB A,Rn
| 10011iii
|
|
|
| (A) (A)-(C)-(Rn)
|
Віднімання з акумулятора прямоадресо-ваного байта з запозиченням
| SUBB A,ad
|
|
|
|
| (A) (A)-(C)-((ad))
|
Віднімання з акумулятора байта з РПД з запозиченням
| SUBB A,@Ri
| 1001011i
|
|
|
| (A) (A)-(C)-((Ri))
|
Віднімання з акумулятора константи з запозиченням
| SUBB A,#d
|
|
|
|
| (A) (A)-(C)-#d
|
Інкремент акумулятора
| INC A
|
|
|
|
| (A) (A)+1
|
Інкремент регістра
| INC Rn
| 00001iii
|
|
|
| (Rn) (Rn)+1
|
Інкремент прямоад-ресованого байта
| INC ad
|
|
|
|
| (ad) (ad)+1
|
Інкремент байта в РПД
| INC @Ri
| 0000011i
|
|
|
| ((Ri)) ((Ri))+1
|
Інкремент вказівника даних
| INC DPTR
|
|
|
|
| (DPTR) (DPTR)+1
|
Декремент акуму-лятора
| DEC A
|
|
|
|
| (A) (A)-1
|
Декремент регістра
| DEC Rn
| 00011iii
|
|
|
| (Rn) (Rn)
|
Декремент прямоад-ресованого байта
| DEC ad
|
|
|
|
| (ad) (ad)-1
|
Декремент байта в РПД
| DEC @Ri
| 0001011i
|
|
|
| ((Ri)) ((Ri))-1
|
Множення акуму-лятора і регістра В
| MUL AB
|
|
|
|
| (B)(A) (A)*(B)
|
Ділення акумулятора і регістра В
| DIV AB
|
|
|
|
| (A).(B) (A)/(B)
|
Читайте также:
Воспользуйтесь поиском по сайту: