Контакти

Mcs 51 програмування на сі. Мікроконтролери MCS-51. Cтруктурная схема, АЛУ, пам'ять даних. Регістри спеціальних функцій

Архітектура сімейства MCS-51 в значній мірі зумовлюється її призначенням - побудова компактних і дешевих цифрових пристроїв. Всі функції мікроЕОМ реалізуються за допомогою єдиної мікросхеми. До складу сімейства MCS-51 входить цілий ряд мікросхем від найпростіших мікроконтролерів до досить складних. Мікроконтролери сімейства MCS-51 дозволяють виконувати як завдання управління різними пристроями, так і реалізовувати окремі вузли аналогової схеми. Всі мікросхеми цього сімейства працюють з однією і тією ж системою команд MCS-51 , Більшість з них виконується в однакових корпусах з збігається цоколевкой (Нумерація ніжок для корпусу). Це дозволяє використовувати для розробленого пристрою мікросхеми різних фірм - Maxim, Atmel, NXP і т.д. (Catalog..php? Page \u003d components_list & id \u003d 39 "\u003e с.м. Пошук по параметрам) без переробки принципової схеми пристрою та програми.

Малюнок 1. Структурна схема контролера I8751

Структурна схема контролера представлена \u200b\u200bна малюнку 1. і складається з наступних основних функціональних вузлів: блоку управління, арифметико-логічного пристрою, блоку таймерів / лічильників, блоку послідовного інтерфейсу і переривань, програмного лічильника, пам'яті даних і пам'яті програм. Двосторонній обмін здійснюється за допомогою внутрішньої 8-розрядної магістралі даних.

Розглянемо докладніше призначення кожного блоку. За такою схемою побудовані практично всі представники сімейства MCS-51. Різні мікросхеми цього сімейства відрізняються тільки регістрами спеціального призначення (в тому числі і кількістю портів). Система команд всіх контролерів сімейства MCS-51 містить 111 базових команд з форматом 1, 2 або 3 байти і не змінюється при переході від однієї мікросхеми до іншої. Це забезпечує прекрасну переносимість програм з однієї мікросхеми на іншу.

Блок управління і синхронізації

Блок управління і синхронізації (Timing and Control) призначений для вироблення синхронизирующих і керуючих сигналів, які забезпечують координацію спільної роботи блоків ОЕВМ в усіх допустимих режимах її работи.В складу блоку управління входять:

  • - пристрій формування тимчасових інтервалів,
  • - логіка введення-виведення,
  • - регістр команд,
  • - регістр управління споживанням електроенергії,
  • - дешифратор команд, логіка управління ЕОМ.

Пристрій формування тимчасових інтервалів призначене для формування і видачі внутрішніх синхросигналов фаз, тактів і циклів. Кількість машинних циклів визначає тривалість виконання команд. Практично всі команди ОЕВМ виконуються за один або два машинних цикли, крім команд множення і ділення, тривалість виконання яких становить чотири машинних циклу. Позначимо частоту генератора, що задає через F р Тоді тривалість машинного циклу дорівнює 12 / F г або становить 12 періодів сигналу, що задає. Логіка введення - виведення призначена для прийому і видачі сигналів, що забезпечують обмін інформацією з зовнішніми пристроями через порти введення виведення Р0-Р3.

регістр команд призначений для запису і зберігання 8-ми розрядного коду операції виконуваної команди. Код операції, за допомогою дешифратора команд і логіки управління ЕОМ, перетворюється в микропрограмму виконання команди.

Регістр управління споживанням (PCON) дозволяє зупиняти роботу мікроконтролера для зменшення споживання електроенергії та зменшення рівня перешкод від мікроконтролера. Ще більшого зменшення споживання електроенергії та зменшення перешкод можна домогтися, зупинивши задає генератор мікроконтролера. Цього можна досягти за допомогою перемикання біт регістра управління споживанням PCON. Для варіанту виготовлення по технології n-МОП (серія 1816 або іноземних мікросхем, в назві яких в середині відсутня літера "c") регістр управління споживанням PCON містить тільки один біт, керуючий швидкістю передачі послідовного порту SMOD, а біти управління споживанням електроенергії відсутні.

Арифметико-логічний пристрій (ALU) являє собою паралельне восьмирозрядному пристрій, що забезпечує виконання арифметичних і логічних операцій. АЛУ складається з:

  • - регістрів акумулятора, регістрів тимчасового зберігання TMP1 і TMP2,
  • - ПЗУ констант,
  • - сумматора,
  • - додаткового регістра (регістра В),
  • - акумулятора (ACC),
  • - регістра стану програм (PSW).

регістр акумулятор і регістри тимчасового зберігання - восьмирозрядні регістри, призначені для прийому і зберігання операндів на час виконання операцій над ними. Ці регістри програмно недоступні.

ПЗУ констант забезпечує вироблення коригуючого коду при двійковій-десятковому поданні даних, коду маски при бітових операціях і коду констант.

Паралельний восьмизарядний суматор являє собою комбінаційну схему з послідовним переносом, призначену для виконання арифметичних операцій додавання, віднімання і логічних операцій додавання, множення, неравнозначности і тотожності.

регістр B - восьмизарядний регістр, який використовується під час операцій множення і ділення. Для інших інструкцій він може розглядатися як додатковий надоперативності регістр.

акумулятор - восьмизарядний регістр, призначений для прийому і зберігання результату, отриманого при виконанні арифметико-логічних операцій або операцій зсуву

Блок послідовного інтерфейсу і переривань (ПІП) призначений для організації введення-виведення послідовних потоків інформації та організації системи переривання програм. До складу блоку входять:

  1. - буфер ПІП,
  2. - логіка управління,
  3. - регістр управління,
  4. - буфер передавача,
  5. - буфер приймача,
  6. - приймач послідовного порту,
  7. - регістр пріоритетів переривань,
  8. - регістр дозволу переривань,
  9. - логіка обробки прапорів переривань і схема вироблення вектора.

Лічильник команд (Program Counter) призначений для формування поточного 16-розрядної адреси внутрішньої пам'яті програм і 8/16-розрядної адреси зовнішньої пам'яті програм. До складу лічильника команд входять 16-розрядні буфер РС, регістр РС і схема інкремента (збільшення вмісту на 1).

Пам'ять даних (RAM) призначена для тимчасового зберігання інформації, використовуваної в процесі виконання програми.

Порти P0, P1, P2, P3 є квазідвунаправленние портами введення - виведення і призначені для забезпечення обміну інформацією ОЕВМ з зовнішніми пристроями, утворюючи 32 лінії вводу-виводу.

пристрій таймерів У базових моделях сімейства є два програмованих 16-бітових таймера / лічильника (T / C0 і T / C1), які можуть бути використані як в якості таймерів, так і в якості лічильників зовнішніх подій

Регістр стану програми (PSW) призначений для зберігання інформації про стан АЛУ при виконанні програми.

Пам'ять програм (EPROM) призначена для зберігання програм і являє собою постійний запам'ятовуючий пристрій (ПЗУ). У різних мікросхемах застосовуються масочний ПЗУ, стираються ультрафіолетовим випромінюванням або FLASH ПЗУ.

Регістр покажчика даних (DPTR) призначений для зберігання 16-розрядної адреси зовнішньої пам'яті даних або пам'яті програм.

Покажчик стека (SP) є восьмизарядний регістр, призначений для організації особливої \u200b\u200bобласті пам'яті даних (стека), в якій можна тимчасово зберегти будь-яку Чейкен пам'яті.



Мікроконтролери сімейства МСS-51 побудовані за гарвардської архітектурі, в якій пам'ять програм і пам'ять даних розділі-ни, мають власні адресні простори і способи доступу до них.

пам'ять програм


Максимальний обсяг пам'яті становить 64К байт, з них 4К, 8К, 16К або 32К байт пам'яті (табл.7.3.1) розташовуються на кристалі, решта об'єму - поза кристала.
При напрузі на висновку ЕА \u003d V CC использу-ється як внутрішня, так і зовнішня пам'ять, при ЕА \u003d V CC \u003d 0 - тільки зовнішня пам'ять.
У табл.7.3.1 наведені адреси звернення до пам'яті програмдля зазначений-них випадків.
Нижня область пам'яті програм відводиться для початку роботи мікроконт-роллера (стартовий адресу 0000h після скидання) і під обробку переривань (ад-Реса переривань розташовані з інтервалом 8 байт: 0003h, 000Bh, 0013h і т.д.).


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

● до зовнішньої пам'ятіпрограм виробляється сигнал ¯PSEN і завжди формиру-ється 16-розрядний адреса.
Молодший байт адреси передається через порт P0 в першій половині машинного циклу і фіксується по зрізу стрибає ALE в регістрі.
У другій половині циклу порт P0 використовується для введення в МК байта даних із зовнішньої пам'яті.
Старший байт адреси передається через порт P2 протягом всього часу звернення до пам'яті (ріс.7.1.11);

● до внутрішньої пам'ятісигнал читання не формується і використовуються цикли обміну по внутрішній шині мікроконтролера.

пам'ять даних

внутрішню пам'ятьданих можна умовно розділити на три блоки (табл.7.3.2).

Внутрішня пам'ять завжди адресується байтом, який забезпечує адреси-цію тільки до 256 осередків пам'яті.
Тому, як видно з табл.7.3.2, для адресації до верхніх 8-бітовим осередкам внутрішнього ОЗУ і регістрів спеціальних фун-кцій SFR, яка займає одне і те ж адресний простір, в командах викорис-ся різні способи адресації: непрямий і прямий.

Особливості організації нижній області внутрішнього ОЗУвідображені в табл.7.3.3.

Молодші 32 байти внутрішнього ОЗУ з адресами 00h.
1Fh згруповані в че-тире банку по вісім регістрів (R0.R7).
Наступні 16 байтів ОЗУ з адресами 20h.
2Fh представляють собою область пам'яті об'ємом 8 × 16 \u003d 128 біт, яка допускає звернення до кожного окремого біту.
Для вибору адреси регістра банку використовується його ім'я R0.
R7, для вибору банку - біти RS0, RS1 регістру слова стану PSW.

адреси бітів

адреси бітівнаведені в табл.7.3.3.

адресація здійснюється прямимспособом.

Список всіх регістрів спеціальних функцій SFR з їх адресами дан в табл.7.2.2.
Для наочності в табл.7.3.

4 приведена карта адрес ре-ГістраSFRрозглянутих мікросхем сімейства MCS-51.
Адреса SFR визна-ляется сукупністю чисел стовпчика і рядка в шістнадцятковій системі числення.

Наприклад, регістр CMOD має адресу D9h.

Для регістрів SFR, адреси яких закінчуються на 0h або 8h (вони виділені напівжирним шрифтом), крім байтовойдопускається побітоваадресація.

При цьому адреса біта, що займає в регістрі N-й розряд, визначається як XXh + \u200b\u200b0Nh, де XXh - адреса регістра SFR, N \u003d 0.7.
Бітові адреси в цій облас-ти мають значення від 80Н до FFH.
Наприклад, адреси бітів акумулятора АСС ле-жать в межах E0h-E7h.

зовнішня пам'ятьданих (об'ємом до 64 Кбайт) створюється додатковими мікросхемами пам'яті, що підключаються до МК.
Для роботи з зовнішньою пам'яттю даних використовуються спеціальні команди, тому адресні простори зовнішньої і внутрішньої пам'яті не перетинаються і, отже, обидва види пам'яті даних можна задіяти одночасно.

