You are on page 1of 10

Лекція 3

Архітектура мікроконтролерів сімейства МК51

Питання, що розглядаються в лекції:


1. Історія створення перших мікроконтролерів.
2. Загальні відомості про сімейство мікроконтролерів МК51.
3. Технічні характеристики базової моделі мікроконтролерів сімейства МК51.
4. Схемне позначення мікроконтролера та його структурна схема.
5. Адресні простори мікроконтролера.

3.1 Історія створення перших мікроконтролерів


На початку семидесятих років минулого століття завдяки технологічним досягненням
у створенні великих та надвеликих інтегральних схем поступово практично всі процесори
почали виробляти в форматі мікропроцесорів. Першим процесором загального використання
був чотирьохрозрядний Intel 4004, який корпорація Intel презентувала світу 15 листопада
1971 року. До його складу входили понад 2200 транзисторів, працював він на тактовій
частоті 92,6 кГц, був призначений для використання в мікрокалькуляторах та коштував біля
300 доларів.
Перший патент на однокристальну мікро-ЕОМ (мікроконтролер) було видано в 1971
році інженерам М.Кочрену і Г.Буну, співробітникам американської фірми Texas Instruments.
Саме вони запропонували розмістити на одному кристалі не тільки процесор, але й пам’ять з
пристроями вводу-виводу.
Тобто, мікроконтролер по суті є мікропроцесором, тільки з невисокою
обчислювальною потужністю та додатковими модулями, разташованими в одному корпусі, а
точніше — на одном кристалі. Ідея розташовувати на одному кристалі не тільки сам
процессор, але й пам’ять, таймери, порти вводу-виводу та різні периферійні пристрої була
потрібна для створення простих обчислювальних систем, які б не вимагали високої
продуктивності, але б мали низьку собівартість готової продукції. Тому під час проектування
мікропроцесорних систем дуже важливо знайти ту межу, за якою варто ускладнювати
систему та застосовувати універсальний мікропроцесор, або ж знайти вдале рішення та
використати мікроконтролер.
В 1976 році американська фірма Intel починає виробляти мікроконтролери i8048. В
1978 році фірма Motorola випустила в світ свій перший мікроконтролер MC6801, який був
сумісним за системою команд з мікропроцесором MC6800. Через 4 роки, в 1980 році, Intel
впроваджує в виробництво наступний мікроконтролер i8051. Вдалий набір периферійних
пристроїв, можливість гнучкого вибору зовнішньої або внутрішньої програмної пам’яті та
прийнятна ціна забезпечили цьому мікроконтролеру ринковий успіх. З точки зору технології
мікроконтролер i8051 був для свого часу дуже складним пристроєм — на кристалі було
розміщено 128 тисяч транзисторів, що вчетверо превищувало кількість транзисторів
в 16-розрядному мікропроцесорі i8086.
Перші мікроконтролери відрізнялись своєю архітектурою від універсальних
мікропроцесорів широкого використання. Більшість процесорів для персональних
комп’ютерів базуються на тій чи іншій версії циклічного процесу послідовної обробки
даних, який був сформульований Джоном фон Нейманом. Джон фон Нейман запропонував
свою схему побудови комп’ютера в 1946 році. Відмінною особливістю архітектури фон
Неймана є те, що інструкції та дані зберігаються в одній і тій же пам’яті. Мікроконтролери
корпорації Intel мали в своїй основі гарвардську архітектуру. Вона відрізняється від
архітектури фон Неймана тим, що програмний код та дані зберігаються в різних блоках
пам’яті. В такій архітектурі неможливі деякі методи програмування (наприклад, програма не
може змінюватися під час виконання, неможливо динамічно розподіляти пам’ять між
програмним кодом і даними), але гарвардська архітектура дозволяє більш ефективно
виконувати роботу у випадку обмежених ресурсів, тому вона часто використовується у
вбудованих системах.
Сьогодні мікроконтролери використовуються у всіх сферах життя, починаючи від
побутових мікрохвильовок і закінчуючи складними системами управління. Звичайно, у
порівнянні з першими моделями, вони стали набагато продуктивнішими, мають додаткові
можливості (наприклад, під’єднання зовнішньої пам’яті), периферійних пристроїв, що
розміщуються на одному кристалі, стало так багато, що для разробки нескладних проектів,
достатньо мати сам мікроконтролер, під’єднати джерело живлення і узгодити рівні сигналів.

