загрузка...
загрузка...
На головну

Система команд мікроконтролерів AVR

  1.  A) З однаковою кількістю команд, однаковими длительностями микроопераций і змінним положенням початку «бульбашки» в конвеєрі.
  2.  III. Система МВС Росії
  3.  IV. МОВА ЯК СИСТЕМА І СТРУКТУРА
  4.  MS DOS. КОМАНДИ робота з каталогами
  5.  UltraPulse Encore - компактна СО2-лазерна система для прецизійної абляції, вапоризації, різання і коагуляції м'яких тканин.
  6.  V. осмислення, узагальнення и сістематізація Нових знань
  7.  V. ПОЛІТИЧНА СИСТЕМА СУСПІЛЬСТВА.

Транслятор асемблера дозволяє використовувати в тексті програми мнемоніки (позначення команд мікроконтролера), повністю збігаються з їх назвою в системі команд мікроконтролера.

Безліч команд мікроконтролерів AVR сімейства Classic можна уявити кількома групами:

· Команди пересилання даних;

· Команди арифметичних операцій і команди зсуву;

· Команди логічних операцій;

· Команди передачі управління;

· Команди операцій з бітами;

· Команди управління системою.

Розглянемо кожну групу докладніше.

2.3.1. Команди логічних операцій

Ці команди дозволяють виконувати стандартні логічні операції над байтами, такі як «логічне множення» (І), «роз'єднання» (АБО), операцію «виключає АБО», а також обчислення зворотного і додаткового кодів числа. До цієї групи можна віднести також команди очищення / установки регістрів і команд перестановки зошити. Всі операції проводяться над регістрами загального призначення, результат зберігається в одному з РОН. Всі логічні операції виконуються за один машинний цикл.

Розглянемо найбільш часто використовувані команди логічних операцій з прикладами (всі команди логічних операцій представлені в таблиці 2.1):

1. «Логічне І» двох РОН- AND Rd, Rr

операція: Rd = Rd AND Rr

опис:Виконує операцію «Логічне І» між вмістом регістрів Rd і Rr

Приклад: ldi R16,1 ; Завантажити 1 в R16

and R2, R16 ; Провести операцію «Логічне І»

2. «Логічне І» РОН і константи- ANDI Rd, K

операція: Rd = Rd AND K

опис:Виконує операцію «Логічне І» між вмістом регістра Rd і 8- розрядних числом. Результат поміщається в регістр Rd. Команда може бути застосована тільки до 16 старшим РОН (R16 ... R31)

Приклад: andi R17, $ 0F ; обнулити старший півбайт регістра R17

andi R18, $ 10 ; Виділити 4-ий розряд в регістрі R18

3. «Логічне АБО» двох РОН- OR Rd, Rr

операція:Rd = RdURr

опис: Виконує операцію «Логічне АБО» між регістрами Rd і Rr. Результат поміщається в регістр Rd

Приклад: or R15, R16 ; Поразрядное АБО R15 і R16

bst R15,6 ; Записати 6-ий розряд регістра R15 в прапор Т

brts ok; перейти якщо прапор Т дорівнює «1»

...

ok:

...

4. «Логічне АБО» РОН і константи-ORI Rd, К

операція:Rd = RdUK

опис: Виконує операцію «Логічне АБО» між регістром Rd і константою К. Результат поміщається в регістр Rd. Команда може бути застосована тільки до 16 старшим РОН (R16 ... R31)

приклад:ori R17, $ 0F; встановити старший півбайт регістра R17

ori R18,1; встановити 0-й розряд регістра R18

5. «Що виключає Або» двох РОН- EOR Rd, Rr

операція:Rd = RdARr

опис:Виконує операцію «Що виключає Або» між регістрами Rd і Rr. Результат поміщається в регістр Rd

приклад:eor R2, R2; очищення регістра R2

eor R0, R22; побітовое «Що виключає Або» між R0 і R22

6. Очищення РОН- CLR Rd

операція:Rd = RdARd

опис:Скидає всі розряди регістра загального призначення шляхом виконання операції «виключає Або» регістра з самим собою

приклад:Організація циклу з заданим числом повторень

clr R18; очистити регістр R18

loop:

ink R18; R18 = R18 + 1

...

cpi R18, $ 50; завершити цикл?

brne loop