Для звернення до осередків зовн-ній пам'яті даних використовуються (ріс.7.1.8):
● команди з непрямою адресацією;
● сигнали читання ¯RD і записи ¯WR;
● порт P0 для передачі молодшого байта адреси і прийому / передачі байта даних;
● порт P2 для передачі старшого байта адреси.
Способи адресації.
В системі команд використовується:
● пряма, непряма, реєстрова, побічно-реєстрова, безпосередня і індексна адресація (непряма адресація по сумі базового та індексного-го регістрів) операндів-джерел;
● пряма, реєстрова і побічно-реєстрова адресація операндів призначення.
Поєднання зазначених способів (адресації) забезпечує 21 режим адресації.
У цій та в наведених нижче таблицях системи команд використані сліду-ющие позначення:

Пряма адресація.

При цьому способі адресації місце розташування байта або біта даних визначається 8-бітовим адресою другого (і третього) байта команди.
Пряма адресація використовується тільки для звернення до внутрішньої пам'яті даних (нижнім 128 байтам ОЗУ) і регістрів спеціальних функцій.

Реєстрова адресація.


Цей спосіб адресації забезпечує доступ до даних, які зберігаються в одному з восьми регістрів R0.
R7 поточного банку робочих регістрів.
Його також можна використовувати для звернення до регістрів A, В, АВ (здвоєному регістру), регістру-вказівником DPTR і прапору переносу С.
Адреса зазначених регістрів закладений в код операції, завдяки чому скорочує-ся число байт команди.

Побічно-реєстрова адресація.


У цьому випадку адреса даних збе-нітся в регістрі-покажчику, місце розташування якого визначено кодом операції.
Даний спосіб адресації використовується для звернення до зовнішнього ОЗУ і верхній половині внутрішнього ОЗУ.
Регістрами-покажчиками 8-бітних ад-ресов можуть служити регістри R0, R1 обраного банку робочих регістрів або покажчик стека SР, для 16-бітної адресації використовується тільки регістр указу-теля даних DPTR.

Безпосередня адресація.


При цьому способі адресації дані безпосередньо вказані в команді і знаходяться в другому (або в другому і тре-тьем) байтах команди, тобто
не вимагається адресація до пам'яті.
Наприклад, по ко-манде МОV A, # 50 в акумулятор A завантажується число 50.

Індексна адресація.


Цей спосіб є побічно-регі-стрів адресацію, при якому адреса байта даних визначається як сума вмісту базового (DPTR або РС) і індексного (А) регістрів.
спосіб ис-користується тільки для доступу до програмної пам'яті і тільки в режимі читання;він спрощує перегляд таблиць, зошитах в пам'яті програм.

Структура команд.

Довжина команди становить один (49 команд), два (45 команд) або три (17 команд) байта.
Перший байт команди завжди містить код опе-рації (КО), A другий і третій байти - адреси операндів або безпосередні значення даних.

Як операнди можуть бути використані окремі біти, тетради, байти і двухбайтное слова.
Можна виділити 13 типів команд, ко-торие наведені в табл.7.3.5:

● A, PC, SP, DPTR, Rn (n \u003d 0, 7) - акумулятор, лічильник команд, покажчик стека, регістр покажчика даних і регістр поточного банку;
● Rm (m \u003d 0, 1) - регістр поточного банку, який використовується при непрямій адре-сації;
● direct - 8-розрядний адреса прямо адресується операнда;
● bit - адреса прямо адресується біта;
● rel - відносний адреса переходу;
● addr11, addr16 - 11- і 16-розрядний абсолютний адреса переходу;
● # data8, # data16 - безпосередні дані (операнди) 8- і 16-розрядної довжини;
● A10, A9, A0 - окремі розряди 11-розрядної адреси;
● (.) - вміст комірки пам'яті за адресою, вказаною в дужках;
● СБ, МБ - старший і молодший байти 16-розрядної операнда.

Загальні відомості про систему команд.

Система команд забезпечує великі можливості обробки даних у вигляді біт, зошити, байтів, двобайтових слів, A також управління в режимі реального часу.
Для опису команд використовується мова макроассемблера ASM51. Синтаксис більшості команд складається з мнемонічного позначення (абревіатури) виконуваної операції, за яким слідують операнди.
За допомогою операндів вказуються різні способи адресації і типи даних.

Зокрема аббреві-атура MOV має 18 різних команд, призначених для обробки трьох ти-пов даних (бітів, байтів, адрес) в різних адресних просторах.
Набір команд має 42 мнемонічних позначення 111 типів команд для конкурують-зації 33 функцій МК.

