Микроконтроллеры 8051 (MCS-51)
8051 — 8-битный микроконтроллер Intel, ядро которого стало стандартом: семейство MCS-51 и совместимые кристаллы выпускают десятки производителей. Здесь — что умеет ядро, чем отличаются 8051, 8052, AT89S52 и AT89C2051, где найти систему команд и с чего начать.
8051 — первый представитель семейства Intel MCS-51 и ядро всех его микроконтроллеров (руководство Intel, глава 1). Мнемоники системы команд датированы 1980 годом, но ядро живёт до сих пор: совместимые кристаллы выпускали и выпускают многие производители, в том числе Atmel, теперь входящая в Microchip. Например, AT89S52 совместим с 80C51 и по системе команд, и по расположению выводов.
Коротко
- 8-битное ядро для задач управления с развитым битовым процессором — отдельными командами над одиночными битами.
- Раздельная память: до 64 КБ памяти программ и до 64 КБ внешней памяти данных, у самого 8051 — 4 КБ ПЗУ и 128 байтов ОЗУ на кристалле.
- Периферия 8051: 32 линии ввода-вывода с побитовой адресацией, два 16-битных таймера-счётчика, полнодуплексный UART, 5 векторов прерываний с двумя уровнями приоритета, встроенный генератор.
- Машинный цикл — 12 периодов генератора, 1 мкс при 12 МГц.
- 111 команд с длиной 1–3 байта — подробно в системе команд 8051.
Ядро и память
Память программ и память данных у 8051 разделены: у них свои адресные пространства и свои команды доступа. Внутреннее ОЗУ адресуется 8-битными адресами, что удобно для 8-битного процессора, а 16-битный указатель DPTR даёт доступ ко всей внешней памяти данных. Память программ можно только читать — командой MOVC; внешнюю память данных читают и пишут командой MOVX.
Первые 128 байтов внутреннего ОЗУ включают четыре банка регистров R0–R7 (00h–1Fh), область из 128 отдельно адресуемых бит (20h–2Fh) и ОЗУ общего назначения. Адреса 80h–FFh в прямой адресации отведены регистрам специальных функций (SFR): портам, таймерам, UART, регистрам A, B, PSW и указателям. После сброса процессор начинает выполнение с адреса 0000h, а обработчики прерываний расположены с шагом 8 байтов: 0003h — внешнее прерывание 0, 000Bh — Timer 0, 0013h — внешнее прерывание 1, 001Bh — Timer 1 и далее.
8051, 8052 и современные AT89
| Кристалл | Память программ | ОЗУ | Линии ввода-вывода | Таймеры | Особенности |
|---|---|---|---|---|---|
| 8051 | 4 КБ ПЗУ | 128 байтов | 32 | 2 | исходное ядро семейства |
| AT89S52 | 8 КБ Flash, ISP | 256 байтов | 32 | 3 | 4,0–5,5 В, до 33 МГц, сторожевой таймер, два DPTR, 8 источников прерываний; PDIP-40, PLCC-44, TQFP-44 |
| AT89C2051 | 2 КБ Flash | 128 байтов | 15 | 2 | 2,7–6 В, до 24 МГц, аналоговый компаратор, прямое управление светодиодами; PDIP-20, SOIC-20 |
Данные 8051 — из руководства Intel, AT89 — из даташитов Atmel 1919D и 0368H. Вариант 8052 отличается от 8051 вдвое большим ОЗУ — 256 байтов, старшие 128 из которых доступны только косвенной адресацией, — и третьим таймером Timer 2 с регистрами T2CON, TH2, TL2, RCAP2H и RCAP2L. У порта P0 открытый сток: используемый как обычный вход-выход, он требует внешних подтягивающих резисторов, а у P1–P3 подтяжки встроены. Программируют его внутрисхемно: при высоком уровне на RST программатор обменивается с кристаллом по линиям SCK, MOSI и MISO.
С чего начать
- Система команд. Все 111 команд с длиной, временем выполнения и флагами, режимы адресации, карта кодов операций и примеры собраны на странице «Система команд 8051».
- Архитектура. Карта памяти, регистры SFR и их значения после сброса, порты, таймеры, UART и прерывания с примером инициализации — в статье «Архитектура 8051».
- Сравнение с другими ядрами. Как устроены 8-битные AVR и 32-битные ARM Cortex-M, рассказано в соседних разделах; общий обзор семейств — на странице «Микроконтроллеры».
UART 8051 работает с уровнями логики; для связи с компьютером по COM-порту нужен преобразователь уровней — об этом в статье об интерфейсе RS-232.
Готовятся к публикации
Современные 8051: STC8, N76E003, CH552, EFM8 · SDCC и Keil C51
Частые вопросы
Чем 8052 отличается от 8051?
У 8052 256 байтов внутреннего ОЗУ вместо 128 и третий 16-битный таймер Timer 2 с регистрами T2CON, TH2, TL2, RCAP2H и RCAP2L. Старшие 128 байтов памяти адресуются только косвенно, через R0 и R1, потому что прямые адреса 80h–FFh заняты регистрами SFR. Система команд у них одна и та же.
Какой 8051 выбрать для первого проекта?
Классический вариант — AT89S52: 8 КБ Flash с внутрисхемным программированием по SPI-подобному интерфейсу, 256 байтов ОЗУ, 32 линии ввода-вывода, три таймера и сторожевой таймер в корпусе DIP-40. Для компактных устройств есть AT89C2051 в 20-выводном корпусе: 2 КБ Flash, 15 линий ввода-вывода и аналоговый компаратор.
Как прошить AT89S52?
Через последовательный интерфейс ISP: при высоком уровне на RST программатор передаёт команды по линиям SCK, MOSI и MISO. Сначала выполняется команда разрешения программирования, а перед записью новой программы — полное стирание кристалла (даташит AT89S52, раздел о последовательном программировании). Протокол близок к ISP у AVR, и программа avrdude знает AT89S52 — описание этого кристалла есть в её файле конфигурации.
Зачем порту P0 подтягивающие резисторы?
У AT89S52 и классического 8051 порт P0 — с открытым стоком: записанная в вывод единица переводит его в высокоимпедансное состояние, и без внешнего резистора на нём не будет высокого уровня. Порты P1–P3 имеют внутренние подтягивающие резисторы. Когда P0 работает как мультиплексированная шина адреса и данных внешней памяти, внутренние подтяжки у него включаются сами.
Смотрите также
- Система команд 8051111 команд с байтами, циклами и флагами, карта кодов, примеры
- Архитектура 8051Память, SFR, машинный цикл, порты, таймеры, UART и прерывания
- МикроконтроллерыAVR, ARM Cortex-M, ESP32, PIC, MSP430: архитектура и выбор
- AVRATmega, ATtiny, AVR Dx/Ex: семейства, прошивка, инструменты
- ARM Cortex-MЯдра M0–M85: архитектуры, FPU, DSP, MPU, TrustZone, выбор
- RS-232Уровни, распиновка DB9, нуль-модем, MAX3232, UART и AVR