Таблиця 2.1. Команди логічних операцій

 мнемоніка  опис  операції  цикли  прапори
 AND Rd, Rr  «Логічне І» двох РОН  Rd = Rd * Rr  Z, N, V
 ANDI Rd, K  «Логічне І» РОН і константи  Rd = Rd * K  Z, N, V
 EOR Rd, Rr  «Що виключає Або» двох РОН  Rd = RdARr  Z, N, V
 OR Rd, Rr  «Логічне АБО» двох РОН  Rd = RdURr  Z, N, V
 ORI Rd, K  «Логічне АБО» РОН і константи  Rd = RdUK  Z, N, V
 COM Rd  Переклад в зворотний код  Rd = $ FF-Rd  Z, C, N, V
 NEG Rd  Переклад в додатковий код  Rd = $ 00-Rd  Z, C, N, V, H
 CLR Rd  Скидання всіх розрядів РОН  Rd = RdARd  Z, N, V
 SER Rd  Установка всіх розрядів РОН  Rd = $ FF -
 TST Rd  Перевірка РОН на негативне або нульове значення  Rd * Rd    Z, N, V
 SWAP Rd  Обмін місцями тетрад в РОН  Rd (3 ... 0) = Rd (7 ... 4) Rd (7 ... 4) = Rd (3 ... 0)   -

 

2.3.2. Команди арифметичних операцій і команди зсуву

До цієї групи відносяться команди, що виконують такі базові операції, як додавання, віднімання, зсув (вправо і вліво), інкремент і декремент. Всі операції проводяться тільки над РОН. При цьому мікроконтролер дозволяє легко оперувати як знаковими, так і беззнаковими числами, а також працювати з числами, представленими в додатковому коді.

Всі команди даної групи виконуються за один машинний цикл, за винятком команд, що оперують двобайтовими значеннями, які виконуються за два цикли.

Розглянемо найбільш часто використовувані команди арифметичних операцій і команди зсуву з прикладами (всі команди арифметичних операцій і команди зсуву представлені в таблиці 2.2):

:

1. Додавання двох РОН- ADD Rd, Rr

операція: Rd = Rd + Rr

опис:Виконує операцію складання між вмістом регістрів Rd і Rr

приклад:add R16, R18; скласти два регістра

2. Додавання реєстрової пари з константой- ADIW Rd, К

операція:Rd + 1: Rd = Rd + 1: Rd + K

опис:Складає вміст реєстрової пари Rd + 1: Rd з 6-розрядних числом. Результат буде втягнений знов у реєстрову пару.

приклад:adiw R24,1; додати 1 до R25: R24

adiw R30,63; додати 63 до покажчика Z (R31: R30)

3. Віднімання двох РОН- SUB Rd, Rr

операція:Rd = Rd-Rr

опис:Віднімає з регістра Rd вміст регістра Rr. Результат поміщається в регістр Rd

приклад:sub R13, R12; відняти R12 з R13 (R13 = R13-R12)

brne noteq; перейти, якщо R12 не дорівнює R13

...

noteq:

...

4. Віднімання константи з реєстраційного SUBI Rd, K

операція: Rd = Rd-K

опис:Віднімає з регістраRd значення константи К. результат втягнений в регістр. Дана команда може бути застосована тільки до старшої половини регістрів загального призначення

приклад:subi R22, $ 11; відняти $ 11 з R22

brne noteq; перейти, якщо R22 не дорівнює $ 11

...

noteq:

...

5. Декремент РОН- DEC Rd

операція:Rd = Rd-1

опис:Зменшує вміст регістра Rd на одиницю. Так як ця команда не впливає на прапор переносу С, вона ідеально підходить для організації лічильника числа Інтерація циклу при виконанні обчислень над багаторозрядними числами. При роботі з беззнаковими числами для виконання переходу відповідно до результату виконання команди можуть використовуватися тільки команди умовного переходу BREQ і BRNE. При роботі з числами в додатковому коді можуть використовуватися всі команди умовного переходу для знакових перевірок. Прапор V встановлюється в «1» тільки в тому випадку, якщо до виконання операції в регістрі знаходилося значення $ 80

приклад:ldi R17, $ 10; записати чісло16 в регістр R17

loop:

add R1, R2; R1 = R1 + R2

dec R17; декрементіровать R17

brne loop; перейти, якщо R17 не дорівнює 0

...

6. Інкремент РОН- INC Rd

операція:Rd = Rd + 1

опис:Збільшує вміст регістра Rd на одиницю. Так як ця команда не впливає на прапор переносу С, вона ідеально підходить для організації лічильника числа Інтерація циклу при виконанні обчислень над багаторозрядними числами. При роботі з беззнаковими числами для виконання переходу відповідно до результату виконання команди можуть використовуватися тільки команди умовного переходу BREQ і BRNE. При роботі з числами в додатковому коді можуть використовуватися всі команди умовного переходу для знакових перевірок. Прапор V встановлюється в «1» тільки в тому випадку, якщо до виконання операції в регістрі знаходилося значення $ 7F

приклад:clr R22; очистити регістр R22

loop:

inc R22; R22 = R22 + 1

...

cpi R22, $ 4F;

brne loop; продовжувати цикл, якщо R22 не дорівнює $ 4F

...