З 111 команд 64 виконуються за один машинний цикл, 45 - за два циклу і лише дві команди (MUL - множення і DIV - розподіл) виконуються за 4 циклу. При частоті тактового генератора 12 МГц тривалість машинного циклу (12 тактів) становить 1 мкс. за функціональною ознакоюкоманди можна розбити на п'ять груп. Нижче наведено опис команд кожної групи, представлених у вигляді таблиць. Для компактності таблиць виділимо групу команд (табл.7.3.6), виконання яких впливає(Позначені знаком +) на стан прапоріврегістра слова стану PSW.

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

Команди пересилання можна розбити на окремих-ні підгрупи.
Команди пересилання і обміну даними між осередками внутрен-неї пам'яті (Табл.7.3.7).

Команди 1-16, мають мнемоніку MOV dest, src, призначені для пересиланнябайта або двох байтів (команда 16) даних з ис-точніка src в приймач dest, при цьому:
● для вказівки джерела(Src) використовується чотири способи адресації: регист-ровий (команди 2-4, 6, 8), прямий (команди 1, 7, 9, 11), непрямий (команди 5, 10) і безпосередній (команди 12-16);
● для вказівки приймача(Dest) використовується три способи: регістровий (команди 1, 3 ... 5, 9, 12, 14, 16), прямий (команди 2, 7, 8, 10, 13), непрямий (команди 6, 11, 15).

Команди 17-20 забезпечують обмінінформацією між двома осередками внутрішньої пам'яті даних (або двосторонню пересилання).
При виконанні ко-манд ХСН відбувається обмін байтами, A команди XCHD - молодшими тетрадами байтових операндів.

Одним з осередків завжди є акумулятор A. В якості іншої комірки при обміні байтами використовується один з регістрів Rn поточного банку, A також прямо або побічно адресується осередок внутрішньої пам'яті; при обміні тетрадами - тільки побічно адресується осередок внутрішньої пам'яті.

Так як у всіх МК стек розміщується у внутрішньому ОЗП, в цю ж підгрупу включені команди(20, 21) звернення до стекаPUSH src, POP dest.
Ці команди ис-товують тільки прямий спосіб адресації, записуючи байт в стек або восстанав-ливая його з стека.
Слід мати на увазі, що в тих МК, у яких в ОЗУ відсутність про-обхідних верхні 128 байт, збільшення стека за межі 128 байт веде до втрати даних.

Команди пересилання даних між внутрішньою і зовнішньою па-мятью даних (Табл.7.3.8).

Ці команди використовують тільки непряму адре-сацію, при цьому однобайтном адреса може розташовуватися в Р0 або R1 поточного банку регістрів, A двухбайтное адреса - в регістрі-покажчику даних DРТR.
При будь-якому доступі до зовнішньої пам'яті роль приймача або джерела операндів у внутрішній пам'яті грає акумулятор А.

Команди пересилання даних з пам'яті програм (Табл.7.3.9).

Ці команди призначені для читання таблиць з програмної пам'яті.

Команда MOVC A, @ А + DPTR використовується для звернення до таблиці з числом входів від 0 до 255.

Номер необхідного входу в таблицю завантажується в акумулятор, A регістр DPTR встановлюється на точку початку таблиці. Відмінною особливістю іншої команди є те, що в якості покажчика бази використовується про- програмний лічильник PC і звернення до таблиці проводиться з підпрограми. Спочатку номер необхідної точки входу завантажується в акумулятор, потім викликаючи-ється підпрограма з командою MOVC A, @ А + PC. Таблиця може мати 255 вхо-дів з номерами від 1 до 255, так як 0 використовується для адреси команди RET ви-ходу з підпрограми.

Команди арифметичної обробки даних. Всі арифметичні коман-ди виконуються над беззнаковими цілими числами. Операції над двома операндами (Табл.7.3.10). В операціях склалася-няADD, складання з урахуванням перенесенняADDC і вирахування з урахуванням позикиSUBB:

● джерелом одного 8-бітного операнда і приймачем результату служить ак-кумулятор;
● джерелом іншого операнда - або один з робочих регістрів Rn (n \u003d 0-7) поточного банки, або прямо direct або побічно @Rm (m \u003d 0, 1) адресується осередок пам'яті ОЗУ, або безпосередні дані #data.

операції множенняMUL і діленняDIV виконуються над вмістом регі-стрів A і В. При множенні старші 8 розрядів результату записуються в регістр В, молодші 8 розрядів - в регістр A.
Якщо твір більше 255, встановлюється прапор переповнення OV; прапор переносу С завжди скидається. Команда DIV виконує ділення 8-бітного операнда акумулятора A на 8-бітний операнд регістра В.
При розподілі приватне (старші розряди) записується в ре-Гістра в A, залишок (молодші розряди) - в B. Прапори перенесення C і переповнення OV скидаються.
При спробі поділу на 0 встановлюється прапор переповнення OV. Операція ділення частіше використовується для зрушень і перетворення підстав чисел.

При розподілі двійкового числа на 2 N відбувається його зрушення на N біт вліво.
Зайві біти переносяться в регістр В.

Операції над однобайтном операндами(Табл.7.3.11).

Команда DA використовується для виконання двійковій-десяткових операцій. Команди INC, DEC дозволяють відповідно збільшити або зменшити на одиницю вміст комірки пам'яті.
Вони застосовні до вмісту аккумулято-ра A, одного з робітників регістрів Rn або комірки пам'яті, що адресується як пря-мим, так і непрямим способом.
Операція збільшення на одиницю може бути застосована також до вмісту 16-розрядного регістра-покажчика DPTR.

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

двомісні операції

(Табл.7.3.12).

Команди AML, ORL, XRL дозволяють виконати три двомісні логічні операції над 8-бітними операндами: ANL - логічне множення (AND), ORL - логічне додавання (OR), XRL - виключає АБО (XOR).
Операції виконуються над окремими бітами операндів. Джерелом одного з операндів і одночасним-аме приймачем результату служить або акумулятор (А), або прямо адресою-ється осередок пам'яті (direct).
Для джерела іншого операнда використовується регі-стрів, прямий, непрямий або безпосередній спосіб адресації.

одномісні операції

(Табл.7.3.13).
До складу групи входить також ряд одномісних операцій над вмістом акумулятора A: роботи з очистки (CLR), логічного доповнення або інверсії (CPL), циклічного та розширеного циклічного зрушень на 1 біт вправо (RL, RLC) і вліво (RR, RRC), обміну тетрад або циклічного зсуву байта на 4 розряду (SWAP), A також порожня операція (NOP), в результаті якої стан всіх регістрів МК (за винятком про- граммного лічильника) залишається незмінним.

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

Команди безумовного переходу

(Табл.7.3.14).

Команди 1-3 відрізняються лише форматом адреси призначення.

Ко-манда LJMP (L - Long) виконує «довгий» безумовний перехід за вказаною адресою addr16, завантажуючи лічильник PC другим і третім байтами команди.
Команда забезпечує перехід в будь-яку точку 64К байтного адресного простору.

Ко-манда AJMP (А - Absolute) забезпечує «абсолютний» перехід за адресою всередині 2К байтной сторінки, початкова адреса якої задається п'ятьма старшими разря-дами програмного лічильника PC (спочатку вміст PC збільшується на 2).

Команда SJMP (S - Short) дозволяє здійснити «короткий» безумовний перехід за адресою, який обчислюється складанням зміщення rel зі знаком в другому байті команди з вмістом лічильника PC, попередньо збільшеного на 2.

Адреса переходу знаходиться в межах -128 + 127 байт щодо адре-са команди.
Для переходу в будь-яку іншу точку 64-кілобайтний адресного про-простору може бути використана також команда 4 з непрямої @ A + DPTR адре-саціей.
У цьому випадку вміст A інтерпретується як ціле без знака.

Порожня операція (NOP), в результаті якої стан всіх регістрів мік-ропроцессора (за винятком програмного лічильника) залишається незмінним.

Команди умовного переходу

(Табл.7.3.15).

За допомогою команд JZ і JNZ здійснюється перехід, якщо вміст акумулятора відповідно дорівнює або не дорівнює нулю.
Адреса переходу обчислюється шляхом додавання відносного знакового зміщення rel з вмістом лічильника команд PC після додавання до нього числа 2 (довжини команди в байтах).

