Микроконтроллеры. Обзор семейства MCS-51.

  Общие требования

    На современном рынке примерно по 30% занимают контроллеры разных производителей и архитектур. Старое семейство MCS-51 (8051) от компаний Motorola, Microchip, Intel, Zilog, Atmel и многих других, семейство PIC от фирмы Microchip и семейство AVR от фирмы Atmel. В процессе миниатюризации функциональные блоки, которые в обычных компьютерных системах размещались в отдельных интегральных схемах (процессор, память, порты ввода \ вывода, таймеры, контроллеры прерываний и пр.) стали объединять на одном кристалле. Так появились микроконтроллеры или, как их принято называть в отечественной литературе, однокристальные ЭВМ. Основные требования, которые потребители предъявляют к управляющим блокам приборов (микроконтроллерам) можно сформулировать следующим образом:

    В отличие от универсальных компьютеров к управляющим контроллерам, как правило, не предъявляются высокие требования к производительности и программной совместимости. Выполнение всех этих довольно противоречивых условий одновременно затруднительно, поэтому развитие и совершенствование техники пошло по пути специализации и в настоящее время количество различных моделей управляющих микроконтроллеров чрезвычайно велико.

  Классификация и структура микроконтроллеров

В настоящее время выпускается целый ряд типов МК. Все эти приборы можно условно разделить на три основных класса:

    Наиболее распространенным представителем семейства МК являются 8-разрядные приборы, широко используемые в промышленности, бытовой и компьютерной технике. Они прошли в своем развитии путь от простейших приборов с относительно слаборазвитой периферией до современных многофункциональных контроллеров, обеспечивающих реализацию сложных алгоритмов управления в реальном масштабе времени. Причиной жизнеспособности 8-разрядных МК является использование их для управления реальными объектами, где применяются, в основном, алгоритмы с преобладанием логических операций, скорость обработки которых практически не зависит от разрядности процессора.

   Росту популярности 8-разрядных МК способствует постоянное расширение номенклатуры изделий, выпускаемых такими известными фирмами, как Motorola, Microchip, Intel, Zilog, Atmel и многими другими. Современные 8-разрядные МК обладают, как правило, рядом отличительных признаков. Основные из них представлены ниже:

    При модульном принципе построения все МК одного семейства содержат процессорное ядро, одинаковое для всех МК данного семейства, и изменяемый функциональный блок, который отличает МК разных моделей. Структура модульного МК приведена на рис.1.

module001

Рис.1. Модульная организация микроконтроллера.

Процессорное ядро включает в себя:

Основными характеристиками процессорного ядра МК являются:

    Изменяемый функциональный блок включает в себя модули памяти различного типа и объема, порты ввода/вывода, модули тактовых генераторов (Г), таймеры. В относительно простых МК модуль обработки прерываний входит в состав процессорного ядра. В более сложных МК он представляет собой отдельный модуль с развитыми возможностями. В состав изменяемого функционального блока могут входить и такие дополнительные модули как компараторы напряжения, аналого-цифровые преобразователи (АЦП) и другие.

Различия CISC  и RISC архитектуры.

По системе команд и способов адресации операндов процессорное ядро современных 8-разрядных МК реализует один из двух принципов построения процессоров:

   CISC-процессоры выполняют большой набор команд с развитыми возможностями адресации, давая разработчику возможность выбрать наиболее подходящую команду для выполнения необходимой операции. В применении к 8-разрядным МК процессор с CISC-архитектурой может иметь однобайтовый, двухбайтовый и трехбайтовый (редко четырехбайтовый) формат команд. Время выполнения команды может составлять от 1 до 12 циклов. К МК с CISC-архитектурой относятся МК фирмы Intel с ядром MCS-51, которые поддерживаются в настоящее время целым рядом производителей, МК семейств НС05, НС08 и НС11 фирмы Motorola и ряд других.

   В процессорах с RISC-архитектурой набор исполняемых команд сокращен до минимума. Для реализации более сложных операций приходится комбинировать команды. При этом все команды имеют формат фиксированной длины (например, 12, 14 или 16 бит), выборка команды из памяти и ее исполнение осуществляется за один цикл (такт) синхронизации. Система команд RISC-процессора предполагает возможность равноправного использования всех регистров процессора. Это обеспечивает дополнительную гибкость при выполнении ряда операций. К МК с RISC-процессором относятся МК AVR фирмы Atmel, МК PIC16 и PIC17 фирмы Microchip и другие.

