Intel MCS-51: відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
Сторінка очищена
Мітка: очищення сторінки
Скасування редагування № 5253535 користувача 93.175.194.148 (обговорення)
Рядок 1:
[[Файл:Ic-photo-Intel--D8751H--(8051-MCU).png|right|400px|thumb|Контролер з сімейства MCS-51, Intel 8751H, з 4 Кб [[EPROM]] пам'яті програм]]
 
'''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 байт вбудованої пам'яті програм ([[ROM|доступної тільки на читання]]), до 256 байт вбудованої пам'яті даних ([[RAM|доступної на читання і запис]]), підтримка адресного простору у 64 Кб для пам'яті програм і 64 Кб для пам'яті даних, два-три 16-бітні таймери/лічильники, двосторонній [[УАПП]], 32 лінії двосторонніх портів введення-виведення, генератор [[Тактова частота|тактової частоти]].
 
= Характеристика мікроконтролера =
[[Зображення:Diag_bloques_8051.JPG|right|500px|thumb|Внутрішня архітектура мікроконтролерів MCS-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 постійна і складає <math>f_{BQ}/12</math>, де <math>f_{BQ}</math> — частота синхронізації ОМЕОМ.
* '''Режим 1''' - прийом/передача даних здійснюється у форматі восьмирозрядного [[УАПП]]. Швидкість залежить від частоти переповнення регістра лічильника
* '''Режим 2''' - режими 9-розрядного УАПП з постійною швидкістю обміну. Швидкість прийому/передачі програмно налаштовується на одну із двох можливих величин: <math>f_{BQ}/32</math> або <math>f_{BQ}/64</math>
* '''Режим 3''' - режими 9-розрядного УАПП з перемінною швидкістю обміну. Швидкість залежить від частоти переповнення регістра лічильника
 
{{Section stub}}
 
== Універсальний асинхронний прийомо-передавач (УАПП) ==
Вбудований [[UART|універсальний асинхронної приймач/передавач]] дозволяє досить просто перетворити мікроконтролер у послідовний інтерфейс вводу-виведення. За рахунок різноманітного способу підключення зовнішніх виходів напряму́ до внутрішніх регістірв зсуву і використання внутрішніх таймерів, можна реалізувати сполучення в багатьох режимах, включаючи синхронне і асинхронне. В деяких режимах можливе сполучення без використання зовнішніх компонентів. Режим сумісності з протоколом [[RS-485]] також можливий для реалізації, проте основною перевагою ядра 8051 є можливість підстроювання до існуючих послідовних протоколів управління приладами.
 
Якщо УАПП (і таймер при необхідно) налаштований, то для програміста лишається написати просту процедуру переривання для заповнення регістру передачі (викликатиметься кожен раз, коли останній біт регістра передачі "віддається" УАППом) і/або очистки/збереження даних в регістрі-приймачі. Для роботи основної програми залишається тільки кидати на стек дані для відправки і читати з стеку дані для прийому.
{{Section stub}}
 
== Система переривань ==
Всього у мікроконтрлера є 5 переривань:
# '''IE0'''
# '''TF0'''
# '''IE1'''
# '''TF1'''
# '''TI+RI'''
[[Зображення:Система_переривань_MCS-51.png]]
{{Section stub}}
 
= Програмістська модель =
== Архітектура пам'яті ==
{{Section stub}}
== Таблиця регістрів спеціальних функцій ==
[[Зображення:MFrey_SFR_MCS-51.svg|Розміщення регістрів спеціальних функцій у віртуальній пам'яті мікроконтролера|thumb]]
{| border="0" cellpadding="2"
!Позначення||Найменування||Адреса||Поч. значення||Примітка
|-
|bgcolor=#FF6620|'''ACC'''||Акумулятор||E0H||00H||Даний регістр означає те саме, що і A при програмуванні на асемблері, проте позначення А вказує на роботу з акумулятором, а позначення ACC вказує на роботу з байтом пам'яті. Відповідно, використання мнемоніки A дозволяє скоротити довжину інструкції.
|-
|bgcolor=#FF6620|'''B'''||Регістр B||F0H||00H||Регістр використовується мікроконтролером тільки в операціях множення/ділення. В усіх інших операціях його можна використовувати як загальний регістр
|-
|bgcolor=#FF6620|'''PSW'''||Регістр стану програми||D0H||00H||Його аналог у х86 — регістр прапорців [[FLAGS]]
|-
|'''SP'''||Покажчик стеку||81H||bgcolor=#DDDDDD|07H||
|-
|'''DPL'''||Молодший байт покажчика даних||82H||00H||rowspan=2| Дані регістри формують один 16-бітний віртуальний регістр DPTR.
|-
|'''DPH'''||Старший байт покажчика даних||83Н||00H
|-
|bgcolor=#FF6620|'''P0'''||Порт 0||80H||bgcolor=#DDDDDD|FFH||rowspan=4|Регістри-защіпки портів вводу-виводу
|-
|bgcolor=#FF6620|'''P1'''||Порт 1||90H||bgcolor=#DDDDDD|FFH
|-
|bgcolor=#FF6620|'''P2'''||Порт 2||A0H||bgcolor=#DDDDDD|FFH
|-
|bgcolor=#FF6620|'''P3'''||Порт 3||B0H||bgcolor=#DDDDDD|FFH
|-
|bgcolor=#FF6620|'''IP'''||Регістр пріоритетів переривань||B8H||bgcolor=#DDDDDD|XXX00000b
|-
|bgcolor=#FF6620|'''IE'''||Регістр дозволу переривань||A8H||bgcolor=#DDDDDD|0XX00000b
|-
|'''TMOD'''||Регістр режимів таймера/лічильника||89H||00H
|-
|bgcolor=#FF6620|'''TCON'''||Регістр керування таймера/лічильника||88H||00H
|-
|'''TH0'''||Таймер/лічильник 0 (старший байт)||8CH||00H
|-
|'''TL0'''||Таймер/лічильник 0 (молодший байт)||8AH||00H
|-
|'''TH1'''||Таймер/лічильник 1 (старший байт)||8DH||00H
|-
|'''TL1'''||Таймер/лічильник 1 (молодший байт)||8BH||00H
|-
|bgcolor=#FF6620|'''SCON'''||Керування послідовним портом||98H||00H
|-
|'''SBUF'''||Буфер послідовного порту||99H||bgcolor=#DDDDDD|Невизначено||Даний регістр, як і DPTR, є також віртуальним. При читанні замість даного регістру підставляється буфер приймача, при записі - буфер передавача. Дані буфери програмно недоступні (щоб програміст не зміг записати у буфер приймача і читати з буфера передавача), проте SBUF — доступний.
|-
|'''PCON'''||Керування енергоспоживанням||87H||bgcolor=#DDDDDD|[[n-МОН]] 0XXXXXXX
[[КМОН]] 0XXX0000
|}
{{Section stub}}
 
== Система команд ==
{{Section stub}}
== Приклади програм ==
{{Section stub}}
 
= Застосування =
[[Зображення:Nanokhod-flyer.png|right|thumb|Листівка планетарного всюдихода [[Nanokhod]]]]
* [[Марсохід]] [[Nanokhod]] використовує для управління мікроконтролер [[TEMIC 80C154]], який представляє собою МК [[Intel 80C52]] із збільшеною кількістю пам'яті програм, який в свою чергу представляє собою [[8051|80С51]] із збільшеною кількістю пам'яті даних і додатковим таймером.<ref>http://plit.de/asem-51/asemmars.htm</ref> <ref>http://www.esa.int/TEC/Robotics/SEMXSO8LURE_0.html</ref> <ref>http://www.datasheetcatalog.org/datasheets/270/45052_DS.pdf</ref>
 
{{Section stub}}
 
= Сімейство мікроконтролерів та аналоги =
== Відмінності між контролерами у межах сімейства ==
{{Section stub}}
== Зарубіжні мікроконтролери, основані на ядрі 8051 ==
{{Section stub}}
== Російський аналог - МК51 ==
{{Section stub}}
= Компілятори та емулятори MCS-51 =
{{Section stub}}
 
== Посилання ==
* ''MCS<sup>&reg;</sup> 51 Microcontroller Family User's Manual'', February 1994, Publication number 121517, Intel Corporation; [http://eeweb1.poly.edu/networks/specs/27238302.pdf PDF].
 
==Примітки==
<references />
 
[[Категорія:Мікроелектроніка]]
{{Intel processors}}
[[Категорія:Процесори Intel]]
 
[[ar:المتحكم الدقيق ثمانون واحد وخمسين]]
[[ca:Intel 8051]]
[[cs:Intel 8051]]
[[de:Intel MCS-51]]
[[el:Intel 8051]]
[[en:Intel MCS-51]]
[[es:Intel 8051]]
[[fr:Intel 8051]]
[[he:מיקרו-בקר 8051]]
[[id:Intel 8051]]
[[it:Intel 8051]]
[[ja:Intel 8051]]
[[ko:인텔 8051]]
[[nl:8051-microcontroller]]
[[pl:Intel 8051]]
[[pt:Intel 8051]]
[[ro:Intel MCS-51]]
[[ru:Intel 8051]]
[[sr:Intel 8051]]
[[sv:Intel 8051]]
[[th:อินเทล 8051]]
[[tr:8051]]
[[vi:Intel 8051]]
[[zh:Intel 8051]]