Вміст акумулятора залишається-змінити.
Команди на прапори не впливають.

Команди CJNE (3-6) служать для реалізації умовного переходу по результату порівняння двох 8-розрядних операндів, розташування яких зазначено в коман-дах.
Якщо їх значення не рівні, здійснюється перехід.

Адреса переходу обчислюва-ляется складанням зміщення rel з вмістом лічильника PC, попередньо збіль-личен на 3.
В іншому випадку виконується наступна команда.

У графі Алгоритм показано вплив значень порівнюваних 8-розрядних операндів на прапор переносу С.
Команди DJNZ (7, призначені для організації програмних циклів.

Регістр Rn або прямо (direct) адресується осередок є лічильник по-вторение циклу, A зміщення rel (у другому і третьому байтах команд) - відноси-них адреса переходу до початку циклу.
При виконанні команд вміст лічильника зменшується на одиницю і перевіряється на нуль.
Якщо вміст рахунок-чика не дорівнює нулю, здійснюється перехід на початок циклу.
В іншому слу-чаї виконується наступна команда.

Адреса переходу обчислюється складанням зміщення з вмістом лічильника, попередньо збільшеним на довжину ко-мих фахівців (на 2 або 3).
На прапори команди не впливають.

Команди виклику підпрограм і повернення з програм

(Табл.7.3.16).
Команди LCALL «довгий виклик» і ACALL «абсолютний виклик» здійснюють безумовний виклик підпрограми, розміщеної за вказаною адресою.

Відмінність цих команд від розглянутих вище команд безумовного переходу полягає в тому, що вони зберігають в стеку адресу повернення (вміст лічильника) в основ-ву програму.
Команда повернення з підпрограми RET відновлює з стека значення вмісту лічильника команд, A команда RETI крім цього дозволяє прерій-вання обслуговуючого рівня.

У командах передачі управління широко використовується відносна адреси-ція, яка підтримує переміщувані програмні модулі.
Як відно-вальну адреси виступає 8-розрядний зсув rel зі знаком, забезпечую-ний розгалуження від поточного положення лічильника PC в обидві сторони на ± 127 байт.

Для переходу в будь-яку іншу точку 64К-байтного адресного простору може бути використаний або прямий адресу addr16, або непрямий @ A + DPTR адресу.
В останньому випадку вміст A інтерпретується як ціле без знака.

Вари-ант короткої прямої адресації addr11 всередині 2К-байтной поточної сторінки вве-ден для сумісності з архітектурою МК48.

Всі ці типи адресації можуть бути застосовані тільки до операції переходу, A для операції виклику допустимі тільки прямий addr16 і внутрішній addr11 способи адресації.
У всіх умовних операціях може використовуватися тільки відносна адресація.

Коли МК51 пізнає запит на переривання, він генерує одну з команд типу LCALL addr16, що автоматично забезпечує запам'ятовування адреси повернення в стеку.
Однак на відміну від МК48 в МК51 немає автоматично зберігається ін-формації про стан.

При цьому логіка переривань перестає спрацьовувати на запити того рівня, який був прийнятий до обслуговування.
Для зниження рівня переривання служить команда повернення з переривання RETI, яка крім опе-рації, еквівалентній RET, включає операцію дозволу переривання даного рівня.
До типових умовним операціями МК51 відносяться також операції JZ, JNZ.
Од-нако з'явилася нова операція «Порівняти і перейти» CJNE.

З цієї команді операнд спочатку порівнюється за правилами вирахування цілих чисел з константою і відповідно до результату порівняння виставляється прапор CY Потім в разі розбіжності з константою виконується розгалуження. Порівнюючи акумулятор, ре-Гістра або елемент пам'яті з послідовністю констант, отримуємо зручний спосіб перевірки на збіги, наприклад з метою виявлення особливих випадків.

По суті справи команда CJNE є елементом оператора мов високого рів-ня типу CASE.

Подальший розвиток отримала команда DJNZ.
Тепер програміст в якості лічильника може використовувати не тільки один з робітників регістрів Rn, а й лю-буя осередок пам'яті DSEG.

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

Група складається з 12 команд, що дозволяють ви-конувати операції над одним або двома бітами (скидання, установку, інверсію біта, A також логічні І і АБО), і 5 команд, призначених для реалізації умовних переходів (табл.7.3.17).

Команди забезпечують пряму адресацію 128 бітів, розташованих в шест-надцяти осередках внутрішнього ОЗУ з адресами 20h.
2Fh (табл.7.3.3), і 128 бітів, розташованих в регістрах спеціального призначення, адреси яких кратні восьми (виділені в табл.7.3.4 напівжирним шрифтом).

При виконанні опера-цій над двома однорозрядного операндами в якості логічного аккумулято-ра використовується тригер регістра PSW, який зберігає прапор переносу C (табл.7.1.2).

Команди MOV (1,2) здійснюють пересилкубіта з однієї прямо адресою-емой бітової комірки внутрішнього ОЗУ в тригер C або в зворотному напрямку.
Команди CRL (3, 4), SETB (5, 6) відповідно скидаютьв нуль або встанов-ваютв одиницю прапор переносу C або вказаний біт.
За допомогою команд CPL, ANL, ORL (7-12) виконуються логічні операції інверсії, додавання і множення.

До групи входять також команди (13-17) для реалізації операцій умовних переходів з відносним 8-розрядних зміщенням rel.
Переходи можуть бути реалізовані як при встановленому бите або прапорі перенесення (команди 13, 16), так і при скинутому (команди 14, 17).

Команда JBC крім переходу по обчислюва-ється адресою при виконанні умови (біт) \u003d 1 виробляє скидання цього біта в нульовий стан.
При виконанні команд умовних переходів адреса перехо-да обчислюється після додавання до вмісту лічильника чисел 3 або 2 (відпрацьовано-лишнього число байт в команді).

Система команд ОМЕВМ надає великі можливості обробки даних, забезпечує реалізацію логічних, арифметичних операцій, а також управління у режимі реаліного часу. Реалізована побітова, потетрадного (4 біта), побайтовая (8 біт) і 16-розрядна обробка даних. БІС сімейства MCS-51 - 8-розрядна ОМЕВМ: ПЗУ, ОЗУ, регістри спеціального призначення, АЛУ і зовнішні шини мають байтовую організацію. Двобайтові дані використовуються тільки регістром-покажчиком (DPTR) і лічильником команд (РС). Слід зазначити, що регістр-покажчик даних може бути використаний як багатобайтових регістр DPTR або як два однобайтових регістра спеціального призначення DPH і DPL. Лічильник команд завжди використовується як багатобайтових регістр. Набір команд ОМЕВМ має 42 мнемонічних позначення команд для конкретизації 33 функцій цієї системи. Синтаксис більшості команд ассемблерного мови складається з мнемонічного позначення функції, всед за яким йдуть операнди, що вказують методи адресації і типи даних. Різні типи даних або режими адресації визначаються встановленими операндами, а не змінами мнемонічних позначень. Систему команд умовно можна розбити на п'ять груп:
  • Арифметичні команди;
  • Логічні команди;
  • Команди передачі даних;
  • Команди бітового процесора;
  • Команди розгалуження та передачі управління.
Існують наступні типи адресації операндів-джерел:
  • реєстрова адресація
  • пряма адресація
  • Побічно-реєстрова адресація
  • безпосередня адресація
  • Побічно-реєстрова адресація по сумі базового та індексного регістрів
Арифметичні команди У наборі команд є такі арифметичні операції: додавання, додавання з урахуванням прапора перенесення, віднімання з позичкою, інкременірованіе, декременірованіе, порівняння, десяткова корекція, множення і ділення. В АЛП виробляються дії над цілими числами без знака. У двохоперандних операціях: додавання (ADD), складання з перенесенням (ADDC) і віднімання з позичкою (SUBB) акумулятор є першим операндом і приймає результат операції. Другим операндом може бути робочий регістр обраного банку робочих регістрів, регістр внутрішньої пам'яті даних з побічно-реєстрової та прямою адресацією або байт безпосередніх даних. Зазначені операції впливають на прапори: пеполненія, перенесення, проміжного переносу і прапор парності в слові стану процесора (PSW). Використання розряду переносу дозволяє багаторазово підвищити точність при операціях додавання (ADDC) і віднімання (SUBB). Виконання операцій додавання і віднімання з урахуванням знака може бути здійснено за допомогою програмного керування прапором переповнення (OV) регістра PSW. Прапор проміжного переносу (АС) забезпечує виконання арифметичних операцій в двійковій-десятковому коді. Операції інкременірованія і декременірованія на прапори не впливають. Операції порівняння не впливають ні на операнд призначення, ні на операнд джерела, але вони впливають на прапори перенесення. Існують три арифметичні операції, які виконуються тільки на акумуляторі: дві команди перевірки вмісту акумулятора А (JZ, JNZ), і команда десяткової корекції при додаванні двійково-десяткових кодів. При операції множення вміст акумулятора А множиться на вміст регістра В і результат розміщується таким чином: молодший байт в регістрі В, старший - в регістрі А. В разі виконання операції ділення ціле від ділення поміщається в акумулятор А, залишок від ділення - в регістр В. Логічні команди з байтовими змінними Система команд дозволяє реалізувати логічні операції: "і", "АБО", "Що виключає АБО" на регістрі-акумуляторі (А) і байті-джерелі. Другим операндом (байтом-джерелом) при цьому може бути робочий регістр у вибраному банку робочих регістрів; регістр внутрішнього ОЗУ, що адресується за допомогою побічно-реєстрової адресації; прямоадресуемие осередку внутрішнього ОЗУ і регістри спеціального призначення; безпосередня величина. Зазначені логічні операції можуть бути реалізовані на будь-якому прямоадресуемом регістрі внутрішнього ОЗУ або регістрі спеціального призначення з використанням в якості другого операнда вмісту аккумлятора А чи безпосередніх даних. Існують логічні операції, які виконуються тільки на акумуляторі: скидання і інвертування всіх восьми розрядів А; циклічний зсув вліво і впрво; циклічний зсув вліво і вправо з урахуванням прапора перенесення; обмін місцями старшої і молодшої тетрад (Нібло) всередині акумулятора. Команди передачі даних Таблиці символів (кодів), зашиті в ПЗУ програми можуть бути обрані за допомогою команд передачі даних з використанням непрямої адресації. Байт константи може бути переданий в акумулятор з комірки пам'яті програм, що адресується сумою базового регістра (PC або DPTR) і індексного регістра (вмісту А). Це забезпечує, наприклад, зручний засіб реалізації алгоритму перетворення коду ASCII в семисегментний код. Будь-яка осередок 256-байтового блоку зовнішнього ОЗУ даних може бути обрана з використанням побічно-реєстрової адресації через регістри покажчики R0 або R1 (обраного банку робочих регістрів). Осередок всередині адресного простору 64 Кбайт зовнішнього ОЗУ також може бути обрана з використанням побічно-реєстрової адресації через регістр-покажчик даних DPTR. Команди передачі між прямоадресуемимі регістрами дозволяють заносити величину з порту в клітинку внутрішнього ОЗУ без використання робочих регістрів або акумулятора. У логічному процесорі будь прямоадресуемий біт може бути поміщений в біт перенесення і навпаки. Вміст акумулятора може бути обміняно з вмістом робочих регістрів (обраного банку) і з вмістом адресованих за допомогою побічно-реєстрової адресації осередків внутрішнього ОЗУ, а також з вмістом прямо-адресованих осередків внутрішнього ОЗУ і з вмістом регістрів спеціального призначення. Молодший Нібл (розряди 3-0) вмісту акумулятора, можна обміняти з молодшим Нібло вмісту осередків внутрішнього ОЗУ, які обирають за допомогою побічно-реєстрової адресації. Команди бітового процесора Бітовий процесор є частиною архітектури МК сімейства MCS51 і його можна розглядати як незалежний процесор побітової обробки. Бітовий процесор виконує набір команд, має своє побитово-адресується ОЗУ і свій введення-виведення. Команди, які оперують з битами, забезпечують пряму адресацію 128 бітів (0-127) в шістнадцяти осередках внутрішнього ОЗУ (осередки з адресами 20Н-2FH) і пряму побітову адресацію регістрів спеціального призначення, адреси яких кратні восьми. Кожен з окремо адресованих бітів може бути встановлений в "1", скинутий в "0", инвертирован, перевірений. Можуть бути реалізовані переходи: якщо біт встановлений; якщо біт не встановлений; перехід, якщо біт встановлений, зі скиданням цього біта; біт може бути перезаписан в (з) розряду переносу. Між будь-яким прямоадресуемим бітом і прапором перенесення можуть бути зроблені логічні операції "І", "АБО", де результат заноситься в розряд прапора перенесення. Команди побітової обробки забезпечують реалізацію складних функцій комбінаторної логіки і оптимізацію програм користувача. Команди розгалуження та передачі управління Адресний простір пам'яті програм не має сторінкової організації, що дозволяє вільно перемщать фрагменти програми всередині адресного простору, при цьому не потрібно перезасилка (зміна) номера сторінки. Переміщення окремих фрагментів програми забезпечує можливість використання переміщуваних програмних модулів різними програмами. Команди 16-розрядних переходів і викликів підпрограм дозволяють здійснювати перехід в будь-яку точку адресного простору пам'яті програм обсягом 64 Кбайт. Команди 11-розрядних переходів і викликів підпрограм забезпечують переходи всередині програмного модуля ємністю 2 Кбайт. В системі команд є команди умовних і безумовних переходів щодо початкової адреси слеующей програми в межах від (РС) -128 до (ЗС) +127. Команди перевірки окремих розрядів дозволяють здійснювати умовні переходи станом "0" або "1" прямоадресуемих бітів. Команди перевірки вмісту акумулятора (на нуль / НЕ нуль) дозволяють здійснювати умовні переходи по вмісту А. Побічно-реєстрові переходи в системі команд забезпечують розгалуження щодо базового регістра (вмісту DPTR або РС) зі зміщенням, що знаходяться в акумуляторі А. Регістрова адресація Регістрова адресація використовується для звернення до восьми робочих регістрів обраного банку робочих регістрів (ці ж регістри можуть бути обрані за допомогою прямої адресації і побічно-реєстрової адресації як звичайні комірки внутрішнього ОЗУ даних). Реєстрова адресація використовується для звернення до регістрів А, В, АВ (здвоєному регістру), DPTR і до прапора перенесення С. Використання реєстрової адресації дозволяє отримувати багатобайтових еквівалент трехбайтових команд прямої адресації. Пряма адресація Пряма байтовая адресація використовується для звертання до комірок внутрішньої пам'яті (ОЗУ) даних (0-127) і до регістрів спеціального призначення. Пряма побітова адресація використовується для звернення до окремо адресуються 128 бітам, розташованим в осередках з адресами 20H-2FH і до окремо адресуються бітам регістрів спеціального призначення. Старший біт байта коду прямого Адрема вибирає одну з двох груп окремо адремуемих бітів, розташованих в ОЗУ або регістрах спеціального призначення. Прямо адресовані біти з адресами 0-127 (00H-7FH) розташовані в блоці з 16 осередків внутрішнього ОЗУ, що мають адреси 20H-2FH. Зазначені осередку послідовно пронумеровані від молодшого біта молодшого байта до старшого біта старшого байта. Окремо адресовані біти в регістрах спеціального призначення пронумеровані в такий спосіб: п'ять старших розрядів адреси збігаються з п'ятьма старшими розрядами адреси самого регістру, а три молодших - визначають місце розташування окремого ібта всередині регістра. Побічно-реєстрова адресація побічно-реєстрова адресація використовується для звертання до комірок внутренннего ОЗУ даних. Як регістрів-покажчиків використовується регістри R10, R1 обраного банку регістрів. У командах PUSH і POP використовується вміст покажчика стека (SP). Побічно-реєстрова адресація використовується також для звернення до зовнішньої пам'яті даних. В цьому випадку за допомогою регістрів-покажчиків R0 і R1 (обраного банку робочих регістрів) вибирається осередок з блоку в 256 байт зовнішньої пам'яті даних. Номер блоку попередньо задається вмістом порту Р2. 16-розрядний покажчик даних (DPTR) може бути використаний для звернення до будь-якому осередку адресного простору зовнішньої пам'яті даних об'ємом до 64 Кбайт. Безпосередня адресація Безпосередня адресація дозволяє вибрати з адресного простору пам'яті програм константи, явно зазначені в команді. Побічно-реєстрова адресація по сумі базового та індексного регістрів побічно-реєстрова адресація по сумі: базовий регістр плюс індексний регістр (вміст акумулятора А) спрощує перегляд таблиць, зошитах в пам'яті програм. Будь-байт з таблиці може бути обраний за адресою, що визначається сумою вмісту DPTR або РС і вмісту А. Таблиця позначень і символів, які використовуються в системі команд
Позначення, символ призначення
А акумулятор
Rn Регістри поточного обраного банку регістрів
r Номер завантажується регістра, указанног в команді
direct Прямо адресується 8-бітовий внутрішній адресу осередок даних, який може бути осередком внутрішнього ОЗУ даних (0-127) або SFR (128-255)
@Rr Побічно адресується 8-бітова осередок внутрішнього ОЗУ даних
data8 8-бітове пряме і ве, що ходить в КОП
dataH Старші біти (15-8) безпосередніх 16-бітових даних
dataL Молодші біти (7-0) безпосередніх 16-бітових даних
addr11 11-бітову адресу призначення
addrL Молодші біти адреси призначення
disp8 8-бітовий байт зміщення зі знак м
bit Біт з прямою адресацією, адреса якого містить КОП, що знаходиться у внутрішньому ОЗП даних або SFR
a15, a14 ... a0 Біти адреси призначення
(Х) Вміст елемента Х
((Х)) Вміст за адресою, що зберігається в елементі Х
(Х) [M] Розряд М елемента Х
+ - * / AND OR XOR / X Операції: складання віднімання множення ділення логічного множення (операція І) логічного складання (операція АБО) складання по модулю 2 (виключає АБО) інверсія елемента Х

Мнемонічні позначення функцій однозначно пов'язані з конкретними комбінаціями способів адресації і типами даних. Всього в системі команд можливо 111 таких поєднань. У таблиці наведено перелік команд, впорядкованих за алфавітом.

мнемоніка функція прапори
команда ACALL Абсолютний виклик підпрограми
Команда ADD A,<байт-источник> додавання AC, C, OV
Команда ADDC A,<байт-источник> Додавання з переносом AC, C, OV
команда AJMP абсолютний перехід
команда ANL<байт-назначения>, <байт-источникa> Логічне "І"
Команда ANL C,<байт-источникa> Логічне "І" для змінних-бітів
команда CJNE<байт-назначения>, <байт-источник>, <смещение> Порівняння і перехід, якщо не дорівнює C
Команда CLR A Скидання акумулятора
команда CLR Скидання біта C, bit
Команда CPL A Інверсія ак умуля ора
команда CPL інверсія біта C, bit
Команда DA A Десяткова корекція акумулятора для розкладання AC, C
команда DEC<байт> декремент
Команда DIV AB розподіл C, OV
команда DJNZ<байт>, <смещение> Декремент і перехід, якщо не дорівнює нулю
команда INC<байт> інкремент
Команда INC DPTR Інкремент покажчика даних
команда JB , Перехід, якщо біт встановлений
команда JBC , Перехід, якщо біт встановлений і скидання цього біта
команда JC Перехід, якщо перенесення встановлений
Команда JMP @ A + DPTR непрямий перехід
команда JNB , Перехід, якщо біт не встановлений
команда JNC Перехід, якщо перенос не встановлено
команда JNZ Перехід, якщо вміст акумулятора не дорівнює нулю
команда JZ Перехід, якщо вміст акумулятора дорівнює 0
команда LCALL довгий виклик
команда LJMP довгий перехід
команда MOV<байт-назначения>, <байт-источника> Переслати змінну-байт
команда MOV<бит-назначения>, <бит-источника> Переслати біт даних C
Команда MOV DPTR, # data16 Завантажити покажчик даних 16-бітової константою
Команда MOVC A, @ A + ( ) Переслати байт з пам'яті програм
команда MOVX<байт приемника>, <байт источника> Переслати в зовнішню пам'ять (з зовнішньої пам'яті) даних
Команда MUL AB множення C, OV
команда NOP ні операції PC
команда ORL<байт-назначения>, <байт-источникa> Логічне "АБО" для перемнние-байтів
Команда ORL C,<бит источникa> Логічне "АБО" для змінних-бітів C
команда POP Читання з стека
команда PUSH Запис в стек
команда RET Повернення з підпрограми
команда RETI Повернення з переривання
Команда RL A Зрушення вмісту акумулятора вліво
Команда RLC A Зрушення вмісту акумулятора вліво через прапор перенесення
Команда RR A Зрушення вмісту акумулятора вправо
Команда RRC A Зрушення вмісту акумулятора вправо через прапор перенесення C
команда SETB встановити біт C
команда SJMP<метка> короткий перехід
Команда SUBB A,<байт источника> Віднімання з позичкою AC, C, OV
Команда SWAP A Обмін тетрадами всередині акумулятора
Команда XCH A,<байт> Обмін вмісту акумулятора зі змінною-байтом
Команда XCHD A, @ R1 обмін тетрадой
команда XRL<байт-назначения>, <байт-источникa> Логічне "Що виключає АБО" для перемнние-байтів

