Intel MCS-51

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Мікроконтролер з сімейства MCS-51, Intel 8751H, з 4 Кб EPROM пам'яті програм (DIP корпус)

MCS-51 — сімейство мікроконтролерів, розроблених фірмою Intel у 1980 році для використання у вбудовуваних системах. Дані мікроконтролери були досить популярними у 90-их роках, згодом їх витіснили розвиненіші аналоги фірм «Microchip Technology» і «Atmel». За рахунок вдалої реалізації мікроконтролера (вбудований УАПП, бітовий процесор i8051) велика кількість наявних на ринку мікроконтролерів має i8051 сумісні процесори, а за рахунок наявності великої кількості аналогів вивчення ядра MCS-51 є одним з перших кроків до вивчення сучасних мікропроцесорів у програмах курсів вищих навчальних закладів.

MCS-51 прийшли на заміну випущеним у 1976 році MCS-48 і на відміну від останніх мали зменшений час виконання команд (в 2,5 — 10 раз в залежності від умов експлуатації), збільшений обсяг вбудованої пам'яті, додаткові пристрої периферії, додаткові команди для програмування. За рахунок даних покращень, мікроконтролери стали зручнішими в програмуванні, дешевші в експлуатації. Наявність булевого процесора затвердила за даними пристроями галузь автоматизації виробництва, оскільки для управління часто використовуються саме полярні сигнали — ввімкнути/вимкнути двигун, запалити/вимкнути індикатор тощо.

Конструктивно, MCS-51 є однокристальними мікроконтролерами гарвардської архітектури, виконані по n-МОН або КМОН технології. Містять у собі 8-бітний мікропроцесор i8051 з підтримкою булевих операцій над окремими бітами, до 4096 байт вбудованої пам'яті програм (доступної тільки на читання), до 256 байт вбудованої пам'яті даних (доступної на читання і запис), підтримка адресного простору у 64 Кб для пам'яті програм і 64 Кб для пам'яті даних, два-три 16-бітні таймери/лічильники, двосторонній УАПП, 32 лінії двосторонніх портів введення-виведення, генератор тактової частоти.

Характеристика мікроконтролера[ред.ред. код]

Внутрішня архітектура мікроконтролерів MCS-51

Надалі буде розглядатись саме оригінальна версія мікроконтролера (якщо не обговорено інше), оскільки інші ОМЕОМ не відрізняються принципово від оригінального MCS-51.

Ядро
  • 8-бітовий АЛП, 8-бітові регістри
  • Побітова адресація частини ОЗП
  • Система команд із 111 інструкцій
  • Архітектура системи команд: акумулятор
Пам’ять
  • Гарвардська архітектура пам’яті
  • 8-бітова шина даних
  • 16-бітна шина адреси. Можливість адресації до 64 Кб пам'яті програм і до 64 Кб пам'яті даних
  • 4096 байт вбудованої пам'яті програм (додаткові 60К досягаються за рахунок зовнішніх мікросхем пам'яті)
  • 128 байт вбудованої пам'яті даних (додаткові 64К досягаються за рахунок зовнішніх мікросхем пам'яті)
Периферія
  • 32 двосторонні однобітні лінії вводу-виводу
  • Двосторонній послідовний УАПП
  • Два 16-бітні таймери/лічильники
  • Система з 5 переривань, з 2 рівнями пріоритетів
  • Вбудований тактовий генератор
  • Енергозберігаючий режим (тільки у версіях на КМОН технології)

Вбудовані пристрої[ред.ред. код]

Порти вводу-виводу[ред.ред. код]

Чотири 8-розрядні порти Р0...Р3 можуть використовуватися:

  1. Як 8-розрядні паралельні порти введення/виведення інформації;
  2. Як 32 однорозрядні лінії введення/виведення;
  3. При роботі з зовнішньою пам'яттю програм і даних;
  4. В режимі альтернативних функцій (8 ліній порту Р3);
  5. При програмуванні та перевірці внутрішньої пам'яті програм.

Послідовний порт може бути запрограмований на один з чотирьох режимів прийому/передачі шляхом програмування розрядів SM0 і SM1 регістра SCON.

  • Режим 0 - послідовний порт працює як восьмирозрядний регістр зсуву. Швидкість (частота) прийому/передачі в режимі 0 постійна і складає f_{BQ}/12, де f_{BQ} — частота синхронізації ОМЕОМ.
  • Режим 1 - прийом/передача даних здійснюється у форматі восьмирозрядного УАПП. Швидкість залежить від частоти переповнення регістра лічильника
  • Режим 2 - режими 9-розрядного УАПП з постійною швидкістю обміну. Швидкість прийому/передачі програмно налаштовується на одну із двох можливих величин: f_{BQ}/32 або f_{BQ}/64
  • Режим 3 - режими 9-розрядного УАПП з перемінною швидкістю обміну. Швидкість залежить від частоти переповнення регістра лічильника

