Перейти к содержанию

Микроконтроллеры 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

КристаллПамять программОЗУЛинии ввода-выводаТаймерыОсобенности
80514 КБ ПЗУ128 байтов322исходное ядро семейства
AT89S528 КБ Flash, ISP256 байтов3234,0–5,5 В, до 33 МГц, сторожевой таймер, два DPTR, 8 источников прерываний; PDIP-40, PLCC-44, TQFP-44
AT89C20512 КБ Flash128 байтов1522,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.

С чего начать

  1. Система команд. Все 111 команд с длиной, временем выполнения и флагами, режимы адресации, карта кодов операций и примеры собраны на странице «Система команд 8051».
  2. Архитектура. Карта памяти, регистры SFR и их значения после сброса, порты, таймеры, UART и прерывания с примером инициализации — в статье «Архитектура 8051».
  3. Сравнение с другими ядрами. Как устроены 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 работает как мультиплексированная шина адреса и данных внешней памяти, внутренние подтяжки у него включаются сами.