Intel MCS-51 (i8051) — сімейство мікроконтролерів, розроблених фірмою 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 лінії двосторонніх портів введення-виведення, генератор тактової частоти.

Існує радянський клон мікропроцесора — МК51 (КР1816ВЕ51).

Характеристика мікроконтролера

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

Вбудовані пристрої

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

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

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

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

Система переривань Всього у мікроконтролера є 5 переривань: IE0 TF0 IE1 TF1 TI+RI

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

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

Архітектура пам'яті

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

ПозначенняНайменуванняАдресаПоч. значенняПриміткаACCАкумуляторE0H00HЦей регістр означає те саме, що і A при програмуванні на асемблері, проте позначення А вказує на роботу з акумулятором, а позначення ACC вказує на роботу з байтом пам'яті. Відповідно, використання мнемоніки A дозволяє скоротити довжину інструкції.BРегістр BF0H00HРегістр використовується мікроконтролером тільки в операціях множення/ділення. В усіх інших операціях його можна використовувати як загальний регістрPSWРегістр стану програмиD0H00HЙого аналог у х86 — регістр прапорців FLAGSSPПокажчик стеку81H07HDPLМолодший байт покажчика даних82H00H Дані регістри формують один 16-бітний віртуальний регістр DPTR.DPHСтарший байт покажчика даних83Н00HP0Порт 080HFFHРегістри-защіпки портів вводу-виводуP1Порт 190HFFHP2Порт 2A0HFFHP3Порт 3B0HFFHIPРегістр пріоритетів перериваньB8HXXX00000bIEРегістр дозволу перериваньA8H0XX00000bTMODРегістр режимів таймера/лічильника89H00HTCONРегістр керування таймера/лічильника88H00HTH0Таймер/лічильник 0 (старший байт)8CH00HTL0Таймер/лічильник 0 (молодший байт)8AH00HTH1Таймер/лічильник 1 (старший байт)8DH00HTL1Таймер/лічильник 1 (молодший байт)8BH00HSCONКерування послідовним портом98H00HSBUFБуфер послідовного порту99HНевизначеноЦей регістр, як і DPTR, є також віртуальним. При читанні замість даного регістру підставляється буфер приймача, при записі — буфер передавача. Дані буфери програмно недоступні (щоб програміст не зміг записати у буфер приймача і читати з буфера передавача), проте SBUF — доступний.PCONКерування енергоспоживанням87Hn-МОН 0XXXXXXX КМОН 0XXX0000

Система команд

Приклади програм

Застосування

Марсохід Nanokhod використовує для управління мікроконтролер TEMIC 80C154, який являє собою МК Intel 80C52 із збільшеною кількістю пам'яті програм, який в свою чергу являє собою 80С51 із збільшеною кількістю пам'яті даних і додатковим таймером.http://www.datasheetcatalog.org/datasheets/270/45052_DS.pdf

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

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

Мікроконтролери, засновані на ядрі 8051 Atmel: AT89C51, AT89S51, AT83C5134 Infineon: XC800 NXP: NXP700 and NXP900 series Silicon Labs: C8051 series Texas Instruments: CC111x, CC24xx and CC25xx families of RF SoCs

Компілятори та емулятори MCS-51

Small Device C Compiler (SDCC) — вільний крос-компілятор мови програмування C.

Примітки

Посилання MCS® 51 Microcontroller Family User's Manual, February 1994, Publication number 121517, Intel Corporation; PDF.