7.Арифметичний зрушення вправо ASR Rd

операція:Rd (n) = Rd (n + 1), n ??= 0 ... 6

опис:Зрушує вміст регістра Rd на 1 розряд вправо. Стан 7-го розряду не змінюється. Значення 0-го розряду поміщається в прапор З регістра SPEG. Часто використовується для поділу чисел зі знаком на два

приклад:ldi R16, $ 10; записати число 16 в регістр R16

asr R16; R16 = R16 / 2

ldi R17, $ FC; записати число -4 в регістр R17

asr R17; R17 = R17 / 2

8. Логічний зсув вліво LSL Rd

операція: Rd (n + 1) = Rd (n), Rd (0) = 0

опис:Зрушує все розряди регістра Rd вліво. Розряд b0 скидається в «0», а розряд b7 завантажується в прапор З регістра SPEG. Еквівалентна команді ADD Rd, Rd

приклад:add R0, R4; R0 = R0 + R4

lsl R0; R0 = R0 * 2

9. Логічний зсув вправо LSR Rd

операція: Rd (n) = Rd (n + 1) Rd (7) = 0

опис:Зрушує все розряди регістра Rd вправо. Розряд b7 скидається в «0», а розряд b0 завантажується в прапор З регістра SPEG.

приклад: add R0, R4; R0 = R0 + R4

lsr R0; R0 = R0 / 2

Таблиця 2.2. Команди арифметичних операцій і команд зсуву

 мнемоніка  опис  операція  цикли  прапори
 ADD Rd, Rr  Додавання двох РОН  Rd = Rd + Rr  Z, C, N, V, H
 ADC Rd, Rr  Додавання двох РОН з перенесенням  Rd = Rd + Rd + C  Z, C, N, V, H
 ADIW Rd, K  Додавання реєстрової пари з константою  Rdh: Rdl = Rdh: Rdl + K  Z, C, N, V, S
 SUB Rd, Rr  Віднімання двох РОН  Rd = Rd-Rr  Z, C, N, V, H
 SUBI Rd, K  Віднімання константи з РОН  Rd = Rd-K  Z, C, N, V, H
 SBC Rd, Rr  Віднімання двох РОН з позичкою  Rd = Rd-Rr-C  Z, C, N, V, H
 SBCI Rd, K  Віднімання константи з РОН з позичкою  Rd = Rd-K-C  Z, C, N, V, H
 SBIW Rd, K  Віднімання константи з реєстрової пари  Rdh: Rdl = Rdh: Rdl-K  Z, C, N, V, S
 DEC Rd  Декремнт РОН  Rd = Rd-1  Z, N, V,
 INC Rd  інкремент РОН  Rd = Rd + 1  Z, N, V
 ASR Rd  Арифметичний зрушення вправо  Rd (n) = Rd (n + 1), n ??= 0 ... 6  Z, C, N, V
 LSL Rd  Логічний зсув вліво  Rd (n + 1) = Rd (n), Rd (0) = 0  Z, C, N, V
 LSR Rd  Логічний зсув вправо  Rd (n) = Rd (n + 1) Rd (7) = 0  Z, C, N, V
 ROL Rd  Зрушення вліво через перенесення  Rd (0) = C, Rd (n + 1) = Rd (n), C = Rd (7)  Z, C, N, V
 ROR Rd  Зрушення вправо через перенос  Rd (7) = C, Rd (n) = Rd (n + 1), C = Rd (0)  Z, C, N, V

2.3.3. Команди операцій з бітами

До цієї групи відносяться команди, що виконують установку або скидання заданого розряду РОН або РВВ. Причому для зміни стану розрядів регістра стану SREG є також додаткові команди (точніше, еквівалентні мнемонічні позначення загальних команд), т. К. Перевірка стану розрядів саме цього регістра проводиться найчастіше. Умовно до цієї групи можна віднести також дві команди передачі управління типу «перевірка / перепустку», які пропускають наступну команду в залежності від стану розрядів РОН або РВВ.

Всім командам даної групи (Таблиця 2.3) потрібно один машинний цикл для виконання, за винятком випадків, коли в результаті перевірки відбувається пропуск команди. У цьому випадку команда виконується за два або три машинних цикли в залежності від пропускається команди.

Розглянемо найбільш часто використовувані команди операцій з бітами з прикладами (всі команди операцій з бітами представлені в таблиці 2.3):

1. Зняти розряд CBI A, b

операція: A.b = 0

опис:Скидає розряд b регістра введення / виводу, розташованого за адресою А простору вводу / виводу. Ця команда може бути застосована тільки до молодших 32 регістрів (адреси 0 ... 31)

приклад: cbi $ 12,7; cбросіть 7-ий розряд порту D

2. Встановити розряд РВВ- SBI A, b

операція:A.b = 1