ПЛАН ЛЕКЦІЇ

1. Введення

2. Арифметичні і логічні інструкції

3. Команди передачі даних

4. Булеві операції

5. Інструкції переходів

1. Введення

система команд MCS-51 підтримує єдиний набір інструкцій, який призначений для виконання 8-бітових алгоритмів управління виконавчими пристроями. Існує можливість використання швидких методів адресації до внутрішнього ОЗУ, здійснення бітових операцій над невеликими структурами даних. Є розгорнута система адресації однобітових змінних як самостійного типу даних, що дозволяє використовувати окремі біти в логічних і керуючих командах булевої алгебри.

режими адресації : Набір команд MCS-51 підтримує такі режими адресації. пряма адресація: Операнд визначається 8-бітовим адресою в інструкції. Пряма адресація використовується тільки для молодшої половини внутрішньої пам'яті даних і регістрів SFR. непряма адресація: Інструкція адресує регістр, що містить адресу операнда. Даний вид адресації використовується для зовнішнього і внутрішнього ОЗУ. Для вказівки 8-бітових адрес можуть використовуватися регістри R0 і R1 обраного реєстрового банку або покажчик стека SP. Для 16-бітової адресації використовується тільки регістр покажчика даних DPTR.

реєстрові інструкції : регістри R0-R7 поточного реєстрового банку можуть бути адресовані через конкретні інструкції, що містять 3-бітове поле, яке вказує номер регістра в самій інструкції. В цьому випадку відповідне поле адреси в команді відсутня. Операції з використанням спеціальних регістрів: Деякі інструкції використовують індивідуальні регістри (наприклад, операції з акумулятором, DPTR, і т.д.). В даному випадку адреса операнда взагалі не вказується в команді. Він зумовлюється кодом операції.

