Программирование микроконтроллеров в программной среде NI Circuit Design Suite — Multisim 12.0
Микроконтроллеры семейства х51. Общие сведения
Сегодня существует более 200 модификаций микроконтроллеров семейства х51, которые выпускает почти 20 компаний. Эти модификации включают в себя кристаллы с широчайшим спектром периферии: от простых 20‑выводных устройств с одним таймером и 1К программной памяти до сложнейших 100‑выводных кристаллов с 10‑разрядными АЦП, массивами таймеров‑счетчиков, аппаратными 16‑разрядными умножителями и 64К программной памяти на кристалле. Каждый год появляются все новые варианты моделей этого семейства. Основные направления их развития: увеличение быстродействия (повышение тактовой частоты и переработка архитектуры), снижение напряжения питания, увеличение объема ОЗУ и flash-памяти на кристалле с возможностью внутрисхемного программирования, а также введение в состав периферии микроконтроллера сложных устройств типа системы управления приводами, CAN- и USB-интерфейсов.
Все микроконтроллеры из семейства MCS‑51 имеют общую систему команд. Наличие дополнительного оборудования влияет только на количество регистров специального назначения.
х51‑совместимые микроконтроллеры выпускают практически все известные мировые производители: Intel, Atmel, Philips, Siemens, Winbond, Cypress, Texas Instruments, STM, TDK, Cygnal и многие другие. Эти микросхемы имеют следующие аппаратные особенности:
- наличие 128 байт внутреннего ОЗУ;
- наличие четырех двунаправленных, побитно настраиваемых восьмиразрядных портов ввода/вывода данных;
- наличие двух 16‑разрядных таймеров‑счетчиков;
- встроенный тактовый генератор;
- адресация 64К памяти программ и 64К памяти данных;
- две линии запросов на прерывание от внешних устройств;
- интерфейс для последовательного обмена данными с другими устройствами.
Выводы микроконтроллера х51 имеют следующее назначение (рис. 1):
- Vss — общий.
- Vcc — питание.
- XTAL1, XTAL2 — входы для подключения кварцевого резонатора.
- RЕSЕT — вход общего сброса микроконтроллера.
- P—S—E—N — разрешение внешней памяти программ, выдается только при обращении к внешнему ПЗУ.
- ALE — строб адреса внешней памяти.
- E—A — отключение внутренней программной памяти.
- Р0–Р3 — порты ввода/вывода данных. Линии портов Р0.0–Р3.7 — двунаправленные, то есть могут работать как на ввод, так и на вывод информации независимо друг от друга.
Внутренняя память программ микроконтроллера может быть расширена за счет подключения микросхем внешней памяти программ. Необходимо отметить, что в разных модификациях микроконтроллеров х51 количество портов ввода/вывода и цоколевка могут отличаться от того, что представлено на рис. 1. К примеру, фирма Winbond выпускает микроконтроллеры, которые имеют пять портов ввода/вывода данных.
Программирование микроконтроллеров в программной среде Multisim
Необходимо отметить, что в состав системы Multisim 12.0 входит 68 моделей микроконтроллеров и 60 моделей микропроцессоров, однако запуск процесса моделирования возможен только для микроконтроллеров, которые находятся в библиотеке компонентов MCU: это х8051, х8052, PIC16F84 и PIC16F84A. Рассмотрим процесс моделирования схем с использованием микроконтроллеров на примере х8051.
Для того чтобы добавить эту микросхему в рабочее поле проекта, необходимо в программе Multisim в меню «Вставить» выбрать пункт «Компонент…», в результате чего откроется окно «Выбор компонента» (рис. 2). В левой верхней части окна находится меню «Раздел», в котором из выпадающего списка следует выбрать нужную библиотеку компонентов базы данных Multisim. В нашем случае необходимо выбрать пункт MCU.
В поле «Семейство» расположены все группы семейств микросхем выбранной библиотеки, в то время как в поле «Компонент» отображаются все компоненты выбранного семейства. После того как выбор компонента сделан, его условное графическое обозначение отобразится в поле предварительного просмотра «Символ (ANSI)». Для того чтобы разместить выбранный компонент на схеме, необходимо в окне «Выбор компонента» нажать на кнопку ОК, после чего это окно будет закрыто, а символ компонента будет прикреплен к курсору мыши, при помощи которой необходимо поместить компонент в нужное место на схеме.
При размещении микроконтроллера х51 в рабочем поле проекта откроется окно «мастера» MCU «Создатель MCU — шаг 1 из 3». Работа «мастера» состоит из трех шагов, на первом из которых (рис. 3а) пользователю будет предложено выбрать директорию размещения проекта и создать для него рабочую папку. Для этого необходимо указать «Путь доступа к рабочей области для этого MCU» и «Название рабочей области». После того как соответствующие поля заполнены, необходимо нажать на кнопку «Далее», в результате чего будет открыто следующее окно «мастера» «Создатель MCU — шаг 2 из 3» (рис. 3б).
На втором шаге «мастер» предложит определить следующие установки проекта:
«Тип проектирования» («Стандартный» или «Использовать внешний hex файл»). Выберите второй параметр, если у вас уже есть готовый .hex файл, в противном случае установите стандартный тип проектирования.
- «Язык программирования» («С» или «Ассемблер»).
- «Инструменты ассемблера/компилятора».
- «Название проекта»— вводится вручную.
- После установки всех параметров необходимо нажать на кнопку «Далее», в результате чего будет открыто третье окно «мастера» «Создатель MCU — шаг 3 из 3» (рис. 3в). В этом окне посредством установки переключателя в нужную позицию необходимо выбрать один из параметров:
- «Начать с пустого проекта»;
- «Добавить исходный файл».
Выберите первый пункт, если у вас уже есть на диске компьютера подготовленный файл .hex. В противном случае выберите второй пункт.
При этом в поле «Имя исходного файла» необходимо прописать название файла .asm, в который в процессе проектирования будет вноситься код программы инициализации микроконтроллера. После того как переключатель будет установлен в нужную позицию, нажмите на кнопку «Закончить», в результате чего работа с «мастером» MCU будет завершена.
Новый файл можно добавить в проект и в процессе работы над схемой. Для этого в меню «Микроконтроллеры» выберите пункт «MCU 8051 U?/Менеджер кодов MCU», в результате чего будет открыто окно «Менеджер кодов MCU» (рис. 4), и в поле «Добавить в проект» нажмите на кнопку «Новый файл». Значение «U?» в пункте меню «MCU 8051 U?» зависит от количества микроконтроллеров в вашем проекте. Если в вашем проекте один микроконтроллер, этот пункт меню получит название «MCU 8051 U1». Если же в нем несколько микроконтроллеров, то в меню «Микроконтроллеры» количество пунктов «MCU 8051 U?» будет соответствовать количеству микроконтроллеров в вашем проекте, а значение «U?» — номеру микроконтроллера.
Отметим, что если в вашей рабочей области создано несколько проектов, то предварительно посредством выделения при помощи левой кнопки мыши необходимо определить в окне «Менеджер кодов MCU» в поле дерева проектов тот из них, к которому будет добавлен новый файл. В результате выполненных действий откроется окно «Новый» (рис. 5), в котором в поле «Тип файла» следует выбрать один из следующих пунктов меню:
- «Файл ассемблера (.asm)»;
- «Вложенный файл ассемблера (.inc)»;
- «Исходный файл С (.c)»;
- «Выходной файл С (.h)», а в поле «Имя файла» ввести название файла, который будет добавлен в проект.
В проект можно также добавить и уже подготовленные ранее .hex или .asm файлы.
Для того чтобы добавить .asm файл, в окне «Менеджер кодов MCU» в поле «Добавить в проект» нажмите на кнопку «Файлы…», в результате чего откроется окно проводника Windows, в котором нужно выбрать на диске компьютера необходимый файл. Затем следует нажать на кнопку «Открыть».
Для того чтобы добавить .hex файл, необходимо в меню «Микроконтроллеры» выбрать пункт «MCU 8051 U?/Менеджер кодов MCU» и в открывшемся окне «Менеджер кодов MCU» на вкладке «Основные» в поле «Файл машинного кода для моделирования (*.hex)» нажать на кнопку «Просмотр…» (рис. 6). В результате выполненных действий будет открыто окно проводника Windows, в котором следует выбрать на диске компьютера нужный .hex файл, после чего нажать на кнопку «Открыть». Для того чтобы на вкладке «Основные» стало активным поле «Файл машинного кода для моделирования (*.hex)», необходимо в дереве проектов при помощи левой кнопки мыши выделить название проекта, к которому добавляется файл машинного кода.
После того как работа с «мастером» MCU закончена, в проект будет добавлена еще одна вкладка для ввода текста программы инициализации микроконтроллера. В меню «Микроконтроллеры» находятся команды для обеспечения написания и отладки программы с учетом особенностей разрабатываемого устройства.
Для наглядной демонстрации работы программы инициализации микроконтроллера воспользуемся цветными пробниками, порог срабатывания которых установим в соответствии с нижним уровнем значения напряжения логической единицы. Цветные пробники расположены на панели инструментов «Виртуальные измерительные компоненты», которую можно добавить в проект при помощи команды меню «Вид» → «Панель инструментов». Пробники определяют напряжение в конкретной точке схемы и, если исследуемая точка имеет напряжение, равное или большее значения напряжения срабатывания, которое указано в настройках этого цветного пробника, то пробник загорается цветом. Установить необходимое пороговое значение срабатывания цветного пробника можно в окне настроек этого прибора на вкладке «Параметры», установив в поле «Пороговое напряжение (VT)» необходимое значение напряжения. Окно настроек можно открыть с помощью двойного щелчка левой кнопки мыши на пиктограмме прибора на схеме.
Ряд пробников подсоединим к исследуемым линиям портов микроконтроллера. В результате чего при появлении на выходе линии порта значения логической единицы пробник будет подсвечен, при появлении же значения логического нуля пробник светиться не будет.
После того как в рабочей области проекта собрана схема (рис. 7), а на вкладке «*.asm» введен код программы (рис. 8), можно запускать моделирование. Процесс моделирования запускается при помощи кнопки «Пуск», которая находится на панели инструментов «Моделирование». Эту панель можно добавить в проект при помощи команды меню «Вид» → «Панель инструментов». Также для запуска моделирования можно воспользоваться функциональной клавишей на клавиатуре F5. В результате, в том случае если компилятор в листинге программы не обнаружит ошибок, на диске вашего компьютера в рабочей папке проекта будут созданы следующие файлы (рис. 9):
- *.hex— файл машинного кода (рис. 10);
- *.asm— файл с ассемблерным кодом программы;
- *.lst— файл листинга программы (рис. 11).
Программа инициализации микроконтроллера пишется на языке программирования asm51. Это язык ассемблера, который предназначен специально для написания программ для микроконтроллеров семейства х51. Написанная программа транслируется с помощью ассемблера asm51, в результате чего будут получены .hex файл для загрузки в память программ и листинговый файл с кодами команд и адресами расположения этих кодов. Файл листинга формируется ассемблером в процессе трансляции и представляет собой начальный ассемблерный файл, дополненный следующей информацией. Перед каждой командой размещен номер ее строки в ассемблерном тексте, адрес ячейки памяти программ, в которой размещен код операции команды, а после этого адреса — один, два или три байта самой команды. В конце программы находится таблица имен и меток.
Если же в ходе компиляции кода программы инициализации микроконтроллера были обнаружены ошибки, они будут отмечены компилятором в файле листинга. При этом .hex файл не будет сгенерирован до тех пор, пока ошибки не будут устранены. В файле листинга для каждой обнаруженной ошибки компилятор указывает причину ошибки и номер строки, в которой она была обнаружена. На рис. 11 представлен файл листинга, в котором отладчик сообщает об ошибке номер 2 (неопределенный идентификатор), которая обнаружена в восьмой строке кода программы и состоит в том, что в коде программы неверно указано название порта ввода/вывода данных. (В используемом микроконтроллере нет порта с названием Р4.) Отчет о возможных ошибках в программе Multisim отображается и в нижней части рабочего проекта в окне «Блок информации» на вкладках «Результаты» и «Моделирование». Состояние памяти можно просмотреть при помощи команды меню «Микроконтроллеры» → «MCU 8051 U?» → «Просмотр памяти» (рис. 12).
Проанализируем работу демонстрационной схемы, представленной на рис. 7.
На вкладке main.asm при помощи команды MOV были даны указания программе инициализации микроконтроллера записать в порт Р1 значения линий порта Р1.7–Р1.0 (00111111), а в порт Р2 — значения линий порта Р2.7–Р2.0 (00000101). После запуска моделирования при помощи цветных пробников мы можем проверить правильность работы программы. Как видно на рис. 7, на выводах портов микроконтроллера Р1 и Р2 действительно находится та комбинация, которую мы указали в коде программы.
При написании кода программы для микроконтроллера х51 необходимо владеть синтаксисом языка программирования asm51. Система команд микроконтроллеров х51 насчитывает 111 базовых команд, которые разделены по функциональному признаку на пять групп: команды передачи данных, арифметических операций, логических операций, передачи управления и операций с битами. Наиболее часто используемые команды asm51 представлены в таблице.
Название команды |
Мнемокод |
Пересылка в аккумулятор из регистра |
MOV A, R |
Пересылка в регистр из аккумулятора |
MOV R, A |
Загрузка константы в регистр |
MOV R, #d |
Обмен аккумулятора с регистром |
XCH A, R |
Сложение аккумулятора с регистром |
ADD A, R |
Сложение аккумулятора с константой |
ADD A, #d |
Инкремент аккумулятора |
INC A |
Инкремент регистра |
INC R |
Декремент аккумулятора |
DEC A |
Декремент регистра |
DEC R |
Логическое И аккумулятора и регистра |
ANL A, R |
Логическое ИЛИ аккумулятора и регистра |
ORL A, R |
Сброс аккумулятора |
CLR A |
Инверсия аккумулятора |
CPL A |
Переход, если аккумулятор равен нулю |
JZ mt |
Переход, если аккумулятор не равен нулю |
JNZ mt |
Пустая операция, которая может быть |
NOP |
Выход из подпрограммы |
RET |
Далее представим описание наиболее распространенных ошибок трансляции ассемблерного кода в программной среде Multisim:
- Ошибка #1. Illegal character (недопустимый символ) — эта ошибка возникает в том случае, когда ассемблер встречает символ, который не описан в синтаксисе компилятора.
- Ошибка #2. Undefined symbol (неопределенный идентификатор) — ошибка возникает в том случае, когда пользователь в коде программы использует идентификатор, который не был определен ассемблером. Наиболее частая причина этой ошибки — опечатка пользователя.
- Ошибка #3. Duplicate symbol (повторяющийся идентификатор) — эта ошибка возникает при попытке определить заново уже ранее определенный или зарезервированный идентификатор.
- Ошибка #5. Number too large (слишком большое число) — заданное число или значение результата работы программы превышает допустимую величину.
- Ошибка #6. Missing END directive (отсутствует директива END) — эта директива является обязательной и должна быть указана в конце кода программы.
- Ошибка #12. Unbalanced parentheses (незакрытые скобки).
- Ошибка #16. Division by zero (деление на ноль).
- Ошибка #38. Unable to open file (не удается открыть файл) — ошибка может возникнуть в том случае, если в программном коде указано название несуществующего файла.
- Ошибка #41. Insufficient memory (недостаточно памяти).
- Ошибка #43. ENDIF without IF (ENDIF без IF) — в цикле отсутствует парный оператор IF.
- Ошибка #44. Missing ENDIF (отсутствует ENDIF) — в цикле отсутствует парный оператор ENDIF.
- Ошибка #50. Line exceeds 255 characters (строка превышает 255 символов) — слишком длинная строка. Лишние символы будут игнорироваться.
- NI Circuit Design Suite — Getting Started with NI Circuit Design Suite. National Instruments. Jan., 2012.
- Технология виртуальных приборов. National Instruments, 2013.
- NI Multisim — Fundamentals. National Instru-ments. Jan., 2012.
- Professional edition release notes NI. Circuit Design Suite Version 12.0.1. National Instruments, 2012.
- Пашкевич А. П., Чумаков О. А. Микропроцессорные системы управления. Ч. 2. Минск: БГУИР, 2006.
- 8051 cross assembler user’s manual. MetaLink Corporation Chandler. Arizona, USA. Jan. 27, 1996.