На первый взгляд, МК с RISC-процессором должны иметь более высокую производительность по сравнению с CISC МК при одной и той же тактовой частоте внутренней магистрали. Однако на практике вопрос о производительности более сложен и неоднозначен.

    Для организации процессов выборки и исполнения команды в современных 8-разрядных МК применяется одна из двух архитектур МПС: фон-неймановская (принстонская) или гарвардская. Гарвардская архитектура почти не использовалась до конца 70-х годов, пока производители МК не поняли, что она дает определенные преимущества разработчикам автономных систем управления. Разница между архитектурами состоит в том, что фон-неймановская работает собщей зоной памяти, где хранятся коды программы, данные и стековая область, а в гарвардской предусматривается отдельно адресуемая область для программного кода, ОЗУ и ЭСППЗУ (EEPROM). В микроконтроллерах для реализации большинства алгоритмов управления такие преимущества фон-неймановской архитектуры как гибкость и универсальность не имеют большого значения. Анализ реальных программ управления показал, что необходимый объем памяти данных   МК, используемый для хранения промежуточных результатов, как правило, на порядок меньше требуемого объема памяти программ. В этих условиях использование единого адресного пространства приводило к увеличению формата команд за счет увеличения числа разрядов для адресации операндов. Применение отдельной небольшой по объему памяти данных способствовало сокращению длины команд и ускорению поиска информации в памяти данных. Кроме того, гарвардская архитектура обеспечивает потенциально более высокую скорость выполнения программы по сравнению с фон-неймановской за счет возможности реализации параллельных операций. Выборка следующей команды может происходить одновременно с выполнением предыдущей, и нет необходимости останавливать процессор на время выборки команды. Этот метод реализации операций позволяет обеспечивать выполнение различных команд за одинаковое число тактов, что дает возможность более просто определить время выполнения циклов и критичных участков программы.

    В настоящее время наиболее популярны микроконтроллеры Atmel серии АТ89, которые по ряду характеристик превзошли очень известные PIC – микроконтроллеры в период с 2003 по 2010год, благодаря широкой доступности и комфортной ценовой политике. В модельном ряду на тот период были востребованы ниже приведенные модели :

АТ89С1051 — МК с 1кБ флеш-памяти программ

Особенности
• Объем флеш-памяти программ: 1K байт
- Количество циклов перезаписи: 1000
• Рабочий диапазон напряжения питания от 2,7 до 6 В
• Полностью статическая работа: от 0 Гц до 24 МГц
• Двунаправленная блокировка памяти программы
• 64 байт ОЗУ
• 15 программируемых линий ввода / вывода
• Один 16-разрядный таймер / счетчик
• Три источника прерываний
• Прямые светодиодные выходы
• Встроенный аналоговый компаратор
• Режимы ожидания низкого энергопотребления и питания

АТ89С2051 — МК с 2кБ флеш-памяти программ

Особенности
• Объем флеш-памяти программы: 2 Кбайта
- Количество циклов перезаписи: 1000
• Рабочий диапазон напряжений питания от 2,7 до 6 В
• Полностью статическая работа: от 0 Гц до 24 МГц
• Двухуровневая блокировка программной памяти
• 128 байт ОЗУ
• 15 программируемых линий ввода / вывода
• Два 16-разрядных таймера / счетчика
•Шесть источников прерываний
•Программируемый последовательный канал UART
•Прямые светодиодные выходы
•Встроенный аналоговый компаратор
•Маломощные режимы ожидания и выключения питания

АТ89С4051 — МК с 4кБ флеш-памяти программ