безпосередні константи : константа може перебувати прямо в команді за кодом операції.

індексна адресація : Індексна адресація може використовуватися тільки для доступу до програмної пам'яті і тільки в режимі читання. В цьому режимі здійснюється перегляд таблиць в пам'яті програм. 16-бітовий регістр ( DPTR або програмний лічильник) вказує базову адресу необхідної таблиці, а акумулятор вказує на точку входу в неї.

набір команд має 42 мнемонічних позначення команд для конкретизації 33 функцій цієї системи. Синтаксис більшості команд ассемблерного мови складається з мнемонічного позначення функції, слідом за яким йдуть операнди, що вказують методи адресації і типи даних. Різні типи даних або режими адресації визначаються встановленими операндами, а не змінами мнемонічних позначень.

Систему команд умовно можна розбити на п'ять груп: арифметичні команди; логічні команди; команди передачі даних; команди бітового процесора; команди розгалуження і передачі управління. Позначення і символи, які використовуються в системі команд, наведені далі.

Таблиця. Позначення і символи, які використовуються в системі команд

Позначення, символ

призначення

акумулятор

Регістри поточного обраного банку регістрів

Номер завантажується регістра, зазначеного в команді

direct

Прямо адресується 8-бітовий внутрішній адресу осередки даних, який може бути осередком внутрішнього ОЗУ даних (0-127) або регістром спеціальних функцій SFR (128-255)