Універсальний асинхронний прийомо-передавач (УАПП)[ред.ред. код]

Вбудований універсальний асинхронної приймач/передавач дозволяє досить просто перетворити мікроконтролер у послідовний інтерфейс вводу-виведення. За рахунок різноманітного способу підключення зовнішніх виходів напряму́ до внутрішніх регістірв зсуву і використання внутрішніх таймерів, можна реалізувати сполучення в багатьох режимах, включаючи синхронне і асинхронне. В деяких режимах можливе сполучення без використання зовнішніх компонентів. Режим сумісності з протоколом RS-485 також можливий для реалізації, проте основною перевагою ядра 8051 є можливість підстроювання до існуючих послідовних протоколів управління приладами.

Якщо УАПП (і таймер при необхідно) налаштований, то для програміста лишається написати просту процедуру переривання для заповнення регістру передачі (викликатиметься кожен раз, коли останній біт регістра передачі "віддається" УАППом) і/або очистки/збереження даних в регістрі-приймачі. Для роботи основної програми залишається тільки кидати на стек дані для відправки і читати з стеку дані для прийому.

Система переривань[ред.ред. код]

Всього у мікроконтрлера є 5 переривань:

  1. IE0
  2. TF0
  3. IE1
  4. TF1
  5. TI+RI

Система переривань MCS-51.png

Програмістська модель[ред.ред. код]

Архітектура пам'яті[ред.ред. код]

Таблиця регістрів спеціальних функцій[ред.ред. код]

Розміщення регістрів спеціальних функцій у віртуальній пам'яті мікроконтролера
Позначення Найменування Адреса Поч. значення Примітка
ACC Акумулятор E0H 00H Цей регістр означає те саме, що і A при програмуванні на асемблері, проте позначення А вказує на роботу з акумулятором, а позначення ACC вказує на роботу з байтом пам'яті. Відповідно, використання мнемоніки A дозволяє скоротити довжину інструкції.
B Регістр B F0H 00H Регістр використовується мікроконтролером тільки в операціях множення/ділення. В усіх інших операціях його можна використовувати як загальний регістр
PSW Регістр стану програми D0H 00H Його аналог у х86 — регістр прапорців FLAGS
SP Покажчик стеку 81H 07H
DPL Молодший байт покажчика даних 82H 00H Дані регістри формують один 16-бітний віртуальний регістр DPTR.
DPH Старший байт покажчика даних 83Н 00H
P0 Порт 0 80H FFH Регістри-защіпки портів вводу-виводу
P1 Порт 1 90H FFH
P2 Порт 2 A0H FFH
P3 Порт 3 B0H FFH
IP Регістр пріоритетів переривань B8H XXX00000b
IE Регістр дозволу переривань A8H 0XX00000b
TMOD Регістр режимів таймера/лічильника 89H 00H
TCON Регістр керування таймера/лічильника 88H 00H
TH0 Таймер/лічильник 0 (старший байт) 8CH 00H
TL0 Таймер/лічильник 0 (молодший байт) 8AH 00H
TH1 Таймер/лічильник 1 (старший байт) 8DH 00H
TL1 Таймер/лічильник 1 (молодший байт) 8BH 00H
SCON Керування послідовним портом 98H 00H
SBUF Буфер послідовного порту 99H Невизначено Цей регістр, як і DPTR, є також віртуальним. При читанні замість даного регістру підставляється буфер приймача, при записі - буфер передавача. Дані буфери програмно недоступні (щоб програміст не зміг записати у буфер приймача і читати з буфера передавача), проте SBUF — доступний.
PCON Керування енергоспоживанням 87H n-МОН 0XXXXXXX

КМОН 0XXX0000

Система команд[ред.ред. код]

Приклади програм[ред.ред. код]

Застосування[ред.ред. код]

Листівка планетарного всюдихода Nanokhod
  • Марсохід Nanokhod використовує для управління мікроконтролер TEMIC 80C154, який являє собою МК Intel 80C52 із збільшеною кількістю пам'яті програм, який в свою чергу являє собою 80С51 із збільшеною кількістю пам'яті даних і додатковим таймером.[1] [2] [3]

Сімейство мікроконтролерів та аналоги[ред.ред. код]

Відмінності між контролерами у межах сімейства[ред.ред. код]

Зарубіжні мікроконтролери, основані на ядрі 8051[ред.ред. код]

Російський аналог - МК51[ред.ред. код]

Компілятори та емулятори MCS-51[ред.ред. код]

Посилання[ред.ред. код]

  • MCS® 51 Microcontroller Family User's Manual, February 1994, Publication number 121517, Intel Corporation; PDF.

Примітки[ред.ред. код]

  1. http://plit.de/asem-51/asemmars.htm
  2. http://www.esa.int/TEC/Robotics/SEMXSO8LURE_0.html
  3. http://www.datasheetcatalog.org/datasheets/270/45052_DS.pdf