опис:Встановлює розряд b регістра введення / виводу, розташованого за адресою А простору вводу / виводу. Ця команда може бути застосована тільки до молодших 32 регістрів (адреси 0 ... 31)

приклад:out $ 1E, R0; задати адресу осередку EEPROM

sbi $ 1C, 0; встановити запит на читання

in R1, $ 1D; вважати дані з EEPROM

3. Пересилання прапора Т в розряд РОН- BLD Rd, b

операція:Rd.b = T

опис:Копіює прапор Т регістраSPEG в розряд b регістра Rd

приклад:bst R1,2; зберегти 2-ий розряд регістра R1 в T

Bld R0,4; записати прапор Т в 4-й розряд регістра R0

4. Запис розряду РОН в прапор Т- BST Rd, b

операція:T = Rd.b

опис:Копіює розряд b регістра Rd в прапор Т регістру SPEG

приклад:bst R1,2; зберегти 2-й розряд регістра R1 Вт

bld R0,4; записати прапор Т в 4-й розряд регістра R0

5. Загальна заборона прериваній- CLI

операція:I = 0

опис:Скидає в «0» прапор загального дозволу переривань I регістра SPEG. Еквівалентна команді BCLR 7

приклад:cli; заборонити переривання

in R11, $ 16; прочитати стан порту В

sei; дозволити переривання

6. Загальний дозвіл прериваній- SEI

операція: I = 1

опис:Встановлює в «1» прапор загального дозволу переривань I регістра SPEG. Еквівалентна команді BSET 7

приклад:cli; заборонити переривання

in R13, $ 16; прочитати стан порту В

sei; дозволити переривання

7. Cброс прапора Т- CLT

операція: T = 0

опис:Скидає в «0» прапор Т регістру SPEG. Еквівалентна команді BCLR 6

приклад:clt; скинути прапор Т

8. Установка прапора Т- SET

операція:T = 1

опис:Встановлює в «1» прапор Т регістру SPEG. еквівалентна команді BSET 6

приклад:set; встановити прапор Т

Таблиця 2.3. Команди операцій з розрядами

 мнемоніка  опис  операція  цикли  прапори
 CBR Rd, K  Скидання розряду (ів) РОН  Rd = Rd * ($ FF-K)  Z, N, V
 SBR Rd, K  Установка розряду (ів) РОН  Rd = RdUK  Z, N, V
 CBI A, b  Скидання розряду РВВ  A.b = 0 -
 SBI A, b  Установка розряду РВВ  A.b = 1 -
 BCLR s  Скидання прапора  SREG.s = 0  SREG.s
 BSET s  установка прапора  SREG.s = 1  SREG.s
 BLD Rd, b  Завантаження розряду РОН з прапора Т (SREG)  Rd.b = T -
 BST Rr, b  Запис розряду РОН в прапор Т (SREG)  T = Rd.b T
 CLC  Скидання прапора переносу  C = 0 C
 SEC  Установка прапора переносу  C = 1 C
 CLN  Скидання прапора отр. числа  N = 0 N
 SEN  Установка прапора отр. числа  N = 1 N
 CLZ  Скидання прапора нуля  Z = 0 Z
 SEZ  Установка прапора отр. числа  Z = 1 Z
 CLI  Загальна заборона переривань  I = 0 I
 SEI  Загальний дозвіл переривань  I = 1 I
 CLS  Скидання прапора знака  S = 0 S
 SES  Установка прапора знака  S = 1 S
 CLV  Скидання прапора переповнення доп. коду  V = 0 V
 SEV  Установка прапора переповнення доп. коду  V = 1 V
 CLT  Скидання прапора Т  T = 0 T
 SET  Установка прапора Т  T = 1 T
 CLH  Скидання прапора половинного перенесення  H = 0 H
 SEH  Установка прапора половинного перенесення  H = 1 H

2.3.4. Команди пересилання даних

Команди цієї групи (Таблиця 2.4) призначені для пересилання вмісту комірок, що знаходяться в адресному просторі пам'яті даних. Поділ адресного простору на три частини (РОН, РВВ, ОЗУ) зумовило різноманітність команд даної групи. Пересилання даних, виконувана командами групи, може проводитися в наступних напрямках:

· РОНUРОН;

· РОНUРВВ;

· РОНU пам'ять даних.

Також до цієї групи можна віднести стекові команди PUSH і POP (відсутні вAT90S1200), що дозволяють зберігати в стеці і відновлювати з стека вміст РОН.

На виконання команд даної групи потрібно від одного до трьох машинних циклів в залежності від команди.

Розглянемо найбільш часто використовувані команди пересилання даних з прикладами:

1. Пересилання між РОН- MOV Rd, Rr

операція: Rd = Rr

