
- •Аппаратные и программные средства лабораторного стенда на основе микроконтроллера aTmega8535
- •1. Цель работы
- •2. Описание лабораторнОго стенда
- •2.1. Микроконтроллер aTmega8535 семейства avr
- •2.2. Система команд микроконтроллера
- •2.3. Способы адресации данных микроконтроллера
- •2.4. Ассемблер микроконтроллеров avr
- •2.5. Программа avr Studio 4
- •2.6. Компиляция и отладка программы
- •2.7. Модуль «Микроконтроллер» лабораторного стенда
- •2.8. Включение лабораторного стенда
- •3. Подготовка к лабораторной работе
- •4. Рабочее задание
- •5. Отчет по лабораторной работе
- •6. Рекомендации по подготовке и выполнению лабораторной работы
2.4. Ассемблер микроконтроллеров avr
Ассемблер – это инструмент, с помощью которого создаётся программа для микроконтроллера. Ассемблер транслирует ассемблируемый исходный код программы в объектный код, который может использоваться в симуляторах или эмуляторах AVR. Также ассемблер генерирует код, который может быть непосредственно введен в программную память микроконтроллера.
Исходный файл, с которым работает ассемблер, должен содержать команды, директивы и метки.
Директивы Ассемблера. При написании программ на языке Ассемблер используются директивы, которые указывают компилятору положение программы в памяти, определяют макросы, инициализируют память и др. Список директив и их описание приведен в табл. 2.1. Запись всех директив начинается с точки. Кратко перечислим выполняемые директивами функции в каждом из сегментов.
Сегмент кода программы открывается директивой .CSEG. Если программа начинается с этого сегмента, директива может отсутствовать. В сегменте программы с помощью директивы .ORG можно указать адрес начало сегмента.
Таблица 2.1. Директивы ассемблера
Директива |
Описание |
.BYTE |
Зарезервировать байт под переменную |
.CSEG |
Сегмент кодов |
.DB |
Задать постоянным(и) значением(и) байт(ы) в памяти |
.DEF |
Задать символическое имя регистру |
.DEVICE |
Задать типа микроконтроллера |
.DSEG |
Сегмент данных |
.DW |
Задать постоянное(ые) слово(а) в памяти |
.ENDM |
Конец макроса |
.EQU |
Установить постоянное выражение |
.ESEG |
Сегмент EEPROM |
.EXIT |
Выход из файла |
.INCLUDE |
Включить код из другого файла |
.LIST |
Включить генерацию *.lst - файла |
.LISTMAC |
Включить разворачивание макросов |
.MACRO |
Начало макроса |
.NOLIST |
Выключить генерацию *.lst |
.ORG |
Начальный адрес сегмента программы или данных |
.SET |
Установить переменной значение выражения |
Директива .DB в сегменте определяет один байт или группу байтов, констант, записываемых во Flash-память.
Директива .DW определяет слово или группу слов, записываемых в память в качестве констант. Начало записи констант определяется меткой, стоящей перед соответствующей директивой. Перечисляемые константы разделяются запятыми.
Директива .DEF присваивает регистру символическое имя.
Директивы .EQU, .SET присваивают значение имени. Имя, которому присвоено значение директивой .EQU, не может быть переназначено, и значение не может быть изменено. Значение имени, присвоенное директивой .SET, может быть изменено другой директивой .SET.
Директива .DEVICE определяет тип микроконтроллера, который будет использован для выполнения программы. Наличие этой директивы подключает средства контроля инструкций программы по отношению к физическому устройству, предупреждая о невозможности выполнения некоторых команд, превышении размеров используемой памяти и др.
Директива .INCLUDE с именем файла используется для включения в текст программы другого файла. Например, специальные файлы для каждой модели контроллера с расширением inc, которые задают имена регистрам и значениям констант директивой .EQU. Во включаемых файлах можно размещать макросы и отдельные части программы, например подпрограммы.
Директивы .MACRO и .ENDMACRO обрамляют макроопределение. Макроопределение может иметь до 10 параметров с фиксированными именами @0,...,@9. При вызове макроопределения параметры задают в виде списка в порядке нумерации.
Сегмент данных ОЗУ начинается директивой .DSEG. В сегменте могут быть использованы директивы .ORG и .BYTE. Директива .BYTE определяет количество байтов, к которым будет производиться обращение при выполнении программы. Резервируемая область начинается по адресу, определяемому меткой перед директивой.
Сегмент данных в энергонезависимой памяти типа EEPROM начинается директивой .ESEG. В сегменте могут быть использованы директивы .ORG, .DB, .DW. Директива .DB в сегменте определяет один или группу байтов, записываемых в EEPROM. Директива .DW определяет слово или группу слов, записываемых в память EEPROM парами по 2 байта. Начало записи байтов и слов определяется меткой, стоящей перед соответствующей директивой.
Директивы .LIST, .NOLIST, .LISTMAC используют для управления созданием листинга. Текст программы расположенный после директивы .LIST включается в файл *.lst, а после директивы .NOLIST – нет.