Настройка оборудования и программного обеспечения

Микроконтроллеры семейства mcs51. Микроконтроллеры MCS–51

У истоков производства микроконтроллеров стоит фирма Intel с семействами восьмиразрядных микроконтроллеров 8048 и 8051. Архитектура MCS-51 получила свое название от первого представителя этого семейства - микроконтроллера 8051, выпущенного в 1980 году на базе технологии HMOS. Удачный набор периферийных устройств, возможность гибкого выбора внешней или внутренней программной памяти и приемлемая цена обеспечили этому микроконтроллеру успех на рынке. С точки зрения технологии микроконтроллер 8051 являлся для своего времени очень сложным изделием - в кристалле было использовано 128 тыс. транзисторов, что в 4 раза превышало количество транзисторов в 16-разрядном микропроцессоре 8086.

Основными элементами базовой архитектуры являются:
- 8-разрядное АЛУ на основе аккумуляторной архитектуры;
- 4 банка регистров, по 8 в каждом;
- встроенная память программ 4Кбайт;
- внутреннее ОЗУ 128 байт;
- булевый процессор
-2 шестнадцатиразрядных таймера;
- контроллер последовательного канала (UART);
- контроллер обработки прерываний с двумя уровнями приоритетов;
- четыре 8-разрядных порта ввода/вывода, два из которых используются в качестве шины адреса/данных для доступа к внешней памяти программ и данных;
- встроенный тактовый генератор.

Именно этот микроконтроллер наиболее хорошо известен разработчикам и является популярным средством управления в устройствах самого широкого круга. Имеется множество эмуляторов, отладчиков и программаторов микросхем 8051, поэтому с разработкой программного обеспечения нет никаких трудностей.

Следующим принципиальным шагом в развитии MCS-51 стал перевод технологии изготовления на CHMOS. Это позволило реализовать режимы Idle и Power Down, позволившие резко снизить энергопотребление кристалла и открывшие дорогу к применению микроконтроллера в энергозависимых приложениях, например, в автономных приборах с батарейным питанием.

И последним принципиальным этапом развития этого направления фирмой Intel в рамках 8-битной архитектуры стал выпуск микроконтроллеров 8xC51FA/FB/FC, которые для краткости часто обозначаются как 8xC51FX. Главной отличительной особенностью этой группы кристаллов является наличие у них массива программируемых счетчиков (PCA). Структурная схема PCA представлена на рис.2.

В состав PCA входят:

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

16-битная выборка значения таймера по положительному фронту внешнего сигнала;
16-битная выборка значения таймера по отрицательному фронту внешнего сигнала;
16-битная выборка значения таймера по любому фронту внешнего сигнала;
16-битный программный таймер;
16-битное устройство скоростного вывода (HSO);
8-битный ШИМ

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

Изначально наиболее "узкими" местами архитектуры MCS-51 были 8-разрядное АЛУ на базе аккумулятора и относительно медленное выполнение инструкций (для выполнения самых быстрых инструкций требуется 12 периодов тактовой частоты). Это ограничивало применение микроконтроллеров семейства в приложениях, требующих повышенного быстродействия и сложных вычислений (16- и 32- битовых). Насущным стал вопрос принципиальной модернизации старой архитектуры. Проблема модернизации осложнялась тем, что к началу 90-х годов уже была создана масса наработок в области программного и аппаратного обеспечения, и одной из основных задач разработки новой архитектуры была реализация аппаратной и программной совместимости со старыми разработками на базе MCS-51. Для решения этой задачи была создана совместная группа из специалистов компаний Intel и Philips. В результате в 1995 г. появилось 2 существенно отличающихся семейства: MCS-251/151 у Intel и 51XA у Philips (на последнем мы остановимся ниже).

Основные характеристики архитектуры MSC-251:

24-разрядное линейное адресное пространство, обеспечивающее адресацию до 16M памяти (выпускаемые микроконтроллеры семейства MCS-251 имеют адресное пространство памяти объемом 256К);
Система команд микроконтроллеров семейства MCS-251 содержит все 111 команд, входящих в систему команд микроконтроллеров семейства MCS-51 ("старые" команды), и, кроме того, в нее входят 157 "новых" команд. Коды некоторых новых команд имеют формат 4 байт.
Перед использованием микроконтроллера его необходимо сконфигурировать, т.е. с помощью программатора "прожечь" конфигурационные байты, определяющие, какой из наборов инструкций станет активным после включения питания. Если установить набор инструкций MCS-51, то в этом случае MSC-251 будет совместим с MCS-51 на уровне двоичного кода. Такой режим называется Binary Mode. Однако расширенные инструкции в этом режиме также доступны через "форточку" - зарезервированный код инструкции 0A5h. Естественно, длина каждой расширенной инструкции увеличивается в таком случае на 1 байт. Если же изначально установить набор расширенных инструкций, то в этом случае программы, написанные для MCS-51 потребуют перекомпиляции на кросс-средствах для MCS-51, т.к. теперь уже стандартные инструкции будут доступны через ту же "форточку" 0A5h и длина их также увеличится на 1 байт. Такой режим называется Source Mode. Он позволяет с максимальной эффективностью использовать расширенные инструкции и достигнуть наибольшего быстродействия, но требует переработки программного обеспечения.
регистровая архитектура, допускающая обращение к регистрам как к байтам, словам и двойным словам;
страничный режим адресации для ускорения выборки инструкций из внешней программной памяти;
очередь инструкций;
расширенный набор команд, включающий 16-битовые арифметические и логические инструкции;
расширенное адресное пространство стека до 64К;
выполнение самой быстрой инструкции за 2 такта;
совместимость на уровне двоичного кода с программами для MCS-51.

Для пользователей, ориентированных на применение микроконтроллеров MCS-251 в качестве механической замены MCS-51 фирма Intel выпускает микроконтроллеры MCS-251 с уже запрограммированными битами конфигурации в состоянии Binary Mode. Такие микроконтроллеры получили индекс MCS-151.

Помимо самой Intel микроконтроллеры MCS-251 по ее лицензии выпускает компания Temic Semiconductors.

Универсальная последовательная шина (Universal Serial Bus или USB), распространяет технологию Plug-and-Play на внешние устройства ввода/вывода, применяемые на современных высокопроизводительных персональных компьютерах.

Для того, чтобы обеспечить возможность подключения разнообразных периферийных устройств, в стандарте USB определены четыре режима передачи: Управляющий, Изохронный, Импульсный и передача массивов. Каждое периферийное устройство должно поддерживать управляющий режим для передачи параметров конфигурации, команд и информации о состоянии устройства. Изохронная передача обеспечивает гарантированный доступ к шине, постоянную пропускную способность и устойчивость к ошибкам, этот режим передачи может применяться в устройствах аудиовывода и компьютерной телефонии. Импульсная передача предназначена для устройств ввода типа мыши, джойстика или клавиатуры, передающих информацию редко и небольшими порциями, но с ограниченным периодом обслуживания. Передача массивов позволяет устройствам типа сканеров, факсов или цифровых камер передавать большие массивы данных в персональный компьютер, как только освобождается канал шины.

Основные характеристики продукта

Полная совместимость со "Спецификацией Universal Serial Bus 1.0"
Встроенный USB transceiver Serial Bus Interface Engine (SIE)
Четыре очереди FIFO для передачи
Три 16-байтных очереди FIFO
Четыре очереди FIFO для приема
Три 16-байтных очереди FIFO
Одна настраиваемая очередь FIFO (до 1024 байт)
Автоматическое управление приемом/передачей в очередях FIFO
Операции остановки/возобновления
Три вектора прерывания шины USB
Цикл блокировки фазы
Скорости передачи данных: 12 Мбит/сек и 1,5 Мбит/сек
Режим с замедленным циклом
Внешнее адресное пространство емкостью 256 Кбайт
Энергосберегающие режимы: ожидание и отключение питания
Задаваемые пользователем параметры
Ожидание в реальном времени
1 Кбайт оперативной памяти на кристалле
Четыре порта ввода/вывода
Программируемый массив счетчиков (PCA)
Стандартный (MCS 51) микроконтроллер UART
Аппаратный сторожевой таймер
Три 16-разрядных таймера/счетчика с гибкими возможностями
Совместимость с набором команд микроконтроллеров архитектуры MCS 51 и MCS 251
Архитектура микроконтроллера MCS 251, основанная на регистрах
Рабочая частота 6 или 12 МГц

Контроллер 8x930Hx имеет дополнительные характеристики:

Концентратор USB
Возможности управления концентратором USB
Управление соединением
Обнаружение соединения/разрыва связи с устройством вывода
Управление питанием, включая остановку/возобновление
Обнаружение и восстановление сбоев шины
Поддержка полноскоростных и низкоскоростных устройств вывода
Выходной контакт для переключения питания порта
Входной контакт для обнаружения перегрузки

Четыре различных режима передачи данных USB обеспечиваются совместной работой трех элементов: Хост, Концентратор, Функциональное устройство. Хост контролирует передачу по шине содержательной и управляющей информации. Функциональные устройства расширяют хост-системы. Сюда включаются типичные виды работы с PC: ввод с клавиатуры или джойстика, вывод на монитор; а также более сложные виды деятельности, такие как цифровая телефония и передача изображений. Для управления функциональными устройствами спроектирован микроконтроллер Intel 8x930Ax. Наконец, концентраторы представляют собой точку расширения USB, с помощью которой обеспечивается доступ к другим функциональным устройствам. Микроконтроллер Intel 8x930Hx, в котором совмещены функции управления функциональным устройством и концентратором USB, является первым серийным концентратором USB, предназначенным для современных периферийных устройств PC.

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

Кабель шины USB состоит всего из четырех проводов: Vbus, D+, D- и GND - чем достигается упрощение и единообразие соединения. Этой же цели служит единый стандартный коннектор для подключения периферийных устройств к шине USB. Данные по-разному передаются по кабелям D+ и D-: либо на полной скорости 12 Мбит/сек, либо на низкой скорости 1,5 Мбит/сек. Приемопередатчик встроен в кристалл, поэтому необходимость во внешних электронных цепях отсутствует. Исключение составляет терминальный нагрузочный резистор на обоих линиях D+ и D-, который необходим для определения типа устройства: высокоскоростное или низкоскоростное.

Обзор семейства
Семейство Intel 8x930 состоит из двух однокристальных контроллеров.

Контроллер Intel 8x930Ax представляет собой 8-разрядное устройство, которое основано на архитектуре микроконтоллера MCS 251 и предназначено для работы с периферийными устройствами, подключаемыми к шине USB. С другой стороны, в 8x930Hx использовано то же ядро микроконтроллера MCS 251 плюс расширенные возможности встроенного концентратора шины USB. Применение архитектуры MCS 251 в обоих контроллерах шины USB дает следующие преимущества:

Высокая производительность
Применение смешанных типов памяти и адресации
Низкое энергопотребление
Низкий уровень шума
Эффективная поддержка языков высокого уровня
Расширенный набор команд
Встроенные возможности

В качестве команд для 8x930Ax можно использовать инструкции как из набора для микроконтроллера MCS 51, так и из набора для микроконтроллера MCS 251. Такой подход сохраняет инвестиции пользователей в программное обеспечение и выжимает максимум производительности из приложений.

Микроконтроллеры 8x930 настолько насыщены различными встроенными средствами, что они выглядят мощнее, нежели просто микроконтроллеры. Массив программируемых счетчиков (PCA) придает гибкость приложениям, которым требуется сравнение или захват данных в реальном времени, высокоскоростной обмен данными или широтно-импульсная модуляция. Кроме того, в состав контроллера вошли расширенный последовательный порт, три 16-разрядных таймера/счетчика, аппаратный сторожевой таймер, четыре 8-разрядных порта ввода/вывода, а также предусмотрены два энергосберегающих режима: ожидание и отключение питания.