опис:Копіює вміст регістра Rr в регістр Rd. Регістр-джерело (Rr) не змінюється

приклад: mov R16, R0; переслати вміст R0 в R16

call chec; викликати підпрограму

...

chec:

cpi R16, $ 11; порівняти R16 з $ 11

...

ret; повернутися з підпрограми

2. Завантаження константи в РОН- LDI Rd, K

операція:Rd = K

опис:Завантажує 8-розрядне число в регістр загального призначення Rd. Дана команда може бути застосована тільки до старшої половини РОН (адреси 16 ... 31)

приклад: сlr R31; очистити ст. байт індексного регістра Z

ldi R30, $ F0; завантажити адресу в регістр Z

lpm; завантажити константу з пам'яті програм

; За адресою $ 00F0

3. Непряме читання пам'яті даних- LD Rd, Y

операція:Rd = [Y]

опис:Завантажує один байт з адресного простору пам'яті даних в регістр загального призначення Rd. Адреса комірки пам'яті, до якої здійснюється звернення, міститься в індексному регістрі Y

приклад:clr R29; очистити ст. байт індексного регістра

ldi R28, $ 60; завантажити мл. байт адреси

ld R1, Y; R1 = [$ 0060]

4. Завантаження безпосередньо із пристрою з пам'яті даних- LDS Rd, K

операція: Rd = [k]

опис:Завантажує один байт з адресного простору пам'яті даних в регістр загального призначення Rd. Адреса комірки пам'яті, до якої здійснюється звернення, задається константою К.

приклад:lds R2, $ FF00; R2 = [$ FF00]

add R2, R1; R2 = R2 + R1

sts $ FF000, R2; записати результат за тією ж адресою

5. Непряма запис в пам'ять даних- ST X, Rd

операція:[X] = Rr

опис:Зберігає вміст регістра загального призначення Rr в пам'яті даних. Адреса комірки пам'яті, до якої здійснюється звернення, міститься в індексному регістрі Х

приклад: Clr R27; очистити ст. байт індексного регістра

ldi R26, $ 60; завантажити мл. байт адреси

st X, R1; завантажити R1 за адресою $ 0060

6. Записуйте безпосередньо в пам'ять даних- STS K, Rd

операція:[K] = Rd

опис:Зберігає вміст регістра загального призначення Rd в пам'яті даних. Адреса комірки пам'яті, до якої здійснюється звернення, задається константою До

приклад:lds R2, $ FF00; R2 = [$ FF00]

add R2, R1; R2 = R2 + R1

sts $ FF000, R2; записати результат за тією ж адресою

Таблиця 2.4. Команди пересилання даних

 мнемоніка  опис  операції  цикли  прапори
 MOV Rd, Rr  Пересилання між РОН  Rd = Rr  
 LDI Rd, K  Завантаження константи в РОН  Rd = K  
 LD Rd, X  непряме читання  Rd = [X]  
 LD Rd, X +  Непряме читання з постинкрементом  Rd = [X], X = X + 1  
 LD Rd, -X  Непряме читання з преддекрементом  X = X-1, Rd = [X]  
 LD Rd, Y  непряме читання  Rd = [Y]  
 LD Rd, Y +  Непряме читання з постинкрементом  Rd = [Y], Y = Y + 1  
 LD Rd, -Y  Непряме читання з преддекрементом  Y = Y-1, Rd = [Y]  
 LDD Rd, Y + q  Непряме відносне читання  Rd = [Y + q]  
 LD Rd, Z  непряме читання  Rd = [Z]  
 LD Rd, Z +  Непряме читання з постинкрементом  Rd = [Z], Z = Z + 1  
 LD Rd, -Z  Непряме читання з преддекрементом  Z = Z-1, Rd = [Z]  
 LDD Rd, Z + q  Непряме відносне читання  Rd = [Z + q]  
 LDS Rd, k  Безпосереднє читання з ОЗУ  Rd = [k]  
 ST X, Rr  непряма запис  [X] = Rr  
 ST X +, Rr  Непряма запис з постинкрементом  [X] = Rr, X = X + 1  
 ST -X, Rr  Непряма запис з постинкрементом  X = X-1, [X] = Rr  
 ST Y, Rr  непряма запис  [Y] = Rr  
 ST Y +, Rr  Непряма запис з постинкрементом  [Y] = Rr, Y = Y + 1  
 ST -Y, Rr  Непряма запис з преддекрементом  Y = Y-1, [Y] = Rr  
 STD Y + q, Rr  Непряма відносна запис  [Y + q] = Rr  
 ST Z, Rr  непряма запис  [Z] = Rr  
 ST Z +, Rr  Непряма запис з постинкрементом  [Z] = Rr, Z = Z + 1  
 ST -Z, Rr  Непряма запис з преддекрементом  Z = Z-1, [Z] = Rr  
 STD Z + q, Rr  Непряма відносна запис  [Z + q] = Rr  
 STS k, Rr  Записуйте безпосередньо в ОЗУ  [K] = Rr  
 LPM  Завантаження даних з пам'яті програм  R0 = {Z}  
 IN Rd, A  Пересилання з РВВ в РОН  Rd = A  
 OUT A, Rr  Пересилання з РОН в РВВ  A = Rr  
 PUSH Rr  Збереження байта в стеку  STACK = Rr  
 POP Rd  Витяг байта з стека  Rd = STACK  

