АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция
|
Система команд ОМЕОМ MCS51
Система команд ОМЕОМ MCS51 надає широкi можливостi для обробки даних, забезпечує реалiзацiю логiчних, арифметичних операцiй, а також керування у режимi реального часу. Реалiзована побiтова, потетрадна (4 бiти), побайтна (8 бiт) та 16-ти розрядна обробка даних.
Систему команд МCS51 умовно можна роздiлити на п'ять груп:
- арифметичнi команди;
- логiчнi команди з байтовими змiнними;
- команди передачi даних;
- команди бiтового процесора;
- команди розгалуження та передачi курування.
До арифметичних команд вiдносять додавання (ADD), додавання з врахуванням флагу переносу (ADDC), вiднiмання iз запозиченням (SUBB), iнкрементування (INC), декрементування (DEC), десяткової корекцiї (DA), множення (MUL), дiлення (DIV).
Таблиця 12. Група арифметичних операцій
Мнемокод
| Дія
| Назва команди
| Довжина,
байт
| К-ість
циклів
| Примітки
| ADD A,Rn
| [A]:= [A] + [Rn]
| Додаванння
|
|
|
| ADD A,ad
| [A]:= [A] + [ad]
| -//-
|
|
|
| ADD A,@Ri
| [A]:= [A] + [(Ri)]
| -//-
|
|
|
| ADD A,#d
| [A]:= [A] +#d
| -//-
|
|
|
| ADDC A, Rn
| [A]:=[A]+[Rn]+[C]
| -//-
|
|
|
| ADDC A,ad
| [A]:= [A]+[ad]+ [C]
| -//-
|
|
|
| ADDC A, @Ri
| [A]:= [A]+[(Ri)]+ [C]
| -//-
|
|
|
| ADDC A,#d
| [A]:= [A]+#d+[C]
| -//-
|
|
|
| DA
| Десяткова корекція акумулятора
|
|
|
| SUBB A,Rn
| [A]:=[A]-[Rn]-[C]
| Віднімання
|
|
|
| SUBB A,ad
| [A]:= [A]-[ad]- [C]
| -//-
|
|
|
| SUBB A,@Ri
| [A]:= [A]-[(Ri)]- [C]
| -//-
|
|
|
| SUBB A,#d
| [A]:= [A]-#d-[C]
| -//-
|
|
|
| INC A
| [A]:= [A] + 1
| Інкремент
|
|
|
| INC Rn
| [Rn]:= [Rn] + 1
| -//-
|
|
|
| INC ad
| [ad]:= [ad] + 1
| -//-
|
|
|
| INC @Ri
| [(Ri)]:= [(Ri)] + 1
| -//-
|
|
|
| INC DPTR
| [DPTR]:= [DPTR]+1
| -//-
|
|
|
| DEC A
| [A]:= [A] – 1
| Декремент
|
|
|
| DEC Rn
| [Rn]:= [Rn] – 1
| -//-
|
|
|
| DEC ad
| [ad]:= [ad] – 1
| -//-
|
|
|
| DEC @Ri
| [(Ri)]:= [(Ri)] - 1
| -//-
|
|
|
| MUL AB
| [A],[B]:= [A]* [B]
| Множення
|
|
| [А]-hight byte
[В]– low byte
| DIV AB
| [A].[B]:= [A]/ [B]
| Ділення
|
|
| [А]- частка
[В] - остача
|
До логiчних команд iз байтовими змiнними вiдносяться коман ди логiчного множення (ANL), логiчного додавання (ORL), додавання по модулю 2 (XRL).
Таблиця 13. Група логічних операцій
Мнемокод
| Дія
| Назва команди
| Довжина,
байт
| К-сть
циклів
| Примітки
| ANL A,Rn
| [A]:=[A] and [Rn]
| Логічне множення
|
|
|
| ANL A,ad
| [A]:= [A] and [ad]
| -//-
|
|
|
| ANL A,@Ri
| [A]:= [A]and [(Ri)]
| -//-
|
|
|
| ANL A,#d
| [A]:= [A] and #d
| -//-
|
|
|
| ANL ad,A
| [ad]:= [ad] and [A]
| -//-
|
|
|
| ANL ad,#d
| [ad]:= [ad] and #d
| -//-
|
|
|
| ORL A,Rn
| [A]:=[A] or [Rn]
| Логічне додавння
|
|
|
| ORL A,ad
| [A]:= [A] or [ad]
| -//-
|
|
|
| ORL A,@Ri
| [A]:= [A]or [(Ri)]
| -//-
|
|
|
| ORL A,#d
| [A]:= [A] or #d
| -//-
|
|
|
| ORL ad,A
| [ad]:= [ad] or [A]
| -//-
|
|
|
| ORL ad,#d
| [ad]:= [ad] or #d
| -//-
|
|
|
| XRL A,Rn
| [A]:=[A] xor [Rn]
| Виключаюче “АБО”
|
|
|
| XRL A,ad
| [A]:= [A]xor [ad]
| -//-
|
|
|
| XRL A,@Ri
| [A]:= [A]xor [(Ri)]
| -//-
|
|
|
| XRL A,#d
| [A]:= [A] xor #d
| -//-
|
|
|
| XRL ad,A
| [ad]:= [ad] xor [A]
| -//-
|
|
|
| XRL ad,#d
| [ad]:= [ad] xor #d
| -//-
|
|
|
| CPL A
| [A]:= not[A]
| Інверсія
|
|
|
| CLR A
| [A]:= 0
| Очистка
|
|
|
| RL A
| [A.b]:=[A.(b-1)]; [A.0]:=[A.7]
| Зсув на біт вліво
|
|
|
| RLC A
| [A.b]:= [A.(b-1)];
[A.0]:=[C];[C]:=[A.7]
| -//-
|
|
| через біт “С”
| RR A
| [A.7]:=[A.0];
[A.b]:= [A.(b+1)];
| Зсув на біт вправо
|
|
|
| RRC A
| [C]:=[A.0]; [A.7]:= [C] [A.b]:= [A.(b+1)];
| -//-
|
|
| через біт “С”
| SWAP A
| [A.0...A.3]<=>[A.0...A.3]
| Обмін тетрадами
|
|
|
|
Таблиця 14. Група команд роботи з бітами
Мнемокод
| Дія
| Довжина, байт
| Кількість циклів
| Примітки
| CLR C
| [C]:=0
|
|
|
| CLR bit
| [bit]:=0
|
|
|
| SETB C
| [C]:=1
|
|
|
| SETB bit
| [bit]:=1
|
|
|
| CPL C
| [C]:=not[C]
|
|
|
| CPL bit
| [bit]:=not[bit]
|
|
|
| ANL C,bit
| [C]:=[C]and [bit]
|
|
|
| ANL C,/bit
| [C]:=[C]and (not[bit])
|
|
|
| ORL C,bit
| [C]:=[C]or [bit]
|
|
|
| ORL C,/bit
| [C]:=[C]or (not[bit])
|
|
|
| MOV C,bit
| [C]:= [bit]
|
|
|
| MOV bit,C
| [bit]:= [C]
|
|
|
|
За допомогою команд бiтового процесора можна встановити в "1", скинути в "0", iнвертувати певний флаг чи адресований бiт. Можна реалiзувати переходи: якщо бiт встановлений; якщо бiт не встановлений; якщо бiт встановлений iз скиданням цього бiту. Мiж окремими бiтами можна виконувати ряд логiчних операцiй, що дозволяє оптимiзувати алгоритм програми користувача.
До команд передачi даних вiдносяться всi команди пересилки даних мiж регiстрами, регiстрами та пам'яттю (MOV, MOVC) із використанням рiзних способiв адресацiї.
Таблиця 15. Група команд передачі даних
Мнемокод
| Дія
| Назва команди
| Довжинабайт
| К-сть
циклів
| Примітки
| MOV A,Rn
| [A]:=[Rn]
| Передача даних
|
|
|
| MOV A,ad
| [A]:=[ad]
| -//-
|
|
|
| MOV A,@Ri
| [A]:=[(Ri)]
| -//-
|
|
|
| MOV A,#d
| [A]:=#d
| -//-
|
|
|
| MOV Rn,A
| [Rn]:= [A]
| -//-
|
|
|
| MOV Rn,ad
| [Rn]:=[ad]
| -//-
|
|
|
| MOV Rn,#d
| [Rn]:=#d
| -//-
|
|
|
| MOV ad,A
| [ad]:= [A]
| -//-
|
|
|
| MOV ad,Rn
| [ad]:= [Rn]
| -//-
|
|
|
| MOV ad,ads
| [ad]:= [ads]
| -//-
|
|
|
| MOV ad,@Ri
| [ad]:= [(Ri)]
| -//-
|
|
|
| MOV ad,#d
| [ad]:= #d
| -//-
|
|
|
| MOV @Ri,A
| [(Ri)]:=[A]
| -//-
|
|
|
| MOV @Ri,ad
| [(Ri)]:=ad
| -//-
|
|
|
| MOV @Ri,#d
| [(Ri)]:= #d
| -//-
|
|
|
| MOV DTPR,#d16
| [DTPR]:=#d16
| Завантаження DTPR
|
|
|
| MOVC A,@A+DTPR
| [A]:=[(A)]+
+[(DPTR)]
| Читання зовнішньої пам’яті даних
|
|
|
| MOVC A,@A+PC
| [A]:=[(A)]+
[(PC)]
| Читання байту пам’яті програм
|
|
|
| MOVX A,@Ri
| [A]:= [(Ri)]
| Завантаження зовнішньої пам’яті даних
|
|
| 8 бітна адреса
| MOVX A,@DTPR
| [A]:= [(DTPR)]
| Читання зовнішньої пам’яті даних
|
|
| 16 бітна адреса
| MOVX @Ri,A
| [(Ri)]:=[A]
| Читання зовнішньої пам’яті даних
|
|
| 8 біт адреси
| MOVX @DTPR,A
| [(DTPR)]:=[A]
| Читання зовнішньої пам’яті даних
|
|
| 16 біт адреси
| PUSH ad
| [SP]:=[SP]+1
[(SP)]:=[ad]
| Завантажити в стек
|
|
|
| POP ad
| [SP]:=[SP]-1
[ad]:= [(SP)]
| Витягнути з стеку
|
|
|
| XCH A,Rn
| [A]<=>[Rn]
| Обмін байтами
|
|
|
| XCH A,ad
| [A] <=>[ad]
| -//-
|
|
|
| XCH A,@Ri
| [A] <=>[(Ri)]
| -//-
|
|
|
| XCHD A,@Ri
| [A.0...A.3]<=>
[(Ri.0.. Ri.3)]
| Обмін молодшими тетрадами
|
|
|
|
Таблиця 16. Група команд передачі керування
Мнемокод
| Дія
| Назва команди
| Довжина,
байт
| К-сть
циклів
| LJMP ad16
| [PC]:=ad16
| Довгий перехід
|
|
| AJMP ad11
| [PC]:= [PC] +ad11
| Абсолютний перехід в межах 2К
|
|
| SJMP ad8
| [PC]:= [PC] +rel
| Короткий перехід
|
|
| JMP @A+DPTR
| [PC]:= [A] +[DPTR]
| Непрямий перехід
|
|
| JZ rel
| Якщо Z=1, то [PC]:= [PC] +rel,
інакше [PC]:= [PC] +2
| Умовний перехід по Z
|
|
| JNZ rel
| Якщо Z=0, то [PC]:= [PC] +rel,
інакше [PC]:= [PC] +2
| -//-
|
|
| JC rel
| Якщо С=1, то [PC]:= [PC] +rel,
інакше [PC]:= [PC] +2
| Умовний перехід по C
|
|
| JNC rel
| Якщо С=0, то [PC]:= [PC] +rel,
інакше [PC]:= [PC] +2
| -//-
|
|
| JB bit, rel
| Якщо bit=1, то [PC]:= [PC] +rel,
інакше [PC]:= [PC] +3
| Умовний перехід за значенням біта
|
|
| JNB bit, rel
| Якщо bit=0, то [PC]:= [PC] +rel,
інакше [PC]:= [PC] +3
| -//-
|
|
| JBC bit, rel
| Якщо [bit]=1, то [PC]:= [PC]+rel, інакше [PC]:= [PC] +3
| -//- з наступним його очищенням
|
|
| DJNZ Rn, rel
| [Rn]:=[Rn]-1; Якщо [Rn]¹0,
то [PC]:= [PC] +rel,
інакше [PC]:= [PC] +2
| Декремент регістра і перехід, якщо не нуль
|
|
| DJNZ ad, rel
| [ad]:=[ad]-1; Якщо [ad]¹0,
то [PC]:= [PC] +rel,
інакше [PC]:= [PC] +3
| Декремент прямоадресованого байта і -//-
|
|
| CJNE A,ad,rel
| Якщо [А]¹[Rn],
то [PC]:= [PC] +rel,
інакше [PC]:= [PC] +3
| Перехід якщо нерівні значення акумулятора і регістра
|
|
| CJNE A,#d,rel
| Якщо [А] ¹#d,
то [PC]:= [PC] +rel,
інакше [PC]:= [PC] +3
| Перехід якщо нерівні значення акумулятора і константи
|
|
| CJNE Rn,#d, rel
| Якщо [Rn] ¹#d,
то [PC]:= [PC] +rel,
інакше [PC]:= [PC] +3
| Перехід якщо нерівні значення регістра і константи
|
|
| CJNE@Ri,#d, rel
| Якщо [(Ri)] ¹#d,
то [PC]:= [PC] +rel,
інакше [PC]:= [PC] +3
| Перехід якщо нерівні значення регістра і константи
|
|
| LCALL ad16
| [PC]:= [PC] +3, [SP]:=[SP]+2
[(SP)]:=[ PC]
| Довгий виклик підпрограми
|
|
| ACALL ad11
| [PC]:= [PC] +2, [SP]:=[SP]+2
[(SP)]:=[ PC]
| Абсолютний виклик підпрограми в межах 2К
|
|
| RET
| [PC]:= [(SP)]; [SP]:=[SP]+2
| Вихід із підпрограми
|
|
| RETI
| [PC]:= [(SP)]; [SP]:=[SP]+2
| -//- обробки переривання
|
|
| NOP
| [PC]:= [PC] +1
| Холоста команда
|
|
| До команд розгалуження та передачi керування вiдносять команди безумовного переходу (JMP) та умовного переходу (JZ, JNZ, JB, JBC, JC, JNB, JNC) за результатами аналiзу окремих бiтiв та флажкiв ОМЕОМ. Крiм того, до цiєї групи команд вiдносяться команди виклику пiдпрограм (CALL) та повернення із пiдпрограми (RET).
Таблиця 17. Визначені адреси бітів даних
Позначення
| Біт регістра
| Адреса
| Призначення
| CY
| PSW.7
| D7
| флаг переносу
| AC
| PSW.6
| D6
| флаг додаткового переносу
| F0
| PSW.6
| D5
| Флаг користувача
| RS1
| PSW.4
| D4
| Біт 1 вибору банка регістрів
| RS0
| PSW.3
| D3
| Біт 0 вибору банка регістрів
| OV
| PSW.2
| D2
| флаг переповнення
| P
| PSW.0
| D0
| Флаг парності
| TF1
| TCON.7
| 8F
| Флаг переповнення таймера 1
| TR1
| TCON.6
| 8E
| Біт включення таймера 1
| TF0
| TCON.5
| 8D
| Флаг переповнення таймера 1
| TR0
| TCON.4
| 8C
| Біт включення таймера 1
| IE1
| TCON.3
| 8B
| Флаг запиту зовнішнього преривання 1
| IT1
| TCON.2
| 8A
| Керуючий біт переривання 1
| IE0
| TCON.1
|
| Флаг запиту зовнішнього преривання 1
| IT0
| TCON.0
|
| Керуючий біт переривання 1
| SM0
| SCON.7
| 9F
| Режим послідовного порту, біт 0
| SM1
| SCON.6
| 9E
| Режим послідовного порту, біт 1
| SM2
| SCON.5
| 9D
| Режим послідовного порту, біт 2
| REN
| SCON.4
| 9C
| Дозвіл прийому
| TB8
| SCON.3
| 9B
| 8-й біт передачі
| RB8
| SCON.2
| 9A
| 8-й біт прийому
| TI
| SCON.1
|
| Флаг преривання передачі
| RI
| SCON.0
|
| Флаг преривання прийому
| EA
| IE.7
| AF
| Дозвіл всіх переривань
| ES
| IE.4
| AC
| Дозвіл переривання послідовного порту
| ET1
| IE.3
| AB
| Дозвіл переривання таймиера/лічильника 1
| EX1
| IE.2
| AA
| Дозвіл зовнішнього переривання 1
| ET0
| IE.1
| A9
| Дозвіл переривання таймиера/лічильника 1
| EX0
| IE.0
| A8
| Дозвіл зовнішнього переривання 1
| PS
| IP.4
| BC
| Пріоритет переривання послідовного порту
| PT1
| IP.3
| BB
| Пріоритет переривання таймиера/лічильника 1
| PX1
| IP.2
| BA
| Пріоритет зовнішнього переривання 1
| PT0
| IP.1
| B9
| Пріоритет переривання таймиера/лічильника 0
| PX0
| IP.0
| B8
| Пріоритет зовнішнього переривання 0
| RD
| P3.7
| B7
| Читання із зовнішьої пам’яті
| WR
| P3.6
| B6
| Запис у зовнішю пам’ять
| T1
| P3.5
| B5
| Зовнішній вхід таймера/лічильника 1
| T0
| P3.4
| B4
| Зовнішній вхід таймера/лічильника 0
| INT1
| P3.3
| B3
| Вхід переривання 1
| INT0
| P3.2
| B2
| Вхід переривання 0
| TxD
| P3.1
| B1
| Вихід передачі послідовного порту
| RxD
| P3.0
| B0
| Вихід прийому послідовного порту
|
Визначені назви регістрів приведені у табл. 3, бітів - у таблиці 17, а прийняті позначення приведені у табл. 18.
Таблиця 18. Список використовуваних позначень у системі команд
Позначення
| Назва
| Межі
| Призначення
| Примітки
| А
| Акумулятор
|
| Зберігання даних різних команд
|
| b
| Номер біту
| 0.. 7
|
|
| ad
| Абсолютна адреса регістра
|
|
| 55h
| ad 11
| Адреса (зміщення) 11 біт
|
|
| #7F5h
| ad16
| Абсолютна адреса 16 біт
|
|
| #0F5С0h
| С
| Біт переносу
|
| Вказує на переповнення акумулятора
|
| #d
| Константа 8 біт
| 0..0FFh
|
| #0F5h
| #d16
| Константа 16 біт
| 0..0FFFFh
|
| #0F5С0h
| rel
| Відносне зміщення 8 біт
| 0..0FFh
|
|
| Rn
| Регістр робочого банку
| 0..7
|
| R4
| Ri
| Регістр непрямої адресації
| 0;1
| Запис @Ri означає, що адреса регістра призначення вказана у Ri
| R0
| DTPR
| Вказівник даних
|
|
|
| M
| Адреса мітки
| 0..0F
|
|
| N
| Адреса мітки
| 0..0хF
|
|
| [ ]
|
|
| Вміст операнда
| [А]
| ()
|
|
| Посилання по значенню операнда
| (Ri)
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | Поиск по сайту:
|