Intel MCS-51 (i8051) — сімейство мікроконтролерів, розроблених фірмою Intel 1980 року для використання у вбудованих системах. Дані мікроконтролери були досить популярними у 90-х роках, згодом їх витіснили розвиненіші аналоги фірм «Microchip Technology» і «Atmel». За рахунок вдалої реалізації мікроконтролера (вбудований УАПП, бітовий процесор i8051) велика кількість наявних на ринку мікроконтролерів має i8051 сумісні процесори, а за рахунок наявності великої кількості аналогів вивчення ядра MCS-51 є одним з перших кроків до вивчення сучасних мікропроцесорів у програмах курсів вищих навчальних закладів.
MCS-51 прийшли на заміну випущеним у 1976 році MCS-48 і на відміну від останніх мали зменшений час виконання команд (в 2,5 — 10 раз в залежності від умов експлуатації), збільшений обсяг вбудованої пам'яті, додаткові пристрої периферії, додаткові команди для програмування. За рахунок даних покращень, мікроконтролери стали зручнішими в програмуванні, дешевші в експлуатації. Наявність булевого процесора затвердила за даними пристроями галузь автоматизації виробництва, оскільки для управління часто використовуються саме полярні сигнали — ввімкнути/вимкнути двигун, запалити/вимкнути індикатор тощо.
Існує радянський клон мікропроцесора — МК51 (КР1816ВЕ51).
Характеристика мікроконтролера
Надалі буде розглядатись саме оригінальна версія мікроконтролера (якщо не обговорено інше), оскільки інші контролери принципово не відрізняються від оригінального MCS-51.
Енергоощадний режим (тільки у версіях на КМОН технології)
Вбудовані пристрої
Порти вводу-виводу
Чотири 8-розрядні порти Р0…Р3 можуть використовуватися:
Як 8-розрядні паралельні порти введення/виведення інформації;
Як 32 однорозрядні лінії введення/виведення;
При роботі з зовнішньою пам'яттю програм і даних;
В режимі альтернативних функцій (8 ліній порту Р3);
При програмуванні та перевірці внутрішньої пам'яті програм.
Послідовний порт може бути запрограмований на один з чотирьох режимів прийому/передачі шляхом програмування розрядів SM0 і SM1 регістра SCON.
Режим 0 — послідовний порт працює як восьмирозрядний регістр зсуву. Швидкість (частота) прийому/передачі в режимі 0 постійна і складає , де — частота синхронізації ОМЕОМ.
Режим 1 — прийом/передача даних здійснюється у форматі восьмирозрядного УАПП. Швидкість залежить від частоти переповнення регістра лічильника
Режим 2 — режими 9-розрядного УАПП з постійною швидкістю обміну. Швидкість прийому/передачі програмно налаштовується на одну із двох можливих величин: або
Режим 3 — режими 9-розрядного УАПП з перемінною швидкістю обміну. Швидкість залежить від частоти переповнення регістра лічильника
Вбудований універсальний асинхронний приймач/передавач дозволяє досить просто перетворити мікроконтролер у послідовний інтерфейс вводу-виводу. За рахунок різноманітного способу підключення зовнішніх виходів напряму́ до внутрішніх регістрів зсуву і використання внутрішніх таймерів, можна реалізувати сполучення в багатьох режимах, включаючи синхронне і асинхронне. В деяких режимах можливе сполучення без використання зовнішніх компонентів. Режим сумісності з протоколом RS-485 також можливий для реалізації, проте основною перевагою ядра 8051 є можливість підстроювання до дійсних послідовних протоколів керування приладами.
Якщо УАПП (і таймер за необхідності) налаштований, то для програміста лишається написати просту процедуру переривання для заповнення регістру передачі (викликатиметься кожен раз, коли останній біт регістра передачі «віддається» УАППом) і/або очищення/збереження даних в регістрі-приймачі. Для роботи основної програми залишається тільки записувати у стек дані для відправлення і читати зі стеку дані для приймання.
Цей регістр означає те саме, що і A при програмуванні на асемблері, проте позначення А вказує на роботу з акумулятором, а позначення ACC вказує на роботу з байтом пам'яті. Відповідно, використання мнемоніки A дозволяє скоротити довжину інструкції.
B
Регістр B
F0H
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 — доступний.
МарсохідNanokhod використовує для управління мікроконтролер TEMIC 80C154, який являє собою МК Intel 80C52 із збільшеною кількістю пам'яті програм, який в свою чергу являє собою 80С51 із збільшеною кількістю пам'яті даних і додатковим таймером.[2][3][4]
↑Архівована копія. Архів оригіналу за 31 травня 2010. Процитовано 17 жовтня 2010.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)
↑Архівована копія. Архів оригіналу за 27 жовтня 2008. Процитовано 17 жовтня 2010.{{cite web}}: Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title (посилання)