2.3.5. Команди передачі управління

У цю групу (Таблиця 2.5) входять команди переходу, виклику підпрограм і повернення з них і команд типу «перевірка / перепустку», пропускають наступну за ними команду при виконанні деякої умови. Також до цієї групи відносяться команди порівняння, формують прапори регістра SREG і призначені, як правило, для роботи спільно з командами умовного переходу.

Очевидно, що команди передачі управління порушують нормальне (лінійне) виконання основної програми. Кожен раз, коли виконується команда з цієї групи (крім команд порівняння), нормальне функціонування конвеєра порушується. Перед завантаженням в конвеєр нового адреси виробляються зупинка і очищення виконуваної послідовності команд. Відповідно Реініціалізація конвеєра призводить до необхідності використання кількох машинних циклів для виконання таких команд.

Розглянемо найбільш часто використовувані команди передачі управління з прикладами:

1. Відносний безумовний перехідною RJMP k

операція: PC = PC + k + 1

опис:Виконує перехід за адресою, рівному сумі вмісту лічильника команд і константи k. На практиці замість числових значень зсуву використовуються мітки

приклад: СPI R16, $ 42; порівняти R16 з числом $ 42

brne M1; перейти до M1, якщо R16 не дорівнює $ 42

rjmp ok; безумовний перехід

M1:

add R16, R17; додати R16 до R17

ink R16; R16 = R16 + 1

ok:

...

2. Відносний виклик подпрограмми- RCALL k

операція:PC = PC + k + 1

опис:Виконує перехід до підпрограми, адреса якої виходить складанням вмісту лічильника команд з константою k. Адреса наступної за RCALL командою (2 байта) зберігається в стеку. На практиці замість числових значень зсуву вказуються мітки підпрограм

приклад:rcall routine; викликати підпрограму

...

routine:

push R14; зберегти вміст R14

...

pop R14; відновити вміст R14

ret; повернення з підпрограми

3. Повернення з подпрограмми- RET

операція:PC = STACK

опис:Виконує повернення в те місце, звідки підпрограма була викликана

приклад: rcall routine; викликати підпрограму

...

routine:

push R14; зберегти вміст R14

...

pop R14; відновити вміст R14

ret; повернення з підпрограми

4. Пропуск команди за однакової кількості двох РОН- CPSE Rd, Rr

операція:Якщо Rd = Rr, то PC = PC + 2 (3), інакше РС = РС + 1

опис:Порівнює вміст двох регістрів загального призначення Rd і Rr і пропускає наступну команду, якщо в регістрах записані однакові значення

приклад:ink R4; збільшити R4 (R4 = R4 + 1)

cpse R4, R0;порівняти содержімоеR4 і R0

neg R4; проинвертировать R4, якщо R4 не дорівнює R0

...

5. Порівняння РОН- CP Rd, Rr

операція: Rd-Rr

опис:Порівнює вміст двох РОН шляхом віднімання вмісту регістра Rr з вмісту регістра Rd. Дана команда впливає тільки на прапори регістра стану SPEG, які встановлюються відповідно до результату віднімання. Вміст регістрів не змінюється. Як правило, дана команда використовується спільно з однією з команд умовного переходу

приклад:cp R4, R19; порівняти R4 з R19 (R = R4-R19)

brne noteq; перейти, якщо R4 <> R19

...

noteq:

...

6. Порівняння вмісту РОН з константой- CPI Rd, K

операція: Rd-K

опис:Порівнює вміст РОН Rd з константою До шляхом віднімання константи з вмісту регістра Rd. Дана команда впливає тільки на прапори регістра стану SPEG, які встановлюються відповідно до результату віднімання. Вміст регістра Rd не змінюється. Як правило, дана команда використовується спільно з однією з команд умовного переходу

приклад:cpi R19, 3; порівняти R19 з числом 3 (R = R19-3)

brne noteq; перейти, якщо R19 <> 3

...

noteq:

...

7. Перехід за умовою «дорівнює» - BREQ k

операція: Якщо Z = 1, то PC = PC + k + 1, інакше РС = РС + 1