Особенности
Объем флеш-памяти программы: 4 Кбайта
- Выносливость: 1000 циклов записи / стирания
• Рабочий диапазон от 3,0 до 6 В
• Полностью статическая работа: от 0 Гц до 24 МГц
• Двунаправленная блокировка памяти программы
128 байты ОЗУ
• 15 программируемых линий ввода / вывода
• Два 16-битных таймера / счетчика
• Шесть источников прерываний
• Программируемый последовательный канал UART
• Прямые светодиодные выходы
Встроенный аналоговый компаратор
• Режимы ожидания низкого энергопотребления и питания

    Все вышеуказанные контроллеры выпускаются в 20 пиновом корпусе. Расширенная версия включает в себя группу МК АТ89С51-АТ89С55. Эта группа выпускалась в 40-пиновых корпусах и имела 4 полнофункциональных порта ввода-вывода. Размерность флеш-памяти программ от 4кБайт до 20кБайт, возможность подключения внешнего ОЗУ и прочее. AVR функционируют в широком диапазоне питающих напряжений от 1,8 до 6,0 Вольт. Энергопотребление в активном режиме зависит от величины напряжения питания, от частоты, на которой работает АТ89 и от конкретного типа микроконтроллера. Подробные спецификации обычно приводятся в оригинальной технической документации Atmel Corp. Температурные диапазоны работы микроконтроллеров АТ89 — коммерческий (0С…70С) и индустриальный (-40С…+85С). К сожалению, корпорация Atmel не выпускает и не планирует выпускать AVR для работы в автомобильном (-40С…+125С) и военном (-55С…+125С) температурных диапазонах. Гарвардская архитектура AVR реализует полное логическое и физическое разделение не только адресных пространств, но и информационных шин для обращения к памяти программ и к памяти данных, причем способы адресации и доступа к этим массивам памяти также различны. Подобное построение уже ближе к структуре цифровых сигнальных процессоров и обеспечивает существенное повышение производительности. Центральный процессор работает одновременно как с памятью программ, так и с памятью данных; разрядность шины памяти программ расширена до 16 бит.

    У микроконтроллеров семейства АТ89С короткая команда выполняется за 12 тактов генератора (1 машинный цикл), в течение которого процессор последовательно считывает код операции и исполняет ее. В PIC-контроллерах фирмы Microchip, где уже реализован конвейер, короткая команда выполняется в течение 8 периодов тактовой частоты (2 машинных цикла). За это время последовательно дешифрируется и считывается код операции, исполняется команда, фиксируется результат и одновременно считывается код следующей операции (одноуровневый конвейер). Поэтому в общем потоке команд одна короткая команда реализуется за 4 периода тактовой частоты или за один машинный цикл. В микроконтроллерах AVR тоже используется одноуровневый конвейер при обращении к памяти программ и короткая команда в общем потоке выполняется, как и в PIC-контроллерах, за один машинный цикл. Главное же отличие состоит в том, что этот цикл у AVR составляет всего один период тактовой частоты. Для сравнения, на рисунке ниже приведены временные диаграммы при выполнении типовой команды для различных микроконтроллерных платформ.

module002

   Это одно из двух глобальных неудобств МК с ядром команд MCS-51. Практически все команды работы с данными используют регистр-аккумулятор, что иногда серьезно увеличивает время работы этих команд, в отличие от регистрового файла в семействе AVR. Вторым неудобством можно считать параллельный метод прошивки флеш-памяти программ с применением двух видов напряжений +5В и +12В. Прошивка через интерфейс SPI стала возможна при появлении серии МК АТ89S xxx

Система команд микроконтроллеров MCS-51

   Система команд ОМЭВМ предоставляет большие возможности обработки данных, обеспечивает реализацию логических, арифметических операций, а также управление в режиме реалиного времени. Реализована побитовая, потетрадная (4 бита), побайтовая (8 бит) и 16-разрядная обработка данных.

   БИС семейства MCS-51 — 8-разрядная ОМЭВМ: ПЗУ, ОЗУ, регистры специального назначения, АЛУ и внешние шины имеют байтовую организацию. Двухбайтовые данные используются только регистром-указателем (DPTR) и счетчиком команд (РС). Следует отметить, что регистр-указатель данных может быть использован как двухбайтовый регистр DPTR или как два однобайтовых регистра специального назначения DPH и DPL. Счетчик команд всегда используется как двухбайтовый регистр.

    Набор команд ОМЭВМ имеет 42 мнемонических обозначения команд для конкретизации 33 функций этой системы.

    Синтаксис большинства команд ассемблерного языка состоит из мнемонического обозначения функции, всед за которым идут операнды, указывающие методы адресации и типы данных. Различные типы данных или режимы адресации определяются установленными операндами, а не изменениями мнемонических обозначений.

Систему команд условно можно разбить на пять групп:

Существуют следующие типы адресации операндов-источников:

Таблица обозначений и символов, используемых в системе команд

Обозначение, символ Назначение
А Аккумулятор
Rn Регистры текущего выбранного банка регистров
r Номер загружаемого регистра, указанного в команде
direct Прямо адресуемый 8-битовый внутренний адрес ячейка данных, который может быть ячейкой внутреннего ОЗУ данных (0-127) или SFR (128-255)
@Rr Косвенно адресуемая 8-битовая ячейка внутреннего ОЗУ данных
data8 8-битовое непосредственное данное, входящее в КОП
dataH Старшие биты (15-8) непосредственных 16-битовых данных
dataL Младшие биты (7-0) непосредственных 16-битовых данных
addr11 11-битовый адрес назначения
addrL Младшие биты адреса назначения
disp8 8-битовый байт смещения со знаком
bit Бит с прямой адресацией, адрес которого содержит КОП, находящийся во внутреннем ОЗУ данных или SFR
a15, a14…a0 Биты адреса назначения
(Х) Содержимое элемента Х
((Х)) Содержимое по адресу, хранящемуся в элементе Х
(Х)[M] Разряд М элемента Х
+