Побічно адресується 8-бітова осередок внутрішнього ОЗУ даних

8-бітове безпосереднє дане, що входить в код операції (КОП)

dataH

Старші біти (15-8) безпосередніх 16-бітових даних

dataL

Молодші біти (7-0) безпосередніх 16-бітових даних

11-бітову адресу призначення

addrL

Молодші біти адреси призначення

8-бітовий байт зміщення зі знаком

Біт з прямою адресацією, адреса якого містить КОП, що знаходиться у внутрішньому ОЗП даних або регістрі спеціальних функцій SFR

a15, a14 ... a0

Біти адреси призначення

Вміст елемента Х

Вміст за адресою, що зберігається в елементі Х

Розряд М елемента Х


+

*
AND
OR
XOR
/ X

операції:
складання
вирахування
множення
ділення
логічного множення (операція І)
логічного додавання (операція АБО)
складання по модулю 2 (виключає АБО)
інверсія елемента Х

Мнемонічні позначення функцій однозначно пов'язані з конкретними комбінаціями способів адресації і типами даних. Всього в системі команд можливо 111 таких поєднань.

2. Арифметичні і логічні інструкції

Як п ример арифметичної команди, Операція додавання може бути виконана однією з нижченаведених команд.

ADDA,7 F 16 - додати до вмісту регістра А число 7F 16 і результат зберегти в регістрі А;

ADDA,@ R0 - додати до вмісту регістра А число, адреса якого (@ – commercial at ) Зберігається в регістріR 0 (непряма адресація), і результат зберегти в регістрі А;

ADD A, R7 - додати до вмісту регістра А вміст регістраR 7 і результат зберегти в регістрі А;

ADD A, # 127 - додати до вмісту регістра А число, адреса осередку зберігання якого 127 ( # - символ номера), і результат зберегти в регис т- ре А.

Всі арифметичні інструкції виконуються за один машинний цикл за винятком команди INC DPTR (Зміщення покажчика даних DPTR на наступний байт), що вимагає два машинних цикли, а також операцій множення і ділення, виконуваних за 4 машинних циклу. Будь-байт у внутрішній пам'яті даних може бути інкрементіровать і декрементірован без використання акумулятора.

Інструкція MUL AB виробляє множення (multiplication - множення) даних в акумуляторі на дані, що знаходяться в регістрі B, поміщаючи твір в регістри A (молодша половина) і B (старша половина).

Інструкція DIV AB ділить (division - поділ) вміст акумулятора на значення в регістрі B, залишаючи решту в B, а приватне - в акумуляторі.

Інструкція DA A призначена для двійковій-десяткових арифметичних операцій (арифметичні операції над числами, представленими в двійковій-десятковому коді). Вона не робить перетворення двійкового числа в двійковій-десяткове, А лише забезпечує правильний результат при складанні двох двійковій-десяткових чисел.

приклад логічної команди: Операція логічного І може бути виконана однією з таких команд:

ANLA,7 F 16 - логічне множення вмісту регістра А на число 7F 16 і результат зберігається в регістрі А;

ANLA,@ R1 - логічне множення вмісту регістра А на число, адреса якого зберігається в регістріR 1 (непряма адресація), і результат зберегти в регістрі А;

ANL A, R6 - логічне множення вмісту регістра А на вміст регістраR 6, і результат зберегти в регістрі А;

ANL A, # 53 - логічне множення вмісту регістра А на число, адреса осередку зберігання якого 53 16, і результат зберегти в регістрі А.

Всі логічні операції над вмістом акумулятора виконуються за один машинний цикл, інші - за два. Логічні операції можуть здійснюватися над будь-яким з нижніх 128 байтів внутрішньої пам'яті даних або над будь-яким регістром SFR (Регістрів спеціальних функцій) в режимі прямої адресації без використання акумулятора.

Операції циклічного зсуву RL A, RLC A і т. Д. Переміщують вміст акумулятора на один біт вправо або вліво. У разі лівого циклічного зсуву молодший біт переміщається в старшу позицію. У разі правого циклічного зсуву відбувається зворотне.

операція SWAP A здійснює обмін молодшої і старшої тетрад в акумуляторі.

3. Команди передачі даних

команда MOV dest, src дозволяє пересилати дані між осередками внутрішнього ОЗУ або областю регістрів спеціальних функцій SFR без використання акумулятора. При цьому робота з верхньою половиною внутрішнього ОЗУ може здійснюватися тільки в режимі непрямої адресації, а звернення до регістрів SFR - тільки в режимі прямої адресації.

У всіх мікросхемах MCS-51 стек розміщується безпосередньо в резидентної пам'яті даних і збільшується вгору. Інструкція PUSH спочатку збільшує значення в регістрі покажчика стека SP, А потім записує в стек байт даних. команди PUSH і POP використовуються тільки в режимі прямої адресації (записуючи або відновлюючи байт), але стек є завжди доступним при непрямої адресації через регістр SP. Таким чином, стек може використовувати і верхні 128 байт пам'яті даних. Ці ж міркування виключають можливість використання стекових команд для адресації регістрів SFR.

Інструкції передачі даних включають в себе 16-бітову операцію пересилання MOV DPTR, # data16, Яка використовується для ініціалізації регістра покажчика даних DPTR при перегляді таблиць в програмній пам'яті або для доступу до зовнішньої пам'яті даних.

операція XCH A, byte застосовується для обміну даними між акумулятором і адресуються байтом. команда XCHD A, @ Ri аналогічна попередній, але виконується тільки для молодших тетрад, що беруть участь в обміні операндів.

Для доступу до зовнішньої пам'яті даних використовується тільки непряма адресація. У разі однобайтовим адрес використовуються регістри R0 або R1 поточного реєстрового банку, а для 16-розрядних - регістр покажчика даних DPTR. При будь-якому методі доступу до зовнішньої пам'яті даних акумулятор грає роль джерела або приймача інформації.

Для доступу до таблиць, розміщеним в програмній пам'яті, використовуються команди:

MOVC A, @ A + DPTR ;

MOVC A, @ A + PC .

В якості базового адреси таблиці використовується вміст відповідно регістра покажчика даних DPTR або PC (Програмного лічильника), а зсув береться з A. Ці команди використовуються виключно для читання даних з програмної пам'яті, але не для запису в неї.

4. Булеві операції

мікросхеми MCS-51 містять в своєму складі «булевий» процесор. Внутрішнє ОЗУ має 128 прямо адресованих біт. Простір регістрів спеціальних функцій SFR може також підтримувати до 128 бітових полів. Бітові інструкції здійснюють умовні переходи, пересилання, скидання, інверсії, операції «І» та «АБО». Всі зазначені біти доступні в режимі прямої адресації.

біт перенесення CF в регістрі спеціальних функцій «слово стану програми PSW»Використовується як однобітний акумулятор булевого процесора.

5. Інструкції переходів

Адреси операцій переходів позначаються на мові асемблера міткою або реальним значенням в просторі пам'яті програм. Адреси умовних переходів ассембліруются в відносне зміщення - знаковий байт, що додається до програмного лічильника PC в разі виконання умови переходу. Межі таких переходів лежать в межах між мінус 128 і 127 щодо першого байта, наступного за інструкцією. У регістрі спеціальних функцій «слово стану програми PSW»Відсутній прапорець нуля, тому інструкції JZ і JNZ перевіряють умову «дорівнює нулю» як тестування даних в акумуляторі.

Існує три види команди безумовного переходу: SJMP, LJMP і AJMP - розрізняються форматом адреси призначення. Інструкція SJMP кодує адресу як відносне зміщення, і займає два байти. Дальність переходу обмежена діапазоном від мінус 128 до 127 байт щодо інструкції, наступної за SJMP.