Контроллеры семейства 8x930Ax оснащены 1 Кбайт памяти и могут быть использованы в вариантах без постоянной памяти, либо с постоянной памятью емкостью 8 или 16 Кбайт. Они могут адресовать до 256 Кбайт внешней памяти для размещения команд и данных и 40 байт регистров общего назначения, которые располагаются в центральном процессоре как регистровый файл. В зависимости от используемой комбинации в регистровом файле могут располагаться 16 байтовых регистров, 16 двухбайтовых регистров и 10 четырехбайтовых регистров.

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

Оба контроллера 8x930 оснащены восемью очередями FIFO для поддержки внутренних устройств вывода: четыре очереди для передачи и четыре очереди для приема. Четыре очереди FIFO для приема/передачи поддерживают четыре оконечных функциональных устройства (от 0 до 3). Очередь 0 состоит из 16 байт и предназначена для передачи управляющей информации. Очередь 1 относитс к категории настраиваемых пользователем и имеет емкость до 1024 байт. Очереди 2 и 3 состоят из 16 байт каждая и могут использоваться для передачи информации в импульсном, изохронном и режиме передачи массивов. В случае использования контроллера 8x930Hx указанные очереди усиливаются парой очередей FIFO для входных устройств. Эти очереди в контроллере 8x930Hx поддерживаются дополнительным повторителем, который отвечает за повторную передачу потоков данных, генерируемых выходными устройствами.

Обзор архитектуры
Конструкционно реализацию USB в микроконтроллерах 8x930Ax и 8x930Hx можно разделить на четыре блока: очереди FIFO, блок интерфейса с функциональными устройствами, блок интерфейса с последовательной шиной и приемо-передатчик. Контроллер 8x930Hx имеет длополнительные блоки для управления функциями концентратора: блок интерфейса с концентратором и повторитель.

Очереди FIFO для приема и передачи на обоих контроллерах являются кольцевыми. Очереди поддерживают до двух раздельных наборов данных переменного размера и содержат регистры счетчика байтов, показывающие количество байтов в наборах данных. Очереди снабжены флажками, показывающими заполненность или пустоту очереди, а также способны повторять прием или передачу текущего набора данных. Блок интерфейса с функциональными устройствами (ИФУ) распределяет переданные или принятые данные USB в соответствии с типом передачи и состоянием очередей. Кроме того, блок ИФУ следит за состоянием транзакции, управляет очередями FIFO, при помощи запроса на прерывание сообщает о наступлении управляющих событий центральному процессору 8x930.

Блок интерфейса с последовательной шиной реализует протокол передачи USB: последовательно упорядочивает пакеты, осуществляет генерацию и распознавание сигнала, генерацию и проверку контрольных сумм, кодирование/декодирование данных по методу NRZI, побитовое заполнение, генерацию и распознавание идентификатора пакета (PID).

Интегрированный приемо-передатчик на микроконтроллерах USB согласован с простым четырех-жильным интерфейсом, определенным спецификаицей USB 1.0. Семейство контроллеров 8x930 имеет три прерывания, связанных с USB. Они происходят при каждом старте кадра, окончании приема/передачи данных на оконечные функциональные устройства, в случае глобальной приостановки или возобновления работы. В концентраторе 8x930Hx блок интерфейса с концентратором служит для управления и слежения за состоянием соединени с выходными портами. Повторитель отвечает за распространение сигналов повышающих и понижающих портов USB.

Микроконтроллеры семейства МСS-51 построены по гарвардской архитектуре, в которой память программ и память данных разделе-ны, имеют собственные адресные пространства и способы доступа к ним.

Память программ


Максимальный объем памяти составляет 64К байт, из них 4К, 8К, 16К или 32К байт памяти (табл.7.3.1) располагаются на кристалле, остальной объем — вне кристалла.
При напряжении на выводе ЕА = V CC использу-ется как внутренняя, так и внешняя память, при ЕА = V CC = 0 — только внешняя па-мять.
В табл.7.3.1 приведены адреса обращения к памяти программ для указан-ных случаев.
Нижняя область памяти программ отводится для начала работы микроконт-роллера (стартовый адрес 0000h после сброса) и под обработку прерываний (ад-реса прерываний расположены с интервалом 8 байт: 0003h, 000Bh, 0013h и т.д.).


Память программ доступна только для чтения, причем при обращении:

● к внешней памяти программ вырабатывается сигнал ¯PSEN и всегда формиру-ется 16-разрядный адрес.
Младший байт адреса передается через порт P0 в первой половине машинного цикла и фиксируется по срезу строба ALE в регистре.
Во второй половине цикла порт P0 используется для ввода в МК байта данных из внешней памяти.
Старший байт адреса передается через порт P2 в течение всего времени обращения к памяти (рис.7.1.11);

● к внутренней памяти сигнал чтения не формируется и используются циклы обмена по внутренней шине микроконтроллера.

Память данных

Внутреннюю память данных можно условно разделить на три блока (табл.7.3.2).

Внутренняя память всегда адресуется байтом, который обеспечивает адреса-цию только к 256 ячейкам памяти.
Поэтому, как видно из табл.7.3.2, для адреса-ции к верхним 8-битным ячейкам внутреннего ОЗУ и регистрам специальных фун-кций SFR, занимающим одно и то же адресное пространство, в командах исполь-зуются разные способы адресации: косвенный и прямой.

Особенности организации нижней области внутреннего ОЗУ отражены в табл.7.3.3.

Младшие 32 байта внутреннего ОЗУ с адресами 00h.
1Fh сгруппированы в че-тыре банка по восемь регистров (R0.R7).
Следующие 16 байтов ОЗУ с адресами 20h.
2Fh представляют собой область памяти объемом 8×16= 128 бит, которая допускает обращение к каждому отдельному биту.
Для выбора адреса регистра банка используется его имя R0.
R7, для выбора банка — биты RS0, RS1 регистра слова состояния PSW.

Адреса битов

Адреса битов приведены в табл.7.3.3.

Адресация осуществляется прямым способом.

Список всех регистров специальных функций SFR с их адресами дан в табл.7.2.2.
Для наглядности в табл.7.3.

4 приведена карта адресов ре-гистров SFR рассматриваемых микросхем семейства MCS-51.
Адрес SFR опреде-ляется совокупностью цифр столбца и строки в шестнадцатеричной системе счисления.

Например, регистр CMOD имеет адрес D9h.

Для регистров SFR, адреса которых оканчиваются на 0h или 8h (они выделены полужирным шрифтом), помимо байтовой допускается побитовая адресация.

При этом адрес бита, занимающего в регистре N-й разряд, определяется как XXh + 0Nh, где XXh — адрес регистра SFR, N = 0.7.
Битовые адреса в этой облас-ти имеют значения от 80Н до FFH.
Например, адреса битов аккумулятора АСС ле-жат в пределах E0h-E7h.

Внешняя память данных (объемом до 64 Кбайт) создается дополнительными микросхемами памяти, подключаемыми к МК.
Для работы с внешней памятью данных используются специальные команды, поэтому адресные пространства внешней и внутренней памяти не пересекаются и, следовательно, оба вида памя-ти данных можно задействовать одновременно.

Для обращения к ячейкам внеш-ней памяти данных используются (рис.7.1.8):
● команды с косвенной адресацией;
● сигналы чтения ¯RD и записи ¯WR;
● порт P0 для передачи младшего байта адреса и приема/передачи байта данных;
● порт P2 для передачи старшего байта адреса.
Способы адресации.
В системе команд используется:
● прямая, косвенная, регистровая, косвенно-регистровая, непосредственная и индексная адресация (косвенная адресация по сумме базового и индексно-го регистров) операндов-источников;
● прямая, регистровая и косвенно-регистровая адресация операндов назначения.
Сочетание указанных способов (адресации) обеспечивает 21 режим адресации.
В этой и в приведенных ниже таблицах системы команд использованы следу-ющие обозначения:

Прямая адресация.

При этом способе адресации место расположения байта или бита данных определяется 8-битным адресом второго (и третьего) бай-та команды.
Прямая адресация используется только для обращения к внутренней памяти данных (нижним 128 байтам ОЗУ) и регистрам специальных функций.

Регистровая адресация.


Этот способ адресации обеспечивает доступ к данным, которые хранятся в одном из восьми регистров R0.
R7 текущего банка рабочих регистров.
Его также можно использовать для обращения к регистрам A, В, АВ (сдвоенному регистру), регистру-указателю DPTR и флагу переноса С.
Адрес указанных регистров заложен в код операции, благодаря чему сокращает-ся число байт команды.

Косвенно-регистровая адресация.


В этом случае адрес данных хра-нится в регистре-указателе, место расположения которого определено кодом операции.
Данный способ адресации используется для обращения к внешнему ОЗУ и верхней половине внутреннего ОЗУ.
Регистрами-указателями 8-битных ад-ресов могут служить регистры R0, R1 выбранного банка рабочих регистров или указатель стека SР, для 16-битной адресации используется только регистр указа-теля данных DPTR.

Непосредственная адресация.


При этом способе адресации данные непосредственно указаны в команде и находятся во втором (или во втором и тре-тьем) байтах команды, т.е.
не требуется адресация к памяти.
Например, по ко-манде МОV A,#50 в аккумулятор A загружается число 50.

Индексная адресация.


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

Структура команд.

Длина команды составляет один (49 команд), два (45 ко-манд) или три (17 команд) байта.
Первый байт команды всегда содержит код опе-рации (КО), A второй и третий байты — адреса операндов или непосредственные значения данных.

В качестве операндов могут быть использованы отдельные биты, тетрады, байты и двухбайтные слова.
Можно выделить 13 типов команд, ко-торые приведены в табл.7.3.5:

● A, PC, SP, DPTR, Rn (n = 0, 7) — аккумулятор, счетчик команд, указатель стека, регистр указателя данных и регистр текущего банка;
● Rm (m = 0, 1) — регистр текущего банка, используемый при косвенной адре-сации;
● direct — 8-разрядный адрес прямо адресуемого операнда;
● bit — адрес прямо адресуемого бита;
● rel — относительный адрес перехода;
● addr11, addr16 — 11- и 16-разрядный абсолютный адрес перехода;
● #data8, #data16 — непосредственные данные (операнды) 8- и 16-разрядной длины;
● A10, A9, A0 — отдельные разряды 11-разрядного адреса;
● (.) — содержимое ячейки памяти по адресу, указанному в скобках;
● СБ, МБ — старший и младший байты 16-разрядного операнда.

Общие сведения о системе команд.

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

В частности аббреви-атура MOV имеет 18 различных команд, предназначенных для обработки трех ти-пов данных (битов, байтов, адресов) в различных адресных пространствах.
Набор команд имеет 42 мнемонических обозначения 111 типов команд для конкрети-зации 33 функций МК.

Из 111 команд 64 выполняются за один машинный цикл, 45 — за два цикла и лишь две команды (MUL — умножение и DIV — деление) вы-полняются за 4 цикла. При частоте тактового генератора 12 МГц длительность машинного цикла (12 тактов) составляет 1 мкс. По функциональному признаку команды можно разбить на пять групп. Ниже приведено описание команд каждой группы, представленных в виде таблиц. Для компактности таблиц выделим группу команд (табл.7.3.6), выполнение которых влияет (помечены знаком +) на состояние флагов регистра слова состояния PSW.

Команды пересылки данных

Команды пересылки можно разбить на отдель-ные подгруппы.
Команды пересылки и обмена данными между ячейками внутрен-ней памяти (табл.7.3.7).