3.2 Сімейство мікрокoнтролерів МК51


Не зважаючи на безперервний розвиток та появу все нових і нових 16- та
32-розрядних мікроконтролерів і мікропроцесорів, значна частка світового ринку
мікропроцесорів залишається зайнятою 8-розрядними пристроями. Сьогодні серед усіх
8-розрядних мікроконтролерів сімейство МК51 (MCS-51) поза всякими сумнівами є
чемпіоном по кількості різновидів та кількості компаній, що виробляли його модифікації.
Все сімейство отримало свою назву завдяки першому його представнику — мікроконтролеру
8051, який був створений в 1980 році на основі технології HMOS.
Важливу роль в досягненні такої значної популярності сімейства МК51 відіграла
відкрита політика фірми Intel, родоначальниці архітектури, яка була спрямована на широке
розповсюдження ліцензій на ядро 8051 серед великої кількості провідних напівпро-
відникових світових компаній. В результаті на сьогоднішній день існує понад 200
модифікацій мікроконтролерів сімейства МК51, які виробляються та вироблялися раніше
майже двома десятками компаній. Ці модифікації містять кристали з надшироким спектром
периферійних пристроїв: від простих 20-вивідних мікросхем з одним таймером та одним
кілобайтом програмної пам’яті до надскладних 100-вивідних кристалів з 12-розрядними
АЦП, масивами таймерів-лічильників, апаратними 16-разрядними перемножувачами та 64
кілобайтами програмної пам’яті на кристалі. Сучасні модифікації мають велику швидкодію
за рахунок збільшення тактової частоти та модернізації архітектури, можуть працювати при
низькій напрузі живлення та малій споживаній потужності. Збільшено об’єм оперативної
пам’яті та FLASH-пам’яті на кристалі з можливістю внутрішнього схемного програмування.
До складу периферійного обладнання додано складні пристрої, наприклад, системи
управління приводами, CAN та USB інтерфейси і т.п.
Всі мікроконтролери сімейства MК51 мають єдину спільну систему команд. Наявність
додаткового обладнання впливає тільки на кількість регістрів спеціального призначення.
Основними виробниками клонів 51-го сімейства в світі є фірми Atmel, AMD, Intel,
Philips, Siemens, Dallas, Temic, Oki, MHS, Gold Star, Winbond, Silicon Systems та ряд інших.
Мікроконтролери цього сімейства виробляються в PLCC, DIP і QFP корпусах та
можуть працювати в наступних температурних діапазонах:
– комерційний (0°C — +70°C);
– розширений (-40°C — +85°С);
– для воєнного використання (-55°C — +125°С).

3.3 Технічні характеристики базової моделі сімейства мікрокoнтролерів МК51


Мікроконтролер i8051 (базова модель сімейства 8051) має такі апаратні
характеристики:
– внутрішній ОЗП об’ємом 128 байт;
– чотири двонаправлені порти вводу-виводу з можливістю побітового налаштування;
– два 16-розрядні таймери-лічильники;
– вбудований тактовий генератор;
– можливість адресації до 64 Кбайт пам’яті програм та 64 Кбайт пам’яті даних;
– дві лінії запитів переривання від зовнішніх пристроїв;
– інтерфейс для послідовного обміну інформацією з іншими мікроконтролерами або
персональними комп’ютерами.
Мікроконтролер може працювати на тактовій частоті до 24 МГц. При цьому найпрос-
тіші команди (наприклад, команда переміщення даних з одного регістру в інший) викону-
ється за 12 періодів тактової частоти. Тобто, максимальна продуктивність ядра не може
перевищувати два міліони операцій за секунду при роботі на максимальній тактовій частоті.
Для виконання найпростіших команд пристроєм управління мікроконтролера
формується спеціальна послідовність управляючих сигналів, яка циклічно повторюється
кожні 12 періодів тактової частоти. Під дією цих сигналів і відбувається виконання команди,
а сама послідовність сигналів називається машинним циклом. Ряд команд мікроконтролер
виконує за два машинних цикли, а деякі (операції множення і ділення) — за чотири
машинних цикли.
Базова модель виготовляється в корпусі DIP-40 та має наступний вигляд:

Рис. 3.1 – Зовнішній вигляд мікроконтролера Intel 8051 в корпусі DIP40

На принципових електричних схемах мікроконтролер зображується так, як показано


на наступному рисунку.

Рис. 3.2 – Схемне позначення мікроконтролера

Окрім чотирьох восьмирозрядних портів вводу-виводу Р0.0–Р0.7...Р3.0–Р3.7 на


зовнішні виводи мікроконтролера також виведені такі сигнали:
– EMA — вхідний сигнал управління пам’яттю програм: якщо на цей вхід подати
рівень логічного нуля, блокується внутрішня пам’ять програм, і мікроконтролер може
працювати з зовнішньою пам’яттю програм; цей вивід також використовується при
програмуванні внутрішньої пам’яті;
– RST — вхідний сигнал перезапуску процесора (ReSTart);
– ALE — вихідний сигнал управління зовнішньою шиною;
– PME — вихідний сигнал читання зовнішньої програмної пам’яті;
– BQ1,BQ2 — виводи для під’єднання частотного резонатора для внутрішнього
тактового генератора;
– +5V — вивід живлення мікроконтролера;
– GND — загальний провід (мінусовий вивід живлення).
Для представлення мікроконтролера як сукупності деяких пристроїв та систем,
доречно розглянути його узагальнену (спрощену) структурну схему. Вона показана на
наступному рисунку.

Рис. 3.3 – Узагальнена структурна схема мікроконтролера

Керує роботою мікроконтролера пристрій управління, до складу якого входить


генератор машинного циклу, системні адресні дешифратори, дешифратори команд та інші
функциональні вузли. Програма управління разміщується в постійному запоминаючому
пристрої (ПЗП), а дані зберігаються в оперативному запоминаючому пристрої (ОЗП).
Основні обчислювальні операції виконуються за допомогою арифметико-логічного
пристрою (АЛП).
Два вбудованих таймери-лічильники (ТС0 і ТС1) найчастіше використовуються для
відліку інтервалів часу та можуть генерувати переривання. Їх обробкою, а також обробкою
інших переривань, займається пристрій обробки переривань (ПОП). Управління ресурсами
ядра і роботою периферійного обладнання здійснюється за допомогою спеціальних регістрів
режимів, далі будемо називати їх регістрами спеціальних функцій.
Для взаємодії з зовнішніми пристроями мікроконтролер містить паралельні порти
вводу-виводу Р0...Р3 і порт послідовного обміну — універсальний асинхронний прийомо-
передавач (УАПП). Порт Р3 відрізняється від інших паралельних портів тим, що кожний
його розряд має альтернативне призначення та використовується для виводу сигналів
зовнішнього управління, вводу зовнішніх переривань і т.п.
Синхронізацію роботи всіх пристроїв забезпечує вбудований тактовий генератор.

3.4 Внутрішній адресний простір мікрокoнтролерів сімейства МК51


Оскільки мікроконтролери цього сімейства побудовані за принципом гарвардської
архітектури, очевидно, що поняття адреси по відношенню до них є неоднозначним. Говорячи
про якесь конкретне значення адреси необхідно уточнювати якої саме пам’яті стосується ця
адреса — пам’яті даних чи пам’яті програм. Але щоб скласти повноцінне уявлення про
існуючі в мікроконтролері способи адресації, необхідно розглянути ще одну модель —
модель, яка представляє МК51 як сукупність 256 восьмирозрядних регістрів (рис. 3.4). Ця
модель зручна для програмістів, що займаються створенням програмного забезпечення для
мікроконтролерів. Вона залишає поза полем зору велику кількість вузлів, які дуже важливі в
роботі мікроконтролера, але недоступні для програмного управління.

Рис. 3.4 – Структура внутрішнього адресного простору