опис:Умовний відносний перехід. Перевіряє прапор нуля (Z) і виконує перехід, якщо цей розряд встановлений. Величина зміщення k представляється числом в додатковому коді. При виконанні даної команди відразу ж після команди CP, CPI, SUB або SUBI перехід відбудеться тільки в тому випадку, якщо число (зі знаком чи без знаку), що знаходиться в регістрі Rd, буде дорівнює числу (зі знаком чи без знаку), що знаходиться в регістрі Rr. Еквівалентна команді BRBS 1, k

приклад:cp R1, R0; порівняти R1 з R0

breq equal; перейти, якщо R1 = R2

...

equal:

...

8. Перехід за умовою «не дорівнює» - BRNE k

операція: Якщо Z = 0, то PC = PC + k + 1, інакше РС = РС + 1

опис:Умовний відносний перехід. Перевіряє прапор нуля (Z) і виконує перехід, якщо цей розряд скинутий. Величина зміщення k представляється числом в додатковому коді. При виконанні даної команди відразу ж після команди CP, CPI, SUB або SUBI перехід відбудеться тільки в тому випадку, якщо числа (зі знаком чи без знаку), що знаходяться в регістрах Rd і Rr, що не будуть рівні. Еквівалентна команді BRBC 1, k

приклад: eor R27, R27; очистити R27

loop: inc R27; R27 = R27 + 1

...

cpi R27, 5; порівняти R27 з 5

brne loop; перейти, якщо R27 не дорівнює 5

...

9. Перехід за умовою «вище або дорівнює» (для беззнакових даних) - BRSH k

операція:Якщо C = 0, то PC = PC + k + 1, інакше РС = РС + 1

опис:Умовний відносний перехід. Перевіряє прапор переносу (С) і виконує перехід, якщо цей розряд скинутий. Величина зміщення k представляється числом в додатковому коді. При виконанні даної команди відразу ж після команди CP, CPI, SUB або SUBI перехід відбудеться тільки в тому випадку, якщо беззнаковое число, що знаходиться в регістрі Rd, буде більше (або дорівнює) беззнакового числа, що знаходиться в регістрі Rr. Еквівалентна команді BRBC 0, k

приклад:subi R19,4; R19 = R19-4

brsh hgsm; перейти, якщо R19 більше або дорівнює 4

...

hgsm:

...

10. Перехід за умовою «менше» (для беззнакових даних) - BRLO k

операція:Якщо C = 1, то PC = PC + k + 1, інакше РС = РС + 1

опис:Умовний відносний перехід. Перевіряє прапор переносу (С) і виконує перехід, якщо цей розряд встановлений. Величина зміщення k представляється числом в додатковому коді. При виконанні даної команди відразу ж після команди CP, CPI, SUB або SUBI перехід відбудеться тільки в тому випадку, якщо беззнаковое число, що знаходиться в регістрі Rd, буде менше беззнакового числа, що знаходиться в регістрі Rr. Еквівалентна команді BRBS 0, k

приклад:eor R19, R19; очистити R19

loop: inc R19; R19 = R19 + 1

...

cpi R19, $ 10; порівняти R19 з $ 10

brlo loop; перейти, якщо R19 <$ 10

...

11. Перехід за умовою «від'ємне значення» - BRMI k

операція:Якщо N = 1, то PC = PC + k + 1, інакше РС = РС + 1

опис:Умовний відносний перехід. Перевіряє прапор від'ємного значення (N) і виконує перехід, якщо цей розряд встановлений. Величина зміщення k представляється числом в додатковому коді. Еквівалентна команді BRBS 2, k

приклад:subi R18, 4; R18 = R18-4

brmi minus; перейти, якщо результат негативний

...

minus:

...

12. Перехід за умовою «позитивне значення» - BRPL k

операція:Якщо N = 0, то PC = PC + k + 1, інакше РС = РС + 1

опис:Умовний відносний перехід. Перевіряє прапор від'ємного значення (N) і виконує перехід, якщо цей розряд скинутий. Величина зміщення k представляється числом в додатковому коді. Еквівалентна команді BRBC 2, k

приклад:subi R26, $ 50; R26 = R26- $ 50

brpl plus; перейти, якщо результат позитивний

? ? ...

plus:

...