Команды 1-16, имеющие мнемонику MOV dest, src, предназначены для пересылки байта или двух байтов (команда 16) данных из ис-точника src в приемник dest, при этом:
● для указания источника (src) используется четыре способа адресации: регист-ровый (команды 2-4, 6, 8), прямой (команды 1, 7, 9, 11), косвенный (команды 5, 10) и непосредственный (команды 12-16);
● для указания приемника (dest) используется три способа: регистровый (команды 1, 3…5, 9, 12, 14, 16), прямой (команды 2, 7, 8, 10, 13), косвенный (команды 6, 11, 15).

Команды 17-20 обеспечивают обмен информацией между двумя ячейками внутренней памяти данных (или двустороннюю пересылку).
При выполнении ко-манд ХСН происходит обмен байтами, A команды XCHD — младшими тетрадами байтовых операндов.

Одной из ячеек всегда является аккумулятор A. В качестве другой ячейки при обмене байтами используется один из регистров Rn текущего банка, A также прямо или косвенно адресуемая ячейка внутренней памяти; при обмене тетрадами — только косвенно адресуемая ячейка внутренней памяти.

Так как во всех МК стек размещается во внутреннем ОЗУ, в эту же подгруппу включены команды (20, 21) обращения к стеку PUSH src, POP dest.
Эти команды ис-пользуют только прямой способ адресации, записывая байт в стек или восстанав-ливая его из стека.
Следует иметь в виду, что в тех МК, у которых в ОЗУ отсут-ствуют верхние 128 байт, увеличение стека за пределы 128 байт ведет к потере данных.

Команды пересылки данных между внутренней и внешней па-мятью данных (табл.7.3.8).

Эти команды используют только косвенную адре-сацию, при этом однобайтный адрес может располагаться в Р0 или R1 текущего банка регистров, A двухбайтный адрес — в регистре-указателе данных DРТR.
При любом доступе к внешней памяти роль приемника или источника операндов во внутренней памяти играет аккумулятор А.

Команды пересылки данных из памяти программ (табл.7.3.9).

Эти команды предназначены для чтения таблиц из программной памяти.

Команда MOVC A,@А + DPTR используется для обращения к таблице с числом входов от 0 до 255.

Номер требуемого входа в таблицу загружается в аккумулятор, A регистр DPTR устанавливается на точку начала таблицы. Отличительной особенностью другой команды является то, что в качестве указателя базы используется про-граммный счетчик PC и обращение к таблице производится из подпрограммы. Вначале номер требуемой точки входа загружается в аккумулятор, затем вызыва-ется подпрограмма с командой MOVC A,@А + PC. Таблица может иметь 255 вхо-дов с номерами от 1 до 255, так как 0 используется для адреса команды RET вы-хода из подпрограммы.

Команды арифметической обработки данных. Все арифметические коман-ды выполняются над беззнаковыми целыми числами. Операции над двумя операндами (табл.7.3.10). В операциях сложе-ния ADD, сложения с учетом переноса ADDC и вычитания с учетом заема SUBB:

● источником одного 8-битного операнда и приемником результата служит ак-кумулятор;
● источником другого операнда — либо один из рабочих регистров Rn (n = 0-7) текущего банки, либо прямо direct или косвенно @Rm (m = 0, 1) адресуемая ячейка памяти ОЗУ, либо непосредственные данные #data.

Операции умножения MUL и деления DIV выполняются над содержимым реги-стров A и В. При умножении старшие 8 разрядов результата записываются в ре-гистр В, младшие 8 разрядов — в регистр A.
Если произведение больше 255, устанавливается флаг переполнения OV; флаг переноса С всегда сбрасывается. Команда DIV выполняет деление 8-битного операнда аккумулятора A на 8-битный операнд регистра В.
При делении частное (старшие разряды) записывается в ре-гистр в A, остаток (младшие разряды) — в B. Флаги переноса C и переполнения OV сбрасываются.
При попытке деления на 0 устанавливается флаг переполнения OV. Операция деления чаще используется для сдвигов и преобразования оснований чисел.

При делении двоичного числа на 2 N происходит его сдвиг на N бит влево.
Лишние биты переносятся в регистр В.

Операции над однобайтными операндами (табл.7.3.11).

Команда DA используется для выполнения двоично-десятичных операций. Команды INC, DEC позволяют соответственно увеличить или уменьшить на единицу содержимое ячейки памяти.
Они применимы к содержимому аккумулято-ра A, одного из рабочих регистров Rn или ячейки памяти, адресуемой как пря-мым, так и косвенным способом.
Операция увеличения на единицу применима также к содержимому 16-разрядного регистра-указателя DPTR.

Команды логических операций.

Двуместные операции

(табл.7.3.12).

Команды AML, ORL, XRL позволяют выполнить три двуместные логические операции над 8-битными операндами: ANL — логическое умножение (AND), ORL — ло-гическое сложение (OR), XRL — исключающее ИЛИ (XOR).
Операции выполняются над отдельными битами операндов. Источником одного из операндов и одновре-менно приемником результата служит либо аккумулятор (А), либо прямо адресу-емая ячейка памяти (direct).
Для источника другого операнда используется реги-стровый, прямой, косвенный или непосредственный способ адресации.

Одноместные операции

(табл.7.3.13).
В состав группы входит также ряд одноместных операций над содержимым аккумулятора A: операции очистки (CLR), логического дополнения или инверсии (CPL), циклического и расширенного циклического сдвигов на 1 бит вправо (RL, RLC) и влево (RR, RRC), обмена тетрад или циклического сдвига байта на 4 разряда (SWAP), A также пустая операция (NOP), в результате которой состояние всех регистров МК (за исключением про-граммного счетчика) остается неизменным.

Команды передачи управления

Команды безусловного перехода

(табл.7.3.14).

Команды 1-3 отличаются лишь форматом адреса назначения.

Ко-манда LJMP (L — Long) выполняет «длинный» безусловный переход по указанному адресу addr16, загружая счетчик PC вторым и третьим байтами команды.
Команда обеспечивает переход в любую точку 64К байтного адресного пространства.

Ко-манда AJMP (А — Absolute) обеспечивает «абсолютный» переход по адресу внутри 2К байтной страницы, начальный адрес которой задается пятью старшими разря-дами программного счетчика PC (вначале содержимое PC увеличивается на 2).

Команда SJMP (S — Short) позволяет осуществить «короткий» безусловный переход по адресу, который вычисляется сложением смещения rel со знаком во втором байте команды с содержимым счетчика PC, предварительно увеличенного на 2.

Адрес перехода находится в пределах -128+127 байт относительно адре-са команды.
Для перехода в любую другую точку 64-килобайтного адресного про-странства может быть использована также команда 4 с косвенной @A+DPTR адре-сацией.
В этом случае содержимое A интерпретируется как целое без знака.

Пустая операция (NOP), в результате которой состояние всех регистров мик-ропроцессора (за исключением программного счетчика) остается неизменным.

Команды условного перехода

(табл.7.3.15).

С помощью команд JZ и JNZ осуществляется переход, если содержимое аккумулятора соответственно равно или не равно нулю.
Адрес перехода вычисляется путем сложения относительного знакового смещения rel с содержимым счетчика команд PC после прибавления к нему числа 2 (длины команды в байтах).

Содержимое аккумулятора остается не-изменным.
Команды на флаги не влияют.

Команды CJNE (3-6) служат для реализации условного перехода по результату сравнения двух 8-разрядных операндов, расположение которых указано в коман-дах.
Если их значения не равны, осуществляется переход.

Адрес перехода вычис-ляется сложением смещения rel с содержимым счетчика PC, предварительно уве-личенным на 3.
В противном случае выполняется следующая команда.