Мікроконтролер представляється сукупністю регістрів, в які можна записати, та з
яких можна читати дані. Графічне зображення такої моделі виглядає як таблиця з 256
клітинок, розташованих в 16 строчках по 16 клітинок (лунок) в кожній строчці. Кожна лунка
символізує собою один восьмирозрядний регістр. Кажен регістр має свій індивідуальний
номер (адресу): від 0 до 255. Адреса кожної лунки (регістру) вираховується як арифметична
сума номера стовпчика таблиці та помноженого на 16 номера строчки. Для зручності запису
надалі всі адреси будемо представляти в шістнадцятковій системі числення. Наприклад,
лунка з адресою 4Bh разташована в таблиці на перехресті стовпчика з номером 0Bh та
строчки, позначеної адресою 40h.
Аппаратними засобами мікроконтролера забезпечується можливість переміщення
(копіювання) даних із однієї лунки в іншу. З цією метою всі входи та виходи регістрів
під’єднані до восьмирозрядної двонаправленої шини даних, по якій і здійснюється передача.
Адресний простір в 256 адрес також вимагає існування восьмирозрядної внутрішньої
адресної шини (28=256). Сукупність всіх 256 адрес і створює внутрішній адресний простір
мікроконтролера.
Цей простір не є однорідним за своєю структурою. Він умовно разділений на дві рівні
за розміром половини. Моладші адреси (від 00h до 7Fh) являють собою область програмних
змінних, тобто, те, що ми називаємо оперативною пам’яттю (точніше — пам’яттю даних).
Лунки з адресами від 80h до FFh називаються регістрами спеціальних функцій. Це регістри,
вміст яких впливає на роботу тих чи інших функціональних систем мікроконтролера,
наприклад, таймерів, системи переривань, арифметико-логічного пристрою і т.п. Регістри
спеціальних функцій (далі РСФ) використовуються для налагоджування та управління
роботою цих пристроїв та систем.
Різні ділянки оперативної пам’яті теж мають свої особливості. Перші 32 лунки (з
адресами від 00h до 1Fh) є так званими регістрами оперативного призначення. Ці 32 регістри
розділені на чотири групи по вісім регістрів. Кожна група називається банком регістрів.
Всередині банка регістри мають назви від R0 до R7. Система команд мікроконтролера
передбачає спеціальний спосіб адресації, при якому один із операндів вказується не за
допомогою його абсолютної адреси у внутрішньому адресному просторі, а умовним ім’ям
(R0...R7). Така адресація називається регістровою. Особливістю цього способу адресації є те,
що ім’я регістру кодується в команді трьома молодшими бітами самої інструкції, а,
відповідно, команда стає на один байт коротшою у порівнянні з довжиною команди при
звичайному прямому способі адресації, коли для вказання операнда використовується
окремий байт команди. Але імен регістрів оперативного призначення всього вісім, тобто, під
час виконання команди можливо адресуватися лише до регістрів одного банку. Цей банк
повинен бути активним. Номер активного банку вказується в одному з регістрів спеціального
призначення (біти RS0 і RS1 в регістрі PSW). Регістри R0 і R1 активного банку можуть
також використовуватися для так званої непрямої регістрової адресації. Її зміст полягає у
тому, що в одному з вказаних регістрів розміщується адреса лунки внутрішньої оперативної
пам’яті, в якій знаходиться один з операндів команди, а команда містить лише посилання на
цей регістр: якщо молодший біт коду операції дорівнює нулю, то адреса операнда зчитується
з регістра R0, а якщо одиниці — то з регістра R1.
Дуже часто при програмуванні мікроконтролерів виникає потреба встановити,
очистити або проаналізувати флаг (анг.: flag ) — деяку умову (true / false), для зберігання якої
необхідно всього один біт інформації. З цією метою у внутрішньому адресному просторі
виділена спеціальна область, всередині якої можливий адресний доступ до кожного окремого
біта. Ця область називається простором побітного доступу і включає в себе регістри з
адресами від 20h до 2Fh. Кажен із тригерів у складі цих 16 регістрів має свою індивідуальну
адресу, починаючи з адреси 00h для молодшого розряду регістру 20h, і закінчуючи адресою
7Fh для старшого розряду регістру 2Fh, — всього 128 адрес побітового доступу. Ще 16
аналогічних регістрів розташовані в області регістрів спеціальних функцій. Такими
властивостями наділені всі регістри спеціальних функцій, адреси яких кратні восьми (вони
виділені червоним кольором на рисунку 3.4). Таким чином, загальний об’єм ОЗУ побітового
доступу складає 256 біт (32 восьмирозрядні регістри). При цьому для всіх 32 згаданих
регістрів зберігається можливість прямої адресації для читання і запису в них цілого байта
інформації. Тобто, завдяки особливим властивостям деяких регістрів внутрішнього
адресного простору всередині нього створюється ще один адресний простір об’ємом 256 біт.
І у випадку прямої адресації до одного з регістрів внутрішнього адресного простору, і
при звертанні до одного з тригерів побітного адресного прстору адреса операнда вказується в
команді у вигляді окремого байта, значення якого може знаходитись в діапазоні від 0 до 255.
Мікроконтролер сприймає його як адресу в тому чи іншому адресному просторі в залежності
від типу команди: якщо інструкція передбачає виконання операції з бітами, операнд буде
сприйматися як адреса біта, а якщо інструкція відповідає операції з байтами, операнд буде
сприйматися як адреса байта. Тому дуже важливо при написанні програм вірно розрізняти та
оперувати цими адресами.
Так як ОЗП побітного доступу знаходиться у складі регістрів внутрішнього адресного
простору, зрозуміло, що його вміст можна змінювати як командами для роботи з окремими
бітами, так і командами модифікації байт. Наприклад, щоб встановити високий логічний
рівень в старшому розряді регістру з адресою 21h, можна встановити в одиницю біт з
адресою 0Fh, або записати число 80h (байт з одиницею в старшому розряді) в лунку
оперативної пам’яті з адресою 21h (див. рис. 3.4). І в першому, і в другому випадку старший
розряд вказаного регістру буде встановлено, але в першому випадку інші розряди регістру
залишаться незмінними, а в другому випадку — інші розряди будуть очищені до нуля.
В просторі регістрів спеціальних функцій в базовій моделі мікроконтролера сімейства
МК51 використовується лише 21 регістр. Всі вони мають свої системні імена: P0...P3 –
паралельні порти вводу-виводу, PSW – слово стану програми, А і В – супероперативні
регістри арифметико-логічного пристрою, SP – вказівник стеку, DPTR – вказівник даних,
PCON – регістр управління енергоспоживанням TMOD, TCON – регістри управління
таймерами-лічильниками, TH0,TL0,TH1,TL1 – це лічильні регістри таймерів-лічильників,
SCON, SBUF – регістри послідовного порта, IE, IP – регістри управління перериваннями.
Інші адреси регістрів спеціальних функцій були зарезервовані і в подальшому знайшли своє
застосування з метою розширення функцій в наступних моделях мікроконтролерів цієї серії.
Особливістю роботи з регістрами спеціальних функцій є те, що доступ до них можливий
тільки при використанні прямої адресації. При використанні команд з непрямою регістровою
адресацією в цій адресній області (080h...0FFh) процесор буде звертатися до деякого
«паралельного» адресного простору, де в наступних моделях мікроконтролерів розробники
розмістили додаткові 128 байт оперативної пам’яті.

