Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка AVR 1. Аппаратные и программные средс...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
6.23 Mб
Скачать

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 – нет.