В графе Алгоритм показано влияние значений сравниваемых 8-разрядных операндов на флаг переноса С.
Команды DJNZ (7, предназначены для организации программных циклов.

Регистр Rn или прямо (direct) адресуемая ячейка представляют собой счетчик по-вторений цикла, A смещение rel (во втором и третьем байтах команд) — относи-тельный адрес перехода к началу цикла.
При выполнении команд содержимое счетчика уменьшается на единицу и проверяется на нуль.
Если содержимое счет-чика не равно нулю, осуществляется переход на начало цикла.
В противном слу-чае выполняется следующая команда.

Адрес перехода вычисляется сложением смещения с содержимым счетчика, предварительно увеличенным на длину ко-манды (на 2 или 3).
На флаги команды не влияют.

Команды вызова подпрограмм и возврата из программ

(табл.7.3.16).
Команды LCALL «длинный вызов» и ACALL «абсолютный вызов» осуществляют безусловный вызов подпрограммы, размещенной по указанному адресу.

Отличие этих команд от рассмотренных выше команд безусловного перехода состоит в том, что они сохраняют в стеке адрес возврата (содержимое счетчика) в основ-ную программу.
Команда возврата из подпрограммы RET восстанавливает из стека значение содержимого счетчика команд, A команда RETI помимо этого разрешает преры-вания обслуживающего уровня.

В командах передачи управления широко используется относительная адреса-ция, которая поддерживает перемещаемые программные модули.
В качестве отно-сительного адреса выступает 8-разрядное смещение rel со знаком, обеспечиваю-щее ветвление от текущего положения счетчика PC в обе стороны на ±127 байт.

Для перехода в любую другую точку 64К-байтного адресного пространства может быть использован либо прямой адрес addr16, либо косвенный @A+DPTR адрес.
В последнем случае содержимое A интерпретируется как целое без знака.

Вари-ант короткой прямой адресации addr11 внутри 2К-байтной текущей страницы вве-ден для совместимости с архитектурой МК48.

Все эти типы адресации могут быть применены только к операции перехода, A для операции вызова допустимы только прямой addr16 и внутренний addr11 способы адресации.
Во всех условных операциях может использоваться только относительная адресация.

Когда МК51 опознает запрос на прерывание, он генерирует одну из команд типа LCALL addr16, что автоматически обеспечивает запоминание адреса возврата в стеке.
Однако в отличии от МК48 в МК51 нет автоматически сохраняемой ин-формации о состоянии.

При этом логика прерываний перестает срабатывать на запросы того уровня, который был принят к обслуживанию.
Для понижения уров-ня прерывания служит команда возврата из прерывания RETI, которая кроме опе-рации, эквивалентной RET, включает операцию разрешения прерывания данного уровня.
К типовым условным операциям МК51 относятся также операции JZ, JNZ.
Од-нако появилась новая операция «Сравнить и перейти» CJNE.

По данной команде операнд сначала сравнивается по правилам вычитания целых чисел с константой и в соответствии с результатом сравнения выставляется флаг CY Затем в случае несовпадения с константой выполняется ветвление. Сравнивая аккумулятор, ре-гистр или ячейку памяти с последовательностью констант, получаем удобный способ проверки на совпадения, например с целью выявления особых случаев.

По сути дела команда CJNE является элементом оператора языков высокого уров-ня типа CASE.

Дальнейшее развитие получила команда DJNZ.
Теперь программист в качестве счетчика может использовать не только один из рабочих регистров Rn, но и лю-бую ячейку памяти DSEG.

Команды битовых операций.

Группа состоит из 12 команд, позволяющих вы-полнять операции над одним или двумя битами (сброс, установку, инверсию бита, A также логические И и ИЛИ), и 5 команд, предназначенных для реализации условных переходов (табл.7.3.17).

Команды обеспечивают прямую адресацию 128 битов, расположенных в шест-надцати ячейках внутреннего ОЗУ с адресами 20h.
2Fh (табл.7.3.3), и 128 битов, расположенных в регистрах специального назначения, адреса которых кратны восьми (выделены в табл.7.3.4 полужирным шрифтом).

При выполнении опера-ций над двумя одноразрядными операндами в качестве логического аккумулято-ра используется триггер регистра PSW, хранящий флаг переноса C (табл.7.1.2).

Команды MOV (1,2) осуществляют пересылку бита из одной прямо адресу-емой битовой ячейки внутреннего ОЗУ в триггер C или в обратном направлении.
Команды CRL (3, 4), SETB (5, 6) соответственно сбрасывают в нуль или устанавли-вают в единицу флаг переноса C или указанный бит.
С помощью команд CPL, ANL, ORL (7-12) выполняются логические операции инверсии, сложения и умножения.

В группу входят также команды (13-17) для реализации операций условных переходов с относительным 8-разрядным смещением rel.
Переходы могут быть реализованы как при установленном бите или флаге переноса (команды 13, 16), так и при сброшенном (команды 14, 17).

Команда JBC помимо перехода по вычис-ляемому адресу при выполнении условия (бит) = 1 производит сброс этого бита в нулевое состояние.
При выполнении команд условных переходов адрес перехо-да вычисляется после прибавления к содержимому счетчика чисел 3 или 2 (отра-жающих число байт в команде).

УДК 681.5, 681.325.5 (075.8)

ББК 32.973.202-018.2 я 73

Щербина А. Н. Вычислительные машины, системы и сети. Микроконтроллеры и микропроцессоры в системах управления: у чеб. пособие / А.Н. Щербина, П.А. Нечаев- СПб.: Из-во Политехн. ун-та, 2012.-226 с.

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

Рассмотрены фундаментальные вопросы логической организации микропроцессорных систем на примере базовой архитектуры микроконтроллерного семейства MCS-51 фирмы Intel. Описана технология программирования микроконтроллеров на языках Ассемблер и СИ.

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

Также соответствует содержанию государственного образовательного стандарта дисциплин «Микроконтроллеры и микропроцессоры в системах управления» и «Электронные устройства автоматики» бакалаврской, инженерной и магистерской подготовки по направлению 140400 «Электроэнергетика и электротехника».

Печатается по решению редакционно-издательского совета

Санкт-Петербургского государственного политехнического университета.

© Щербина А. Н., Нечаев П. А., 2012

© Санкт-Петербургский государственный

политехнический университет, 2012

ISBN 978-5-7422-3553-8


Введение.. 7

Глава 1. Архитектура семейства MCS51. 10

1.1 Общие характеристики 10

1.2 Структурная схема 11



1.3 Назначение выводов микроконтроллера 8051 15

1.4 Организация памяти 17

1.4.1 Память программ (ПЗУ) 18

1.4.2 Память данных (ОЗУ) 19

1.4.3 Регистры специальных функций. 20

1.4.4 Регистр флагов (PSW) 23

1.5 Устройство управления и синхронизации 26

1.6 Организация портов ввода-вывода 27

1.6.1 Общие сведения. 27

1.6.2 Альтернативные функции. 27

1.7. Таймеры / счетчики микроконтроллеров семейства 8051. 28

1.7.1. Структура таймеров-счетчиков. 28

1.7.2 Режимы работы таймеров-счетчиков. 30

1.8. Последовательный порт 32

1.8.1. Структура последовательного порта. 32

1.8.2. Регистр управления/статуса приемопередатчика SCON.. 34

1.8.3. Регистр управления мощностью PCON.. 36

1.9. Система прерываний 37

1.9.1. Структура системы прерываний. 37

1.9.2 Выполнение подпрограммы прерывания. 40

Глава 2. Особенности микроконтроллера 80C51GB.. 42

2.1 Функциональные особенности 42

2.2 Порты I/O P0-P5 43

2.2.1 Функционирование портов ввода-вывода. 43

2.2.2 Запись в порт.. 46

2.3 Особенности системы прерываний 8XC51GB.. 49

Разрешение/запрещение прерываний. 50

Управление приоритетами прерываний. 51

Внешние прерывания. 54

2.3. Узел АЦП 56

2.4. Аппаратный сторожевой таймер 61

2.5. Обнаружение сбоя тактового генератора 63

2.6. Матрица программируемых счётчиков РСА 64

2.6.1. Структура PCA.. 64

2.6.2. Регистр режима счётчика РСА (CMOD) 66

2.6.3. Регистр управления счётчика РСА (CON) 67

2.6.4. Модули сравнения/фиксации. 68

2.7. Расширенный последовательный порт 76

2.8. Таймеры/счетчики 79

Расположение выводов микроконтроллеров группы 8XC51GB.. 86

Глава 3. Программирование MK 8051GB.. 89

3.1. Программная модель 89

3.2 Типы данных 93

3.3 Способы адресации данных 93

3.4 Система команд 95

3.4.1 Общая характеристика. 95

3.4.2 Типы команд. 96

3.4.3 Типы операндов. 97

3.4.4 Команды пересылки данных микроконтроллера. 98

3.4.5 Команды арифметических операций 8051. 101

3.4.6 Команды логических операций микроконтроллера 8051. 104

3.4.7 Команды операций над битами микроконтроллера 8051. 106

3.5 Отладка программ 111

Глава 4. Язык программирования ASM-51. 112

4.2 Запись текста программы 113

4.3 Алфавит языка. 114

4.4 Идентификаторы. 115

4.5 Числа 117

4.6 Директивы 118

4.7 Реализация подпрограмм на языке ASM51 122

4.7.1 Структура подпрограммы-процедуры на языке ASM51. 122

4.7.2 Передача переменных-параметров в подпрограмму. 123

4.7.3 Реализация подпрограмм-функций на языке ASM51. 123

4.7.4 Реализация подпрограмм обработки прерываний на языке ASM51. 124

4.8 Структурное программирование на языке ассемблера. 125

4.9 Особенности трансляции многомодульных программ.. 126

4.10 Использование сегментов 128

4.10.1 Разбиение памяти МК на сегменты.. 128

4.10.2 Абсолютные сегменты памяти. 129

4.10.2 Перемещаемые сегменты памяти. 131

Глава 5. Язык программирования С-51. 134

5.1 Общая характеристика языка 134

5.3 Структура программ С-51 136

5.3. Элементы языка программирования С-51 138

5.3.1. Символы.. 138

5.3.2. Лексические единицы, разделители и использование пробелов. 141

5.3.3 Идентификаторы.. 142

5.3.4 Ключевые слова. 143

5.3.5 Константы.. 143

5.4. Выражения в операторах языка 146

программирования C-51 146

5.5. Приоритеты выполнения операций 148

5.6. Операторы языка программирования C-51 149

5.6.1. Операторы объявления. 150

5.6.2 Исполняемые операторы.. 150

5.6.3 Оператор присваивания. 151

5.6.4 Условный оператор. 151

5.6.5 Структурный оператор {}. 152

5.6.6 Оператор цикла for. 152

5.6.7 Оператор цикла с проверкой условия до тела цикла while. 153

5.6.8 Оператор цикла с проверкой условия после тела цикла do while. 154

5.6.9 Оператор break. 155

5.6.10 Оператор continue. 155

5.6.11 Оператор выбора switch. 155

5.6.12 Оператор безусловного перехода goto. 157

5.6.13 Оператор выражение. 158

5.6.14 Оператор возврата из подпрограммы return. 158

5.6.15 Пустой оператор. 158

5.7. Объявление переменных в языке программирования C-51. 159

5.7.1. Объявление переменной. 159

5.7.3 Целые типы данных. 161

5.7.4 Числа с плавающей запятой. 162

5.7.5 Переменные перечислимого типа. 162

5.7.6. Объявление массивов в языке программирования C-51. 164

5.7.7. Структуры.. 165

5.7.8. Объединения (смеси) 166

5.8. Использование указателей в языке C-51 167

5.8.1. Объявление указателей. 167

5.8.2. Нетипизированные указатели. 168

5.8.3. Память зависимые указатели. 169

5.9. Объявление новых типов переменных 169

5.10. Инициализация данных 170

5.11. Использование подпрограмм в языке программирования С-51. 170

5.11.1. Определение подпрограмм.. 171

5.11.2. Параметры подпрограмм.. 173

5.11.3. Предварительное объявление подпрограмм.. 174

5.11.4 Вызов подпрограмм.. 176

5.11.5 Рекурсивный вызов подпрограмм.. 176

5.11.6 Подпрограммы обработки прерываний. 177

5.11.7 Области действия переменных и подпрограмм.. 178

5.12. Многомодульные программы 179

Глава 6. Подготовка программ в интегрированной среде разработки Keil μVision2. 182

6.1 Создание проекта на языке ASM-51 182

6.2 Пример создания проекта на языке C для учебного контроллера в интегрированной среде разработки Keil μVision2 188

Глава 7. Описание учебного контроллера.. 199

7.1. Структура контроллера 199

7.2. Адресное пространство 200

7.2.1. Распределение памяти. 200

7.2.2 Внешняя память. 201

7.2.3. Внутренняя память данных. 202

7.3. Распределение портов ввода-вывода 202

7.4. Последовательный порт………………………………...203

7.5. Работа с ЖКИ 205

7.6. Панели контроллера…………………………………………………213

ПРИЛОЖЕНИЕ П2 СТРУКТУРА ОТЧЁТА О ЛАБРОРАТОРНОЙ РАБОТЕ……..217

Приложение П3 Коды машинных команд. 217

Список литературы... 224


Введение

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

В мире происходит непрерывное развитие и появление все новых и новых 16- и 32-разрядных микроконтроллеров и микропроцессоров, но наибольшая доля мирового микропроцессорного рынка и по сей день остается за 8-разрядными устройствами. По всем прогнозам аналитических компаний на ближайшее время, лидирующее положение 8-разрядных микроконтроллеров на мировом рынке сохранится.

В настоящее время среди всех 8-разрядных микроконтроллеров семейство MCS-51 является несомненным лидером по количеству разновидностей и количеству компаний, выпускающих его модификации. Оно получило свое название от первого представителя этого семейства - микроконтроллера 8051. Удачный набор периферийных устройств, возможность гибкого выбора внешней или внутренней программной памяти и приемлемая цена обеспечили этому микроконтроллеру успех на рынке.

Достоинства семейства MCS-51:

· архитектура, являющаяся стандартом де-факто;

· чрезвычайная широта семейства и разнообразие возможностей;

· наличие высокопроизводительных и расширенных версий процессоров;

· значительное число свободно доступных программных и аппаратурных наработок;

· легкость аппаратного программирования, в т. ч. и внутрисхемного;

· дешевизна и доступность базовых чипов;

· наличие специализированных версий контроллеров для особых условий применения

· наличие версий контроллеров с пониженным уровнем электромагнитных помех;

· широкая известность среди разработчиков старшего поколения, как в мире, так и в странах СНГ;

· поддержка архитектуры ведущими учебными заведениями мира.

И, наконец, главное преимущество: освоив базовый чип семейства, легко начнеть работать с такими вычислительными «монстрами», как микроконтроллеры Cygnal, Dallas Semiconductor, Analog Devices, Texas Instruments.

В состав семейства MCS-51 входит целый ряд микросхем от самых простых микроконтроллеров до достаточно сложных. На сегодняшний день существует более 200 модификаций микроконтроллеров семейства 8051, выпускаемых почти 20-ю компаниями. Каждый год появляются все новые варианты представителей этого семейства.

Основными направлениями развития являются:

· увеличение быстродействия (повышение тактовой частоты и переработка архитектуры);

· снижение напряжения питания и энергопотребления;

· увеличение объема ОЗУ и FLASH памяти на кристалле с возможностью внутрисхемного программирования;

· введение в состав периферии микроконтроллера сложных устройств типа системы управления приводами, CAN и USB интерфейсов и т.п.

Микроконтроллеры семейства MCS-51 позволяют выполнять как задачи управления различными устройствами, так и реализовывать отдельные узлы аналоговой схемы. Все микросхемы этого семейства работают с одной и той же системой команд. Большинство из них выполняется в одинаковых корпусах с совпадающей цоколевкой (нумерация ножек для корпуса). Это позволяет использовать для разработанного устройства микросхемы разных фирм - производителей без переделки принципиальной схемы устройства и программы.

Основными производителями разновидностей 51-го семейства в мире являются фирмы Philips, Siemens, Intel, Atmel, Dallas, Temic, Oki, AMD, MHS, Gold Star, Winbond, Silicon Systems и ряд других.

Характеристики аналогов микроконтроллеров семейства MCS-51 (Intel 8XC51FA, 8XC51GB, 80С152) с расширенными возможностями приведены в табл. В.1.

Таблица В.1

ОЗУ ПЗУ РСА АЦП WDT T/C Послед. Каналы Особенности
Atmel: AT89C2051
- - - - UART Flash 2 Кб
AT89C4051 - - - - UART Flash 4 Кб
AT89S4D12 128K - - - UART, SPI Flash 4 Кб
DALLAS Semiconductor: DS5000FP
- - - + UART Bootstrap loader
DS5001FP - - - + UART Bootstrap loader
DS8xC520 16K - - + 2xUART 2 DPTR
SIEMENS: C505C
16K - + + UART, CAN 8 DPTR
C515C 64K - + + UART+ SSC+CAN 4 ШИМ, 8 DPTR
Philips: *89C51RA+
- + - + UART 2 DPTR, 4 ур. прер., clock out, Flash 8K
P51XAG1x 8K - - + 2 UART
Intel: 8xC51RA
8K - + + UART 4 уровня IRQ, clock out
8XC196KC 64K 16K - + - UART 3 ШИМ
80C196KB 64K 8K - + - UART ШИМ

Глава 1. Архитектура семейства MCS51

8-разрядные однокристальные микроконтроллеры семейства MCS-51 приобрели большую популярность у разработчиков микропроцессорных систем контроля благодаря удачно спроектированной архитектуре. Архитектура микроконтроллера – это совокупность внутренних и внешних программно-доступных аппаратных ресурсов и системы команд. Архитектура семейства MCS-51 в значительной мере предопределяется ее назначением - построение компактных и дешевых цифровых устройств. Микроконтроллеры, выполняющие все функции микроЭВМ с помощью единственной микросхемы, получили название однокристальных ЭВМ (ОЭВМ).

Фирма Intel выпустила около 50 моделей на базе операционного ядра микроконтроллера Intel 8051. Одновременно многие другие фирмы, такие как Atmel, Philips, начали производство своих микроконтроллеров, разработанных в стандарте MCS-51.

Общие характеристики

Основные характеристики семейства:

· 8-разрядный центральный процессор (ЦП), ориентированный на управление исполнительными устройствами;

· ЦП имеет встроенную схему 8-разрядного аппаратного умножения и деления чисел;

· наличие в наборе команд большого количества операций для работы с прямоадресуемыми битами даёт возможность говорить о процессоре для работы с битовыми данными (булевом процессоре);

· внутренняя (расположенная на кристалле) память программ масочного или репрограммируемого типа, имеющая для различных кристаллов объём от 4 до 32 Кб, в некоторых версиях она отсутствует;

· не менее чем 128 байтное резидентное ОЗУ данных, которое используется для организации, регистровых банков, стека и хранения пользовательских данных;

· не менее 32-х двунаправленных интерфейсных линий (портов), индивидуально настраиваемых на ввод или вывод информации;

· два 16-битных многорежимных счетчика/таймера, используемых для подсчёта внешних событий, организации временных задержек и тактирования коммуникационного порта;

· двунаправленный дуплексный асинхронный приемопередатчик (UART), предназначенный для организации каналов связи между микроконтроллером и внешними устройствами с широким диапазоном скоростей передачи информации. Имеются средства для аппаратно-программного объединения микроконтроллеров в связанную систему;

· двухуровневая приоритетная система прерываний, поддерживающая не менее 5 векторов прерываний от 4-х внутренних и 2-х внешних источников событий;

· встроенный тактовый генератор.

Структурная схема

Структурная схема контроллера представлена на рис.1.1 и состоит из следующих основных функциональных узлов: блока управления, арифметико-логического устройства, блока таймеров/счетчиков, блока последовательного интерфейса и прерываний, программного счетчика, памяти данных и памяти программ. Двусторонний обмен осуществляется с помощью внутренней 8-разрядной магистрали данных. По такой схеме построены практически все представители семейства MCS-51. Различные микросхемы этого семейства различаются только регистрами специального назначения (в том числе и количеством портов).

Блок управления и синхронизации (Timing and Control) - предназначен для выработки синхронизирующих и управляющих сигналов, обеспечивающих координацию совместной работы блоков ОЭВМ во всех допустимых режимах ее работы. В состав блока управления входят:

устройство формирования временных интервалов;

логика ввода-вывода;

регистр команд;

регистр управления потреблением электроэнергии;

дешифратор команд, логика управления ЭВМ.

Рис. 1.1. Структурная схема контроллера I8051.

Устройство формирования временных интервалов предназначено для формирования и выдачи внутренних синхросигналов фаз, тактов и циклов. Количество машинных циклов определяет продолжительность выполнения команд. Практически все команды ОЭВМ выполняются за один или два машинных цикла, кроме команд умножения и деления, продолжительность выполнения которых составляет четыре машинных цикла. Обозначим частоту задающего генератора через F г. Длительность машинного цикла равна 12/F г или составляет 12 периодов сигнала задающего генератора. Логика ввода - вывода предназначена для приема и выдачи сигналов, обеспечивающих обмен информации с внешними устройствами через порты ввода вывода Р0-Р3.

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

Регистр управления потреблением (PCON) позволяет останавливать работу микроконтроллера для уменьшения потребления электроэнергии и уменьшения уровня помех от микроконтроллера. Еще большего уменьшения потребления электроэнергии и уменьшения помех можно добиться, остановив задающий генератор микроконтроллера. Этого можно достичь при помощи переключения бит регистра управления потреблением PCON. Для варианта изготовления по технологии n-МОП (серия 1816 или иностранных микросхем, в названии которых в середине отсутствует буква "c") регистр управления потреблением PCON содержит только один бит, управляющий скоростью передачи последовательного порта SMOD, а биты управления потреблением электроэнергией отсутствуют.

Арифметико-логическое устройство (ALU) представляет собой параллельное восьмиразрядное устройство, обеспечивающее выполнение арифметических и логических операций. АЛУ состоит из:

регистров аккумулятора, регистров временного хранения TMP1 и TMP2;

ПЗУ констант;

сумматора;

дополнительного регистра (регистра В);

аккумулятора (ACC);

регистра состояния программ (PSW).

Регистр аккумулятор и регистры временного хранения - восьмиразрядные регистры, предназначенные для приема и хранения операндов на время выполнения операций над ними. Эти регистры программно не доступны.

ПЗУ констант обеспечивает выработку корректирующего кода при двоично-десятичном представлении данных, кода маски при битовых операциях и кода констант.

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

Регистр B - восьмиразрядный регистр, используемый во время операций умножения и деления. Для других инструкций он может рассматриваться как дополнительный сверхоперативный регистр.

Аккумулятор - восьмиразрядный регистр, предназначенный для приема и хранения результата, полученного при выполнении арифметико-логических операций или операций сдвига

Блок последовательного интерфейса и прерываний (ПИП) предназначен для организации ввода - вывода последовательных потоков информации и организации системы прерывания программ. В состав блока входят:

буфер ПИП;

логика управления;

регистр управления;

буфер передатчика;

буфер приемника;

приемопередатчик последовательного порта;

регистр приоритетов прерываний;

регистр разрешения прерываний;

логика обработки флагов прерываний и схема выработки вектора.

Счетчик команд (Program Counter) предназначен для формирования текущего 16-разрядного адреса внутренней памяти программ и 8/16-разрядного адреса внешней памяти программ. В состав счетчика команд входят 16-разрядные буфер РС, регистр РС и схема инкремента (увеличения содержимого на 1).

Память данных (RAM) предназначена для временного хранения информации, используемой в процессе выполнения программы.

Порты P0, P1, P2, P3 являются квазидвунаправленными портами ввода - вывода и предназначены для обеспечения обмена информацией ОЭВМ с внешними устройствами, образуя 32 линии ввода- вывода.

Регистр состояния программы (PSW) предназначен для хранения информации о состоянии АЛУ при выполнении программы.

Память программ (EPROM) предназначена для хранения программ и представляет собой постоянное запоминающее устройство (ПЗУ). В разных микросхемах применяются масочные, стираемые ультрафиолетовым излучением или FLASH ПЗУ.

Регистр указателя данных (DPTR) предназначен для хранения 16 - разрядного адреса внешней памяти данных.

Указатель стека (SP) представляет собой восьмиразрядный регистр, предназначенный для организации особой области памяти данных (стека), в которой можно временно сохранить любую ячейку памяти.

1.3 Назначение выводов микроконтроллера 8051 (рис. 1.2)

· U ss - потенциал общего провода ("земли");

· U cc - основное напряжение питания +5 В;

· X1,X2 - выводы для подключения кварцевого резонатора;

· RST - вход общего сброса микроконтроллера;

· PSEN - разрешение внешней памяти программ, выдается только при обращении к внешнему ПЗУ;

· ALE - строб адреса внешней памяти;

· ЕА - отключение внутренней программной память; уровень 0 на этом входе заставляет микроконтроллер выполнять программу только из внешнего ПЗУ; игнорируя внутреннее(если последнее имеется);

Рис. 1.2. Назначение выводов 8051.

· P1 - восьмибитный квазидвунаправленный порт ввода/вывода, каждый разряд порта может быть запрограммирован как на ввод, так и на вывод информации, независимо от состояния других разрядов;

· P2 - восьмибитный квазидвунаправленный порт, аналогичный Р1, выводы этого порта используются для выдачи адресной информации при обращении к внешней памяти программ или данных (если используется 16-битовая адресация последней). Кроме того, выводы порта используются при программировании для ввода в микроконтроллер старших разрядов адреса;

· РЗ - восьмибитный квазидвунаправленный порт, аналогичный Р1, выводы этого порта могут выполнять ряд альтернативных функций, которые используются при работе таймеров, порта последовательного ввода-вывода, контроллера прерываний, и внешней памяти программ и данных;

· P0 - мультиплексируемый восьмибитный двунаправленный порт ввода-вывода информации, через этот порт в разные моменты времени выводятся младший байт адреса и данные.

Организация памяти

Вся серия MCS-51 имеет гарвардскую архитектуру, то есть раздельные адресные пространства памяти программ и данных. Структура памяти изображена на рис. 1.3.

Объем внутренней (резидентной) памяти программ (ROM, EPROM или OTP ROM), располагаемой на кристалле, в зависимости от типа микросхемы может составлять 0 (ROMless), 4К (базовый кристалл), 8К, 16К или 32К. При необходимости пользователь может расширять память программ установкой внешнего ПЗУ. Доступ к внутреннему или внешнему ПЗУ определяется значением сигнала на выводе ЕА (External Access):

EA=V cc (напряжение питания) - доступ к внутреннему ПЗУ;

EA=V ss (потенциал земли) - доступ к внешнему ПЗУ.

Для кристаллов без ПЗУ(ROMless) вывод ЕА должен быть постоянно подключен к V ss .

Рис. 1.3. Организация памяти семейства MCS-51

Строб чтения внешнего ПЗУ - (Program Store Enable) генерируется при обращении к внешней памяти программ и является неактивным во время обращения к ПЗУ, расположенному на кристалле. Область нижних адресов памяти программ используется системой прерываний. Архитектура базовой микросхемы 8051обеспечивает поддержку пяти источников прерываний:

· двух внешних прерываний;

· двух прерываний от таймеров;

· прерывания от последовательного порта.

На рис. 1.4 изображена карта нижней области программной памяти.

Рис. 1.4. Карта нижней области программной памяти

Память программ (ПЗУ)

У микроконтроллеров семейства 8051, память программ и память данных являются самостоятельными и независимыми друг от друга устройствами, адресуемыми различными командами и управляющими сигналами.

Объем встроенной памяти программ, расположенной на кристалле микроконтроллера 8051 , равен 4 Кбайт (в семействе до 32). При обращении к внешней памяти программ все микроконтроллеры семейства 8051 всегда используют 16-разрадный адрес, что обеспечивает им доступ к 64 Кбайт ПЗУ. Микроконтроллер обращается к программной памяти при чтении кода операции и операндов (используя счетчик команд PC), а также при выполнении команд копирования байта из памяти программ в аккумулятор. При выполнении команд копирования данных адресация ячейки памяти программ, из которой будут прочитаны данные, может осуществляться с использованием как счетчика PC, так и специального двухбайтового регистра-указателя данных DPTR.

Память данных (ОЗУ)

Объем расположенной на кристалле памяти данных - 128 байт. Объем внешней памяти данных может достигать 64 Кбайт. Первые 32 байта организованы в четыре банка регистров общего назначения, обозначаемых соответственно банк 0 - банк 3. Каждый из них состоит из восьми регистров R0–R7. В любой момент программе доступен, при регистровой адресации, только один банк регистров, номер которого содержится в третьем и четвертом битах слова состояния программы PSW .

Адреса битовой области памяти микроконтроллера 8051

Таблица 1.1

Адрес байта (Hex) Адреса битов по разрядам
D7 D6 D5 D4 D3 D2 D1 D0
2F 7F 7E 7D 7C 7B 7A
2E
2D 6F 6E 6D 6C 6B 6A
2C
2B 5F 5E 5D 5C 5B 5A
2A
4F 4E 4D 4C 4B 4A
3F 3E 3D 3C 3B 3A
2F 2E 2D 2C 2B 2A
1F 1E 1D 1C 1B 1A
0F 0E 0D 0C 0B 0A
20h

Оставшееся адресное пространство может конфигурироваться разработчиком по своему усмотрению: в нем можно разместить стек, системные и пользовательские области данных. Обращение к ячейкам памяти данных возможно двумя способами. Первый способ - прямая адресация ячейки памяти. В этом случае адрес ячейки является операндом соответствующей команды. Второй способ - косвенная адресация с помощью регистров-указателей R0 или R1: перед выполнением соответствующей команды в один из них должен быть занесен адрес ячейки, к которой необходимо обратиться.

Для обращения к внешней памяти данных используется только косвенная адресация с помощью регистров R0 и R1 или с помощью 16-разрядного регистра-указателя DPTR.

Часть памяти данных представляет собой битовую область, в ней имеется возможность при помощи специальных битовых команд адресоваться к каждому разряду ячеек памяти. Адрес прямо адресуемых битов может быть записан также в виде (АдресБайта).(Разряд). Соответствие этих двух способов адресации можно определить по табл. 1.1.

Система команд ОМЭВМ предоставляет большие возможности обработки данных, обеспечивает реализацию логических, арифметических операций, а также управление в режиме реалиного времени. Реализована побитовая, потетрадная (4 бита), побайтовая (8 бит) и 16-разрядная обработка данных. БИС семейства MCS-51 - 8-разрядная ОМЭВМ: ПЗУ, ОЗУ, регистры специального назначения, АЛУ и внешние шины имеют байтовую организацию. Двухбайтовые данные используются только регистром-указателем (DPTR) и счетчиком команд (РС). Следует отметить, что регистр-указатель данных может быть использован как двухбайтовый регистр DPTR или как два однобайтовых регистра специального назначения DPH и DPL. Счетчик команд всегда используется как двухбайтовый регистр. Набор команд ОМЭВМ имеет 42 мнемонических обозначения команд для конкретизации 33 функций этой системы. Синтаксис большинства команд ассемблерного языка состоит из мнемонического обозначения функции, всед за которым идут операнды, указывающие методы адресации и типы данных. Различные типы данных или режимы адресации определяются установленными операндами, а не изменениями мнемонических обозначений. Систему команд условно можно разбить на пять групп:
  • Арифметические команды;
  • Логические команды;
  • Команды передачи данных;
  • Команды битового процессора;
  • Команды ветвления и передачи управления.
Существуют следующие типы адресации операндов-источников:
  • Регистровая адресация
  • Прямая адресация
  • Косвенно-регистровая адресация
  • Непосредственная адресация
  • Косвенно-регистровая адресация по сумме базового и индексного регистров
Арифметические команды В наборе команд имеются следующие арифметические операции: сложение, сложение с учетом флага переноса, вычитание с заемом, инкременирование, декременирование, сравнение, десятичная коррекция, умножение и деление. В АЛУ производятся действия над целыми числами без знака. В двухоперандных операциях: сложение (ADD), сложение с переносом (ADDC) и вычитание с заемом (SUBB) аккумулятор является первым операндом и принимает результат операции. Вторым операндом может быть рабочий регистр выбранного банка рабочих регистров, регистр внутренней памяти данных с косвенно-регистровой и прямой адресацией или байт непосредственных данных. Указанные операции влияют на флаги: пеполнения, переноса, промежуточного переноса и флаг четности в слове состояния процессора (PSW). Использование разряда переноса позволяет многократно повысить точность при операциях сложения (ADDC) и вычитания (SUBB). Выполнение операций сложения и вычитания с учетом знака может быть осуществлено с помощью программного управления флагом переполнения (OV) регистра PSW. Флаг промежуточного переноса (АС) обеспечивает выполнение арифметических операций в двоично-десятичном коде. Операции инкременирования и декременирования на флаги не влияют. Операции сравнения не влияют ни на операнд назначения, ни на операнд источника, но они влияют на флаги переноса. Существуют три арифметические операции, которые выполняются только на аккумуляторе: две команды проверки содержимого аккумулятора А (JZ, JNZ), и команда десятичной коррекции при сложении двоично-десятичных кодов. При операции умножения содержимое аккумулятора А умножается на содержимое регистра В и результат размещается следующим образом: младший байт в регистре В, старший - в регистре А. В случае выполнения операции деления целое от деления помещается в аккумулятор А, остаток от деления - в регистр В. Логические команды с байтовыми переменными Система команд позволяет реализовать логические операции: "И", "ИЛИ", "ИСКЛЮЧАЮЩЕЕ ИЛИ" на регистре-аккумуляторе (А) и байте-источнике. Вторым операндом (байтом-источником) при этом может быть рабочий регистр в выбранном банке рабочих регистров; регистр внутреннего ОЗУ, адресуемый с помощью косвенно-регистровой адресации; прямоадресуемые ячейки внутреннего ОЗУ и регистры специального назначения; непосредственная величина. Указанные логические операции могут быть реализованы на любом прямоадресуемом регистре внутреннего ОЗУ или регистре специального назначения с использованием в качестве второго операнда содержимого аккумлятора А или непосредственных данных. Существуют логические операции, которые выполняются только на аккумуляторе: сброс и инвертирование всех восьми разрядов А; циклический сдвиг влево и впрво; циклический сдвиг влево и вправо с учетом флага переноса; обмен местами старшей и младшей тетрад (ниблов) внутри аккумулятора. Команды передачи данных Таблицы символов (кодов), зашитые в ПЗУ программы могут быть выбраны с помощью команд передачи данных с использованием косвенной адресации. Байт константы может быть передан в аккумулятор из ячейки памяти программ, адресуемой суммой базового регистра (PC или DPTR) и индексного регистра (содержимого А). Это обеспечивает, например, удобное средство реализации алгоритма преобразования кода ASCII в семисегментный код. Любая ячейка 256-байтового блока внешнего ОЗУ данных может быть выбрана с использованием косвенно-регистровой адресации через регистры указатели R0 или R1 (выбранного банка рабочих регистров). Ячейка внутри адресного пространства 64 Кбайт внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адресации через регистр-указатель данных DPTR. Команды передачи между прямоадресуемыми регистрами позволяют заносить величину из порта в ячейку внутреннего ОЗУ без использования рабочих регистров или аккумулятора. В логическом процессоре любой прямоадресуемый бит может быть помещен в бит переноса и наоборот. Содержимое аккумулятора может быть обменено с содержимым рабочих регистров (выбранного банка) и с содержимым адресуемых с помощью косвенно-регистровой адресации ячеек внутреннего ОЗУ, а также с содержимым прямо-адресуемых ячеек внутреннего ОЗУ и с содержимым регистров специального назначения. Младший нибл (разряды 3-0) содержимого аккумулятора, может быть обменен с младшим ниблом содержимого ячеек внутреннего ОЗУ, выбираемых с помощью косвенно-регистровой адресации. Команды битового процессора Битовый процессор является частью архитектуры МК семейства MCS51 и его можно рассматривать как независимый процессор побитовой обработки. Битовый процессор выполняет набор команд, имеет свое побитово-адресуемое ОЗУ и свой ввод-вывод. Команды, оперирующие с битами, обеспечивают прямую адресацию 128 битов (0-127) в шестнадцати ячейках внутреннего ОЗУ (ячейки с адресами 20Н-2FH) и прямую побитовую адресацию регистров специального назначения, адреса которых кратны восьми. Каждый из отдельно адресуемых битов может быть установлен в "1", сброшен в "0", инвертирован, проверен. Могут быть реализованы переходы: если бит установлен; если бит не установлен; переход, если бит установлен, со сбросом этого бита; бит может быть перезаписан в (из) разряда переноса. Между любым прямоадресуемым битом и флагом переноса могут быть произведены логические операции "И", "ИЛИ", где результат заносится в разряд флага переноса. Команды побитовой обработки обеспечивают реализацию сложных функций комбинаторной логики и оптимизацию программ пользователя. Команды ветвления и передачи управления Адресное пространство памяти программ не имеет страничной организации, что позволяет свободно перемщать фрагменты программы внутри адресного пространства, при этом не требуется перезасылка (изменение) номера страницы. Перемещение отдельных фрагментов программы обеспечивает возможность использования перемещаемых программных модулей различными программами. Команды 16-разрядных переходов и вызовов подпрограмм позволяют осуществлять переход в любую точку адресного пространства памяти программ объемом 64 Кбайт. Команды 11-разрядных переходов и вызовов подпрограмм обеспечивают переходы внутри программного модуля емкостью 2 Кбайт. В системе команд имеются команды условных и безусловных переходов относительно начального адреса слеующей программы в пределах от (РС)-128 до (ЗС)+127. Команды проверки отдельных разрядов позволяют осуществлять условные переходы по состоянию "0" или "1" прямоадресуемых битов. Команды проверки содержимого аккумулятора (на ноль/не ноль) позволяют осуществлять условные переходы по содержимому А. Косвенно-регистровые переходы в системе команд обеспечивают ветвление относительно базового регистра (содержимого DPTR или РС) со смещением, находящимся в аккумуляторе А. Регистровая адресация Регистровая адресация используется для обращения к восьми рабочим регистрам выбранного банка рабочих регистров (эти же регистры могут быть выбраны с помощью прямой адресации и косвенно-регистровой адресации как обычные ячейки внутреннего ОЗУ данных). Регистровая адресация используется для обращения к регистрам А, В, АВ (сдвоенному регистру), DPTR и к флагу переноса С. Использование регистровой адресации позволяет получать двухбайтовый эквивалент трехбайтовых команд прямой адресации. Прямая адресация Прямая байтовая адресация используется для обращения к ячейкам внутренней памяти (ОЗУ) данных (0-127) и к регистрам специального назначения. Прямая побитовая адресация используется для обращения к отдельно адресуемым 128 битам, расположенным в ячейках с адресами 20H-2FH и к отдельно адресуемым битам регистров специального назначения. Старший бит байта кода прямого адрема выбирает одну из двух групп отдельно адремуемых битов, расположенных в ОЗУ или регистрах специального назначения. Прямо адресуемые биты с адресами 0-127 (00H-7FH) расположены в блоке из 16 ячеек внутреннего ОЗУ, имеющих адреса 20H-2FH. Указанные ячейки последовательно пронумерованы от младшего бита младшего байта до старшего бита старшего байта. Отдельно адресуемые биты в регистрах специального назначения пронумерованы следующим образом: пять старших разрядов адреса совпадают с пятью старшими разрядами адреса самого регистра, а три младших - определяют местоположение отдельного ибта внутри регистра. Косвенно-регистровая адресация Косвенно-регистровая адресация используется для обращения к ячейкам внутренннего ОЗУ данных. В качестве регистров-указателей используется регистры R10, R1 выбранного банка регистров. В командах PUSH и POP используется содержимое указателя стека (SP). Косвенно-регистровая адресация используется также для обращения к внешней памяти данных. В этом случае с помощью регистров-указателей R0 и R1 (выбранного банка рабочих регистров) выбирается ячейка из блока в 256 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2. 16-разрядный указатель данных (DPTR) может быть использован для обращения к любой ячейке адресного пространства внешней памяти данных объемом до 64 Кбайт. Непосредственная адресация Непосредственная адресация позволяет выбрать из адресного пространства памяти программ константы, явно указанные в команде. Косвенно-регистровая адресация по сумме базового и индексного регистров Косвенно-регистровая адресация по сумме: базовый регистр плюс индексный регистр (содержимое аккумулятора А) упрощает просмотр таблиц, зашитых в памяти программ. Любой байт из таблицы может быть выбран по адресу, определяемому суммой содержимого DPTR или РС и содержимого А. Таблица обозначений и символов, используемых в системе команд
Обозначение, символ Назначение
А Аккумулятор
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 Абсолютный вызов подпрограммы
Команда ADD A, <байт-источник> Сложение AC, C, OV
Команда ADDC A, <байт-источник> Сложение с переносом AC, C, OV
Команда AJMP Абсолютный переход
Команда ANL <байт-назначения>, <байт-источникa> Логическое "И"
Команда ANL C, <байт-источникa> Логическое "И" для переменных-битов
Команда CJNE <байт-назначения>, <байт-источник>, <смещение> Сравнение и переход, если не равно C
Команда CLR A Сброс аккумулятора
Команда CLR Сброс бита C, bit
Команда CPL A Инверсия ак умуля ора
Команда CPL Инверсия бита C, bit
Команда DA A Десятичная коррекция аккумулятора для ложения AC, C
Команда DEC <байт> Декремент
Команда DIV AB Деление C, OV
Команда DJNZ <байт>, <смещение> Декремент и переход, если не равно нулю
Команда INC <байт> Инкремент
Команда INC DPTR Инкремент указателя данных
Команда JB , Переход, если бит установлен
Команда JBC , Переход, если бит установлен и сброс этого бита
Команда JC Переход, если перенос установлен
Команда JMP @A+DPTR Косвенный переход
Команда JNB , Переход, если бит не установлен
Команда JNC Переход, если перенос не установлен
Команда JNZ Переход, если содержимое аккумулятора не равно нулю
Команда JZ Переход, если содержимое аккумулятора равно 0
Команда LCALL Длинный вызов
Команда LJMP Длинный переход
Команда MOV <байт-назначения>, <байт-источника> Переслать переменную-байт
Команда MOV <бит-назначения>, <бит-источника> Переслать бит данных C
Команда MOV DPTR,#data16 Загрузить указатель данных 16-битовой константой
Команда MOVC A,@A+() Переслать байт из памяти программ
Команда MOVX <байт приемника>, <байт источника> Переслать во внешнюю память (из внешней памяти) данных
Команда MUL AB Умножение C, OV
Команда NOP Нет операции PC
Команда ORL <байт-назначения>, <байт-источникa> Логическое "ИЛИ" для перемнных-байтов
Команда ORL C, <бит источникa> Логическое "ИЛИ" для переменных-битов C
Команда POP Чтение из стека
Команда PUSH Запись в стек
Команда RET Возврат из подпрограммы
Команда RETI Возврат из прерывания
Команда RL A Сдвиг содержимого аккумулятора влево
Команда RLC A Сдвиг содержимого аккумулятора влево через флаг переноса
Команда RR A Сдвиг содержимого аккумулятора вправо
Команда RRC A Сдвиг содержимого аккумулятора вправо через флаг переноса C
Команда SETB Установить бит C
Команда SJMP <метка> Короткий переход
Команда SUBB A, <байт источника> Вычитание с заемом AC, C, OV
Команда SWAP A Обмен тетрадами внутри аккумулятора
Команда XCH A, <байт> Обмен содержимого аккумулятора с переменной-байтом
Команда XCHD A,@R1 Обмен тетрадой
Команда XRL <байт-назначения>, <байт-источникa> Логическое "ИСКЛЮЧАЮЩЕЕ ИЛИ" для перемнных-байтов

АРХИТЕКТУРА МИКРОКОНТРОЛЛЕРОВ СЕМЕЙСТВА MCS -51

Конспект лекций по курсам

«Микропроцессоры в системах контроля», «Микропроцессорная техника»

«Микропроцессорные средства и системы»

для студентов всех форм обучения специальностей

072000 – Стандартизация и сертификация

210200 – Автоматизация технологических процессов

230104 – Системы автоматизированного проектирования

Тамбов 2005

ВВЕДЕНИЕ.. 3

1. СТРУКТУРА МИКРОКОНТРОЛЛЕРА INTEL 8051. 3

1.1. Организация памяти. 5

1.2. Арифметико-логическое устройство. 6

1.3. Резидентная память программ и данных. 7

1.4. Аккумулятор и регистры общего назначения. 8

1.5. Регистр слова состояния программы и его флаги. 9

1.6. Регистры-указатели. 10

1.7. Регистры специальных функций. 11

1.8. Устройство управления и синхронизации. 11

1.9. Параллельные порты ввода/вывода информации. 12

1.10. Таймеры/счетчики. 13

1.11. Последовательный порт. 18

1.11.1. Регистр SBUF.. 18

1.11.2. Режимы работы последовательного порта. 18

1.11.3. Регистр SCON.. 19

1.11.4. Скорость приёма/передачи. 21

1.12. Система прерываний. 22

2. СИСТЕМА КОМАНД МИКРОКОНТРОЛЛЕРА INTEL 8051. 26

2.1. Общие сведения. 26

2.1.1. Типы команд. 27

2.1.2. Типы операндов. 28

2.1.3. Способы адресации данных. 30

2.1.4. Флаги результата. 31

2.1.5. Символическая адресация. 32

2.2. Команды передачи данных. 33

2.2.1. Структура информационных связей. 33

2.2.2. Обращение к аккумулятору. 33

2.2.3. Обращение к внешней памяти данных. 34

2.2.4. Обращение к памяти программ.. 34


2.2.5. Обращение к стеку. 35

2.3. Арифметические операции. 35

2.4. Логические операции. 39

2.5. Команды передачи управления. 43

2.5.1. Длинный переход. 43

2.5.2. Абсолютный переход. 43

2.5.3. Относительный переход. 44

2.5.4. Косвенный переход. 44

2.5.5. Условные переходы.. 44

2.5.6. Подпрограммы.. 47

2.6. Операции с битами. 48

Контрольные вопросы... 49

ЛИТЕРАТУРА.. 50

Приложение СИСТЕМА КОМАНД INTEL 8051. 51

ВВЕДЕНИЕ

С 80-х годов 20 века в микропроцессорной технике выделился самостоятельный класс интегральных схем – однокристальные микроконтроллеры, которые предназначены для встраивания в приборы различного назначения. От класса однокристальных микропроцессоров их отличает наличие внутренней памяти, развитые средства взаимодействия с внешними устройствами.

Широкое распространение получили 8-разрядных однокристальные микроконтроллеры семейства MCS-51. Это семейство образовалось на основе микроконтроллера Intel 8051, получившего большую популярность у разработчиков микропроцессорных систем контроля благодаря удачно спроектированной архитектуры. Архитектура микроконтроллера это совокупность внутренних и внешних программно доступных аппаратных ресурсов и системы команд.

В последствии фирма Intel выпустила около 50 моделей на базе операционного ядра микроконтроллера Intel 8051. Одновременно многие другие фирмы, такие как Atmel, Philips начали производство своих микроконтроллеров разработанных в стандарте MCS-51. Существует также и отечественный аналог микроконтроллера Intel 8051 - микросхема К1816ВЕ51.

2. СТРУКТУРА МИКРОКОНТРОЛЛЕРА INTEL 8051

Микроконтроллер Intel 8051 выполнен на основе высокоуровневой n-МОП технологии. Его основные характеристики следующие:

· восьмиразрядный центральный процессор, оптимизированный для реализации функций управления;

· встроенный тактовый генератор (максимальная частота 12 МГц);

· адресное пространство памяти программ - 64 Кбайт;

· адресное пространство памяти данных - 64 Кбайт;

· внутренняя память программ - 4 Кбайт;

· внутренняя память данных - 128 байт;

· дополнительные возможности по выполнению операций булевой алгебры (побитовые операции);

· 2 шестнадцатиразрядных многофункциональных таймера/счетчика;

· полнодуплексный асинхронный приемопередатчик (последовательный порт);

· векторная система прерываний с двумя уровнями приоритета и пятью источниками событий.

Рисунок 1 - Структурная схема микроконтроллера Intel 8051

Основу структурной схемы (рис. 1) образует внутренняя двунаправленная 8-разрядная шина, которая связывает между собой основные узлы и устройства микроконтроллера: резидентную память программ (RPM), резидентную память данных (RDM), арифметико-логическое устройство (ALU), блок регистров специальных функций, устройство управления (CU), параллельные порты ввода/вывода (P0-P3), а также программируемые таймеры и последовательный порт.

2.1. Организация памяти

Данный микроконтроллер имеет встроенную (резидентную) и внешнюю память программ и данных. Резидентная память программ (RPM) имеет объем 4 Кбайт, резидентная память данных (RDM) – 128 Байт.


В зависимости от модификации микроконтроллера RPM выполняется в виде масочного ПЗУ, однократно программируемого либо репрограммируемого ПЗУ.

При необходимости пользователь может расширять память программ установкой внешнего ПЗУ. Доступ к внутреннему или внешнему ПЗУ определяется значением сигнала на выводе ЕА (External Access):

EA=VCC (напряжение питания) - доступ к внутреннему ПЗУ;

EA=VSS (потенциал земли) - доступ к внешнему ПЗУ.

Внешняя память программ и данных может составлять по 64 Кбайт и адресоваться с помощью портов P0 и P2. На рис.2 представлена карта памяти Intel 8051.

Рисунок 2 - Организация памяти Intel 8051

Строб чтения внешнего ПЗУ - (Program Store Enable) генерируется при обращении к внешней памяти программ и является неактивным во время обращения к ПЗУ, расположенному на кристалле.

Область нижних адресов памяти программ (рис. 3) используется системой прерываний. Архитектура микросхемы INTEL 8051 обеспечивает поддержку пяти источников прерываний. Адреса, по которым передается управление по прерыванию, называются векторами прерывания.

Рисунок 3 - Карта нижней области программной памяти

2.2. Арифметико-логическое устройство

8-битное арифметико-логическое устройство (ALU) может выполнять арифметические операции сложения, вычитания, умножения и деления; логические операции И, ИЛИ, исключающее ИЛИ, а также операции циклического сдвига, сброса, инвертирования и т. п. К входам подключены программно-недоступные регистры T1 и T2, предназначенные для временного хранения операндов, схема десятичной коррекции (DCU) и схема формирования признаков результата операции (PSW).

Простейшая операция сложения используется в ALU для инкрементирования содержимого регистров, продвижения регистра-указателя данных (RAR) и автоматического вычисления следующего адреса резидентной памяти программ. Простейшая операция вычитания используется в ALU для декрементирования регистров и сравнения переменных.

Простейшие операции автоматически образуют “тандемы” для выполнения таких операций, как, например, инкрементирование 16-битных регистровых пар. В ALU реализуется механизм каскадного выполнения простейших операций для реализации сложных команд. Так, например, при выполнении одной из команд условной передачи управления по результату сравнения в ALU трижды инкрементируется счётчик команд (PC), дважды производится чтение из RDM, выполняется арифметическое сравнение двух переменных, формируется 16-битный адрес перехода и принимается решение о том, делать или не делать переход по программе. Все перечисленные операции выполняются всего лишь за 2 мкс.

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

Таким образом, ALU может оперировать четырьмя типами информационных объектов: булевыми (1 бит), цифровыми (4 бита), байтными (8 бит) и адресными (16 бит). В ALU выполняется 51 различная операция пересылки или преобразования этих данных. Так как используется 11 режимов адресации (7 для данных и 4 для адресов), то путем комбинирования операции и режима адресации базовое число команд 111 расширяется до 255 из 256 возможных при однобайтном коде операции.

2.3. Резидентная память программ и данных

Резидентные (размещённые на кристалле) память программ (RPM) и память данных (RDM) физически и логически разделены, имеют различные механизмы адресации, работают под управлением различных сигналов и выполняют разные функции.

Память программ RPM имеет емкость 4 Кбайта и предназначена для хранения команд, констант, управляющих слов инициализации, таблиц перекодировки входных и выходных переменных и т. п. Память имеет 16-битную шину адреса, через которую обеспечивается доступ из программного счётчика PC или из регистра-указателя данных (DPTR). DPTR выполняет функции базового регистра при косвенных переходах по программе или используется в операциях с таблицами.

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

Память программ, так же как и память данных, может быть расширена до
64 Кбайт путем подключения внешних микросхем.

Таблица 1

Блок регистров специальных функций

Наименование

Аккумулятор

Регистр-расширитель аккумулятора

Слово состояния программы

Регистр-указатель стека

Регистр-указатель данных

Регистр приоритетов прерываний

Регистр маски прерываний

Регистр режима таймера/счётчика

Регистр управления/статуса таймера

Таймер 0 (старший байт)

Таймер 0 (младший байт)

Таймер 1 (старший байт)

Таймер 1 (младший байт)

Регистр управления приёмопередатчиком

Буфер приёмопередатчика

Регистр управления мощностью

Примечание. Регистры, имена которых отмечены знаком (*), допускают адресацию отдельных битов.

2.4. Аккумулятор и регистры общего назначения

Аккумулятор (A) является источником операнда и местом фиксации результата при выполнении арифметических, логических операций и ряда операций передачи данных. Кроме того, только с использованием аккумулятора могут быть выполнены операции сдвигов, проверка на нуль, формирование флага паритета и т. п.

В распоряжении пользователя имеется четыре банка по 8 регистров общего назначения R0–R7 (рис. 9). Однако возможно использование регистров только одного из четырёх банков, который выбирается с помощью бит регистра PSW.

2.5. Регистр слова состояния программы и его флаги

При выполнении многих команд в ALU формируется ряд признаков операции (флагов), которые фиксируются в регистре слова состояния программы (PSW). В табл. 2 приводится перечень флагов PSW, даются их символические имена и описываются условия их формирования.

Таблица 2

Формат слова состояния программы PSW

Имя и назначение

Флаг переноса. Устанавливается и сбрасывается аппаратно или программно при выполнении арифметических и логических операций

Флаг вспомогательного переноса. Устанавливается и сбрасывается только аппаратно при выполнении команд сложения и вычитания и сигнализирует о переносе или займе в бите 3

Флаг 0. Может быть установлен, сброшен или проверен программой как флаг, специфицируемый пользователем

Выбор банка регистров. Устанавливается и сбрасывается программно для выбора рабочего банка регистров (табл. 3)

Флаг переполнения. Устанавливается и сбрасывается аппаратно при выполнении арифметических операций

Не используется

Флаг паритета. Устанавливается и сбрасывается аппаратно в каждом цикле и фиксирует нечётное/чётное число единичных битов в аккумуляторе, т. е. выполняет контроль по четности

Таблица 3

Выбор рабочего банка регистров

Границы адресов

Наиболее “активным” флагом PSW является флаг переноса, который принимает участие и модифицируется в процессе выполнения множества операций, включая сложение, вычитание и сдвиги. Кроме того, флаг переноса (CY) выполняет функции “булева аккумулятора” в командах, манипулирующих с битами. Флаг переполнения (OV) фиксирует арифметическое переполнение при операциях над целыми числами со знаком и делает возможным использование арифметики в дополнительных кодах. ALU не управляет флагами селекции банка регистров (RS0, RS1), их значение полностью определяется прикладной программой и используется для выбора одного из четырёх регистровых банков.

В виде байта регистр PSW может быть представлен следующим образом:

В микропроцессорах, архитектура которых опирается на аккумулятор, большинство команд работают с ним, используя неявную адресацию. В Intel 8051 дело обстоит иначе. Хотя процессор имеет в своей основе аккумулятор, он может выполнять множество команд и без его участия. Например, данные могут быть переданы из любой ячейки RDM в любой регистр, любой регистр может быть загружен непосредственным операндом и т. д. Многие логические операции могут быть выполнены без участия аккумулятора. Кроме того, переменные могут быть инкрементированы, декрементированы и проверены без использования аккумулятора. Флаги и управляющие биты могут быть проверены и изменены аналогично.

2.6. Регистры-указатели

8-битный указатель стека (SP) может адресовать любую область RDM. Его содержимое инкрементируется прежде, чем данные будут запомнены в стеке в ходе выполнения команд PUSH и CALL. Содержимое SP декрементируется после выполнения команд POP и RET. Подобный способ адресации элементов стека называют прединкрементным/постдекрементным. В процессе инициализации микроконтроллера после сигнала RST в SP автоматически загружается код 07Н. Это значит, что если прикладная программа не переопределяет стек, то первый элемент данных в стеке будет располагаться в ячейке RDM с адресом 08Н.

Двухбайтный регистр-указатель данных DPTR обычно используется для фиксации 16-битного адреса в операциях с обращением к внешней памяти. Командами микроконтроллера регистр-указатель данных может быть использован или как 16-битный регистр, или как два независимых 8-битных регистра (DPH и DPL).

2.7. Регистры специальных функций

Регистры с символическими именами IP, IE, TMOD, TCON, SCON и PCON используются для фиксации и программного изменения управляющих бит и бит состояния схемы прерывания, таймера/счётчика, приёмопередатчика последовательного порта и для управления энергопотреблением. Подробно их организация будет описана в разделах 1.8-1.12, при рассмотрении особенностей работы микроконтроллера в различных режимах.

2.8. Устройство управления и синхронизации

Кварцевый резонатор, подключаемый к внешним выводам микроконтроллера, управляет работой внутреннего генератора, который в свою очередь формирует сигналы синхронизации. Устройство управления (CU) на основе сигналов синхронизации формирует машинный цикл фиксированной длительности, равной 12 периодам генератора. Большинство команд микроконтроллера выполняется за один машинный цикл. Некоторые команды, оперирующие с 2-байтными словами или связанные с обращением к внешней памяти, выполняются за два машинных цикла. Только команды деления и умножения требуют четырех машинных циклов. На основе этих особенностей работы устройства управления производится расчёт времени исполнения прикладных программ.

На схеме микроконтроллера к устройству управления примыкает регистр команд (IR). В его функцию входит хранение кода выполняемой команды.

Входные и выходные сигналы устройства управления и синхронизации:

1. PSEN – разрешение программной памяти,

2. ALE – выходной сигнал разрешения фиксации адреса,

3. PROG – сигнал программирования,

4. EA – блокировка работы с внутренней памятью,

5. VPP – напряжение программирования,

6. RST – сигнал общего сброса,

7. VPD – вывод резервного питания памяти от внешнего источника,

8. XTAL – входы подключения кварцевого резонатора.

2.9. Параллельные порты ввода/вывода информации

Все четыре порта (P0-P3) предназначены для ввода или вывода информации побайтно. Каждый порт содержит управляемые регистр-защёлку, входной буфер и выходной драйвер.

Выходные драйверы портов P0 и P2, а также входной буфер порта P0 используются при обращении к внешней памяти. При этом через порт P0 в режиме временного мультиплексирования сначала выводится младший байт адреса, а затем выдается или принимается байт данных. Через порт P2 выводится старший байт адреса в тех случаях, когда разрядность адреса равна 16 бит.

Все выводы порта P3 могут быть использованы для реализации альтернативных функций, перечисленных в табл. 4. Эти функции могут быть задействованы путем записи 1 в соответствующие биты регистра-защёлки (P3.0-P3.7) порта P3.

Таблица 4

Альтернативные функции порта P3

Имя и назначение

Чтение. Активный сигнал низкого уровня формируется аппаратно при обращении к внешней памяти данных

Запись. Активный сигнал низкого уровня формируется аппаратно при обращении к внешней памяти данных

Вход таймера/счётчика 1 или тест-вход

Вход таймера/счётчика 0 или тест-вход

Вход запроса прерывания 1. Воспринимается сигнал низкого уровня или срез

Вход запроса прерывания 0. Воспринимается сигнал низкого уровня или срез

Выход передатчика последовательного порта в режиме UART. Выход синхронизации в режиме регистра сдвига

Вход приёмника последовательного порта в режиме UART. Ввод/вывод данных в режиме регистра сдвига

Порт 0 является двунаправленным, а порты 1-3 - квазидвунаправленными. Каждая линия портов может быть использована независимо для ввода или вывода.

По сигналу RST в регистры-защёлки всех портов автоматически записываются единицы, настраивающие их тем самым на режим ввода.

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

Обращение к портам ввода/вывода возможно с использованием команд, оперирующих с байтом, отдельным битом, произвольной комбинацией битов. При этом в тех случаях, когда порт является одновременно операндом и местом назначения результата, устройство управления автоматически реализует специальный режим, который называется “чтение-модификация-запись”. Этот режим обращения предполагает ввод сигналов не с внешних выводов порта, а из его регистра-защёлки, что позволяет исключить неправильное считывание ранее выведенной информации. Этот механизм обращения к портам реализован в командах:

Понравилась статья? Поделитесь с друзьями!
Была ли эта статья полезной?
Да
Нет
Спасибо, за Ваш отзыв!
Что-то пошло не так и Ваш голос не был учтен.
Спасибо. Ваше сообщение отправлено
Нашли в тексте ошибку?
Выделите её, нажмите Ctrl + Enter и мы всё исправим!