3.5 Інші адресні простори мікрокoнтролерів сімейства МК51


У випадку під’єднання до мікроконтролера додаткових мікросхем пам’яті паралельні
порти мікроконтролера використовуються для організації зовнішніх шин (шини адреси і
шини даних), а також для генерації сигналів управління (зчитування та запису). За
допомогою портів Р2 і Р0 створюється 16-розрядна адресна шина, при використанні якої
можлива адресація до 65 536 лунок пам’яті. Доступ до зовнішньої пам’яті здійснюється за
допомогою спеціальних команд, під час виконання яких генеруються сигнали запису WR та
зчитування RD на окремих виводах порту Р3 (Р3.6 та Р3.7 відповідно). Тобто, окрім
внутрішнього адресного простору пам’яті даних об’ємом 256 байт існує зовнішній адресний
простір об’ємом 65 536 байт (64 кілобайти).
До цих же зовнішніх шин можуть під’єднуватися і додаткові мікросхеми для
зберігання програмного коду, завдяки чому пам’ять програм також може бути разширена до
64 Кбайт. З цією метою, як правило, використовуються мікросхеми постійної пам’яті (ПЗП).
Особливістю використання цієї пам’яті є те, що записані в неї команди програми і дані
можуть тільки читатися, а запис в неї мікроконтролером не можлива. Зчитування
виконується за допомогою сигналу РМЕ, який генерується при виконанні спеціальної
команди читання із пам’яті програм, якщо значення адреси виходить за межі об’єму
вбудованої (внутрішньої) програмної пам’яті, або ж робота з нею заблокована (вхідний
сигнал ЕМА має нульовий логічний рівень). Таким чином, можна говорити про ще один
адресний простір об’ємом 64 кбайти, створений пам’яттю програм.
Узагальнюючи сказане, можна зобразити схему, яка ілюструє різноманіття адресних
просторів мікроконтролера.