В інструкції LJMP використовується адреса призначення у вигляді 16-бітної константи. Довжина команди становить три байта. Адреса призначення може розташовуватися в будь-якому місці пам'яті програм.

команда AJMP використовує 11-бітну константу адреси. Команда складається з двох байт. При виконанні цієї інструкції молодші 11 біт адресного лічильника заміщуються 11-бітовим адресою з команди. П'ять старших біт програмного лічильника PC залишаються незмінними. Таким чином, перехід може здійснюватися всередині 2К-байтного блоку, в якому розташовується інструкція, наступна за командою AJMP.

Існує два види команди виклики підпрограми: LCALL і ACALL. Інструкція LCALL використовує 16-бітову адресу підпрограми, що викликається. В даному випадку підпрограма може бути розташована в будь-якому місці пам'яті програм. Інструкція ACALL використовує 11-бітову адресу підпрограми. В цьому випадку викликається підпрограма повинна бути розташована в одному 2К-байтним блоці з інструкцією, наступного за ACALL. Обидва варіанти команди кладуть на стек адреса наступної команди і завантажують в програмний лічильник PC відповідне нове значення.

Підпрограма завершується інструкцією RET, Що дозволяє повернутися на інструкцію, наступну за командою CALL. Ця інструкція знімає зі стека адреса повернення і завантажує його в програмний лічильник PC . Інструкція RETI використовується для повернення з підпрограм обробки переривань. єдина відмінність RETI від RET полягає в тому що RETI інформує систему про те, що обробка переривання завершилася. Якщо в момент виконання RETI немає інших переривань, то вона ідентична RET.

Інструкція DJNZ призначена для управління циклами. Для виконання циклу N раз треба завантажити в лічильник байт із значенням N і закрити тіло циклу командою DJNZ, Що вказує на початок циклу.

команда CJNE порівнює два своїх операнда як беззнакові цілі і виробляє перехід за вказаною в ній адресою, якщо порівнювані операнди не рівні. Якщо перший операнд менше, ніж другий, то біт перенесення CF встановлюється в «1».

Всі команди в ассемблірованном вигляді займають 1, 2 або 3 байти.

архітектура мікроконтролерів

Розуміння архітектури мікроконтролерів є ключовим при вивченні мов програмування типу асемблер. Структура асемблера, формат його команд, адресація операндів і т. Д. Повністю визначаються архітектурою. Метою вивчення архітектури є:

· Виявлення набору доступних для програмування регістрів, їх функціонального призначення та структури;

· Розуміння організації оперативної пам'яті і порядку її використання;

· Знайомство з типами даних;

· Вивчення формату машинних команд;

· З'ясування організації обробки переривань.

Архітектура сімейства MCS-51 в значній мірі зумовлюється її призначенням - побудова компактних і дешевих цифрових пристроїв. Всі функції МК реалізуються за допомогою єдиної мікросхеми. До складу сімейства MCS-51 входить цілий ряд мікросхем від найпростіших мікроконтролерів до досить складних. Мікроконтролери сімейства MCS-51 дозволяють виконувати як завдання управління різними пристроями, так і реалізовувати окремі вузли аналогової схеми. Всі мікросхеми цього сімейства працюють з однією і тією ж системою команд, більшість з них виконується в однакових корпусах з збігається цоколевкой (нумерація висновків для корпусу). Це дозволяє використовувати для розробленого пристрою мікросхеми різних фірм - виробників (таких какIntel, Dallas, Atmel, Philips і т.д.) без переробки принципової схеми пристрою та програми.

MCS-51 виконаний по Гарвардської архітектури, де адресні простори пам'яті програм і даних розділені.

Структурна схема контролера представлена \u200b\u200bна рис.2.3 і складається з наступних основних функціональних вузлів: блоку управління, арифметико-логічного пристрою, блоку таймерів / лічильників, послідовного інтерфейсу і переривань, програмного лічильника (лічильника команд), пам'яті даних і пам'яті програм.

Двосторонній обмін здійснюється за допомогою внутрішньої 8-розрядної магістралі даних. Розглянемо докладніше призначення кожного блоку. За такою схемою побудовані практично всі представники сімейства MCS-51. Різні мікросхеми цього сімейства відрізняються тільки регістрами спеціального призначення (в тому числі і кількістю портів). Система команд всіх контролерів сімейства MCS-51 містить 111 базових команд з форматом 1, 2 або 3 байти і не змінюється при переході від однієї мікросхеми до іншої. Це забезпечує прекрасну переносимість програм з однієї мікросхеми на іншу.

Блок управління і синхронізації (Timing and Control) призначений для вироблення синхронизирующих і керуючих сигналів, які забезпечують координацію спільної роботи блоків ОЕВМ в усіх допустимих режимах її роботи. До складу блоку управління входять:


  • пристрій формування тимчасових інтервалів,
  • комбінаційна схема введення-виведення,
  • регістр команд,
  • дешифратор команд.

Вхідні і вихідні сигнали блоку управління і синхронізації:

1 PSEN - дозвіл програмної пам'яті;

2 ALE - вихідний сигнал дозволу фіксації адреси;

3 PROG - сигнал програмування;

4 EA - блокування роботи з внутрішньою пам'яттю;

5 VPP - напруга програмування;

6 RST - сигнал загального скидання.

Пристрій формування тимчасових інтервалів необхідно для синхронізації послідовності станів ЦП, що утворюють машинний цикл, а також для правильної роботи всіх внутренніхзащелок і вихідних буферів портів. Машинний цикл складається з шести последовательнихсостояній (States) від S1 до S6, кожне з яких, в свою чергу, підрозділяється на дві фази:

фазу 1 (Phase 1 - P1) і фазу 2 (Phase 2 - P2). Таким чином, машинний цикл може бути визначений як послідовність тимчасових інтервалів S1P1, S1P2, S2P1, ...., S6P2. Тривалість фази дорівнює періоду проходження тактових імпульсів, тому машинний цикл займає 12 тактових періодів.

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

регістр команд призначений для запису і зберігання 8-ми розрядного коду операції виконуваної команди. Код операції, за допомогою дешифратора команд і логіки управління ЕОМ, перетворюється в микропрограмму виконання команди.

Рис 2.3. Структурна схема однокристальної мікроконтролера Intel 8051

(Сімейство MCS-51)

Арифметико-логічний пристрій (ALU) являє собою паралельне восьмирозрядному пристрій, що забезпечує виконання арифметичних і логічних операцій. АЛУ складається з:

  • регістрів тимчасового зберігання -TMP1 і TMP2,
  • ПЗУ констант,
  • суматора,
  • додаткового регістра - регістра В,
  • акумулятора - ACC,
  • регістра слова стану програм (регістр прапорів) - PSW.

Регістри тимчасового зберігання TMP1, TMP2 - восьмирозрядні регістри, призначені для прийому і зберігання операндів на час виконання операцій над ними. Ці регістри програмно недоступні.

ПЗУ констант забезпечує вироблення коригуючого коду при двійковій-десятковому поданні даних, коду маски при бітових операціях і коду констант.

Паралельний восьмизарядний суматор являє собою схему комбінаційного типу з послідовним переносом, призначену для виконання арифметичних операцій додавання, віднімання і логічних операцій додавання, множення, неравнозначности і тотожності.

регістр B - восьмизарядний регістр, який використовується під час операцій множення і ділення. Для інших інструкцій він може розглядатися як додатковий надоперативності регістр.

акумулятор- восьмизарядний регістр, призначений для прийому і зберігання результату, отриманого при виконанні арифметико-логічних операцій або операцій зсуву.

Регістр стану програм PSW (Programm Status Word)призначений для зберігання слова стану виконуваних команд. При виконанні багатьох команд в ALU формується ряд ознак операції (прапорів), які фіксуються в регістрі слова стану програми (PSW). У табл. 1 наводиться перелік прапорів PSW, даються їх символічні імена і описуються умови їх формування.

Блок переривань і послідовного інтерфейсу - UART (Universal Asynchronous Receiver / Transmitter) призначений для організації введення - виведення послідовних потоків інформації та організації системи переривання програм.

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

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



Сподобалася стаття? поділіться їй