Таблиця 2.5. Команди передачі управління

 мнемоніка  опис  операція  цикл  прапори
 RJMP k  Відносний безумовний перехід  PC = PC + k + 1 -
 IJMP  Непрямий безумовний перехід  PC = Z -
 RCALL  Відносний виклик підпрограми  PC = PC + k + 1 -
 ICALL  Непрямий виклик підпрограми  PC = Z -
 RET  Повернення з підпрограми  PC = STACK -
 RETI  Повернення з підпрограми обробки переривання  PC = STACK I
 CP Rd, Rr  порівняння РОН  Rd-Rr  Z, N, V, C, H
 CPC Rd, Rr  Порівняння РОН з урахуванням перенесення  Rd-Rr-C  Z, N, V, C, H
 CPI Rd, K  Порівняння РОН з константою  Rd-K  Z, N, V, C, H
 CPSE Rd, Rr  Порівняння і пропуск слід. команди за однакової кількості  Якщо Rd = Rr, тоPC = PC + 2 (3)  1/2/3 -
 SBRC Rr, b  Пропуск слід. команди, якщо розряд РОН скинутий  Якщо Rr.b = 0, тоPC = PC + 2 (3)  1/2/3 -
 SBRS Rr, b  Пропуск слід. команди, якщо розряд РОН встановлений  Якщо Rr.b = 1, тоPC = PC + 2 (3)  1/2/3 -
 SBIC A, b  Пропуск слід. команди, якщо розряд РВВ скинутий  Якщо A.b = 0, тоPC = PC + 2 (3)  1/2/3 -
 SBIS A, b  Пропуск слід. команди, якщо розряд РВВ встановлений  Якщо A.b = 1, тоPC = PC + 2 (3)  1/2/3 -
 BRBC s, k  Перехід, якщо прапор s регістра SREG скинутий  Якщо SREG.s = 0, то PC = PC + k + 1  1/2 -
 BRBS s, k  Перехід, якщо прапор s регістра SREG встановлений  Якщо SREG.s = 1, то PC = PC + k + 1  1/2 -
 BRCS k  Перехід по перенесенню  Якщо C = 1, то PC = PC + k + 1  1/2 -
 BRCC k  Перехід, якщо немає переносу  Якщо C = 0, то PC = PC + k + 1  1/2 -
 BREQ k  Перехід за умовою «дорівнює»  Якщо Z = 1, то PC = PC + k + 1  1/2 -
 BRNE k  Перехід за умовою «не дорівнює»  Якщо Z = 0, то PC = PC + k + 1  1/2 -
 BRSH k  Перехід за умовою «вище або дорівнює»  Якщо C = 0, то PC = PC + k + 1  1/2 -
 BRLO k  Перехід за умовою «менше»  Якщо C = 1, то PC = PC + k + 1  1/2 -
 BRMI  Перехід за умовою «від'ємне значення»  Якщо N = 1, то PC = PC + k + 1  1/2 -
 BRPL  Перехід за умовою «позитивне значення»  Якщо N = 0, то PC = PC + k + 1  1/2 -
 BRGE  Перехід за умовою «більше або дорівнює» (числа зі знаком)  Якщо (NAV) = 0, то PC = PC + k + 1  1/2 -
 BRLT  Перехід за умовою «менше нуля» (числа зі знаком)  Якщо (NAV) = 1, то PC = PC + k + 1  1/2 -
 BRHS  Перехід по половинному переносу  Якщо H = 1, то PC = PC + k + 1  1/2 -
 BRHC  Перехід, якщо немає половинного перенесення  Якщо H = 0, то PC = PC + k + 1  1/2 -
 BRTS  Перехід, якщо прапор T встановлено  Якщо T = 1, то PC = PC + k + 1  1/2 -
 BRTC  Перехід, якщо прапор T скинутий  Якщо T = 0, то PC = PC + k + 1  1/2 -
 BRVS  Перехід по переповнення доп. коду  Якщо V = 1, то PC = PC + k + 1  1/2 -
 BRVC  Перехід, якщо немає переповнення доп. коду  Якщо V = 0, то PC = PC + k + 1  1/2 -
 BRID  Перехід, якщо переривання заборонені  Якщо I = 0, то PC = PC + k + 1  1/2 -
 BRIE  Перехід, якщо переривання дозволені  Якщо I = 1, то PC = PC + k + 1  1/2 -

2.3.6. Команди управління системою

У цю групу входять всього 3 команди:

· NOP - порожня команда;

· SLEEP - переклад мікроконтролера в режим зниженого енергоспоживання;

· WDR - скидання сторожового таймера.

Команди NOP і WDR виконуються за один машинний цикл, а команда SLEEP - за чотири машинних циклу.




 Загальні принципи організації і роботи мікропроцесорної системи |  Структура (архітектура) мікропроцесорної системи (МПС) |  структура МП |  Принцип робота МП |  Система команд восьмирозрядного мікропроцесора КР580ВМ80 |  Команда читання з пам'яті (ЗУ). В акумулятор записується інформація, яка зберігатися в комірці пам'яті, адреса якої вказана в другому і третьому байтах. |  Режими адресації в МП |  Rr - реєстрова пара (B-C, D-E, H-L; PSW-акумулятор і регістр ознак). |  Rr - реєстрова пара (B-C, D-E, H-L). |  Додавання за модулем два константи з акумулятором |

загрузка...
© um.co.ua - учбові матеріали та реферати