Рис. 3.5 – Адресні простори мікроконтролерів сімейства МК51

Тобто, якщо параметр, що вказує на джерело даних в команді читання, дорівнює


п’яти, то в залежності від інструкції читання може здійснюватися:
– з регістру з адресою 05h внутрішнього адресного простору;
– з регістру R5 активного банку регістрів оперативного призначення;
– з тригера з адресою 05h (п’ятий біт регістру 20h внутрішнього адресного простору);
– з лунки пам’яті з адресою 05h зовнішньої пам’яті даних;
– з лунки пам’яті з адресою 05h пам’яті програм.

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


Якщо уявити собі пам’ять програм базової моделі мікроконтролера сімейства МК51
об’ємом 4 кілобайти у вигляді таблиці однобайтних чисел, записаних для зручності читання
в шіснадцятковому форматі, то образ пам’яті буде виглядати приблизно так:

Adr: 00h 01h 02h 03h 04h 05h 06h 07h 08h 09h 0Ah 0Bh 0Ch 0Dh 0Eh 0Fh
0000h 75 A8 00 75 81 E0 75 29 21 75 8C 00 75 8D F5 75
0010h 88 54 75 87 80 75 98 F8 75 B8 02 75 A8 12 75 D0
0020h 00 E5 30 B4 B9 04 78 BF E4 F6 FF FF FF FF FF FF
0030h FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
... ............
0FFFh FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF

Рис. 3.5 – Образ пам’яті програм мікроконтролера

Область пам’яті, яка зайнята кодом програми, показана на рисунку жовтим та


блакитним кольором, а лунки, що не зайняті програмою, залишилися білими. В кожній лунці
очищеної та незаповненої пам’яті всі біти встановлені в одиницю, тобто в них зберігається
число FFh. Окремі команди записаного програмного коду виділені різними кольорами.
Так як мікроконтролер є типовим представником гарвардської архітектури, його
програмна пам’ять використовується для того, щоб зберігати код виконуваної програми. Ця
пам’ять є постійною, тобто, її вміст зберігається і після вимикання напруги живлення.
В сучасних моделях мікроконтролерів в якості програмної пам’яті використовується FLASH-
пам’ять. Інформацію в неї можна записати тільки за допомогою зовнішнього пристрою, який
називається програматором. Окрім програмного коду в цій пам’яті можуть зберігатися і
постійні дані, записані при програмуванні (константи). Мікроконтролер може їх читати, але
не має можливості їх модифікувати або переписувати, тобто, програмна пам’ять є доступною
тільки для читання. Деякі сучасні моделі мікроконтролерів мають вбудований програматор,
але активувати його можна лише за допомогою зовнішніх сигналів під управлінням
персонального комп’ютера зі спеціальним програмним забезпеченням.
Одним із основних системних регістрів мікроконтролера є 16-розрядний програмний
регістр-лічильник PC (Program Counter). Виходи цього лічильника у більшості випадків
формують стан адресної шини пам’яті програм. Під час проходження сигналу Reset цей
регістр очищується, відповідно, на внутрішній адресній шині встановлюється нульова
адреса. На початку роботи процесора саме з цієї адреси буде прочинатися виконання першої
команди програми.
Після зчитування перщої інструкції (коду операції) програми відбувається її
виконання. При цьому вміст регістру РС збільшується на довжину першої команди.
В наведеному вище прикладі машинного коду перша команда складається з трьох байт,
відповідно, до вмісту регістру РС буде додано число три: 0000+3 = 0003. Таким чином, на
момент закінчення виконання першої команди РС = 3, а це означає, що в наступному
машинному циклі виконання наступної команди почнеться з читання інструкції, що
розміщується за адресою 0003. Далі процес повторюється, при виконанні кожної команди
модифікується вміст регістру РС, завдяки чому забезпечується послідовне виконання
програми. В деяких випадках виникає потреба порушити порядок виконання команд у
відповідності з їх розміщенням в масиві програмного коду. З цією метою використовуються
так звані команди передачі управління, які дозволяють перейти до виконання програми,
починаючи з деякої довільної адреси. Зрозуміло, що для здійснення такого переходу
необхідно, щоб після виконання команди переходу регістр РС набув значення адреси, з якої
необхідно продовжити виконання програми. У найпростішому випадку нова адреса може
бути просто записана в регістр РС, або ж отримана шляхом деякої модифікації існуючого в
ньому значення. Якщо алгоритм передбачає повернення в точку програми, з якої виконано
перехід (розгалудження), то перед зміною значення регістру РС його вміст потрібно десь
зберегти, а при поверненні — знову відновити його в регістрі. Для тимчасового зберігання
заміщеної адреси використовується стек.