*
/
AND
OR
XOR
/X
Операции:
сложения
вычитания
умножения
деления
логического умножения (операция И)
логического сложения (операция ИЛИ)
сложения по модулю 2 (исключающее ИЛИ)
инверсия элемента Х

 Мнемонические обозначения функций однозначно связаны с конкретными комбинациями способов адресации и типами данных. Всего в системе команд возможно 111 таких сочетаний. В таблице приведен перечень команд, упорядоченных по алфавиту.

Мнемоника Функция Флаги
Команда ACALL <addr 11> Абсолютный вызов подпрограммы
Команда ADD A, <байт-источник> Сложение AC, C, OV
Команда ADDC A, <байт-источник> Сложение с переносом AC, C, OV
Команда AJMP <addr 11> Абсолютный переход
Команда ANL <байт-назначения>, <байт-источникa> Логическое «И»
Команда ANL C, <байт-источникa> Логическое «И» для переменных-битов C
Команда CJNE <байт-назначения>, <байт-источник>, <смещение> Сравнение и переход, если не равно C
Команда CLR A Сброс аккумулятора
Команда CLR <bit> Сброс бита C, bit
Команда CPL A Инверсия аккумулятора
Команда CPL <bit> Инверсия бита C, bit
Команда DA A Десятичная коррекция аккумулятора для сложения AC, C
Команда DEC <байт> Декремент
Команда DIV AB Деление C, OV
Команда DJNZ <байт>, <смещение> Декремент и переход, если не равно нулю
Команда INC <байт> Инкремент
Команда INC DPTR Инкремент указателя данных
Команда JB <bit>, <re18> Переход, если бит установлен
Команда JBC <bit>, <re18> Переход, если бит установлен и сброс этого бита
Команда JC <re18> Переход, если перенос установлен
Команда JMP @A+DPTR Косвенный переход
Команда JNB <bit>, <re18> Переход, если бит не установлен
Команда JNC <re18> Переход, если перенос не установлен
Команда JNZ <re18> Переход, если содержимое аккумулятора не равно нулю
Команда JZ <re18> Переход, если содержимое аккумулятора равно 0
Команда LCALL <addr16> Длинный вызов
Команда LJMP <addr16> Длинный переход
Команда MOV <байт-назначения>, <байт-источника> Переслать переменную-байт
Команда MOV <бит-назначения>, <бит-источника> Переслать бит данных C
Команда MOV DPTR,#data16 Загрузить указатель данных 16-битовой константой
Команда MOVC A,@A+(<R16>) Переслать байт из памяти программ
Команда MOVX <байт приемника>, <байт источника> Переслать во внешнюю память (из внешней памяти) данных
Команда MUL AB Умножение C, OV
Команда NOP Нет операции PC
Команда ORL <байт-назначения>, <байт-источникa> Логическое «ИЛИ» для перемнных-байтов
Команда ORL C, <бит источникa> Логическое «ИЛИ» для переменных-битов C
Команда POP <direct> Чтение из стека
Команда PUSH <direct> Запись в стек
Команда RET Возврат из подпрограммы
Команда RETI Возврат из прерывания
Команда RL A Сдвиг содержимого аккумулятора влево
Команда RLC A Сдвиг содержимого аккумулятора влево через флаг переноса
Команда RR A Сдвиг содержимого аккумулятора вправо
Команда RRC A Сдвиг содержимого аккумулятора вправо через флаг переноса C
Команда SETB <bit> Установить бит C
Команда SJMP <метка> Короткий переход
Команда SUBB A, <байт источника> Вычитание с заемом AC, C, OV
Команда SWAP A Обмен тетрадами внутри аккумулятора
Команда XCH A, <байт> Обмен содержимого аккумулятора с переменной-байтом
Команда XCHD A,@R1 Обмен тетрадой
Команда XRL <байт-назначения>, <байт-источникa> Логическое «ИСКЛЮЧАЮЩЕЕ ИЛИ» для перемнных-байтов