3.7 Організація стеку


Стек — це ділянка (частина) оперативної пам’яті, призначена для тимчасового збері-
гання даних. Під час запису в стек дані разміщуються в пам’яті послідовно один за одним, а
при зчитуванні — зчитуються послідовно в зворотньому порядку. Найчастіше принцип
роботи стеку порівнюють зі стопкою тарілок: покласти наступну тарілку в стопку можливо
тільки зверху на попередню, а щоб взяти другу зверху, потрібно спочатку забрати верхню.
На апаратному рівні робота зі стеком організовується за допомогою спеціального
регістру — вказівника стеку SP (Stack Point). В МК51 — це восьмирозрядний регістр із
області спеціальних функцій, розташований за адресою 81h. При виконанні запису в стек
спочатку буде збільшено на одиницю значення регістру SP, а потім відбудеться запис
чергового байта в оперативну пам’ять за адресою, що утворилася в регістрі SP після
інкремента (тобто, за адресою, на яку вказує регістр SP). Таким чином, оскільки сам регістр
SP став на одиницю більшим, наступна операція запису в стек буде виконана за наступною
адресою. При зчитуванні зі стеку завжди буде прочитано останній записаний байт, так як
саме на нього буде вказувати регістр SP. При цьому значення вказівника стеку зменшиться
на одиницю, отже, наступним буде прочитано байт з попередньої адреси, і так далі...
В мікроконтролерах МК51 робота зі стеком може ініціюватися як спеціальними
командами (PUSH, POP), так і системними засобами мікроконтролера без безпосереднього
програмного звертання до стеку, наприклад, при виконанні команд передачі управління з
наступним поверненням в точку розгалудження. Під час виклику підпрограми відбувається
автоматичне збереження адреси наступної команди в стек, а потім — в регістр-лічильник РС
завантажується адреса переходу. При поверненні з підпрограми відновлення в регістрі РС
адреси відкладеної команди здійснюється ядром процесора також автоматично. За
аналогічним алгоритмом відбувається тимчасове збереження поточної адреси і під час
виклику та обробки переривань.

Запитання для самоконтролю


1. Коли і ким були розроблені перші мікроконтролери?
2. Який об’єм оперативної пам’яті даних є в базовій моделі мікроконтролера сімейства МК51?
3. Який об’єм пам’яті програм є в базовій моделі мікроконтролера сімейства МК51?
4. Що називають машинним циклом процесора?
5. Назвіть адресні простори базової моделі мікроконтролера сімейства МК51.
6. Як працює стек в мікроконтролері?

ДОДАТКОВІ ДЖЕРЕЛА
1. MCS-51 – Microcontroller Family User's Manual // Intel – 1994 – 334 pages. — Specification.
2. АТ89С51 — Datasheet.

You might also like