
- •Введение
- •1. Микроконтроллеры at90s4434/8535 семейства avr
- •1.1. Структура микроконтроллеров avr
- •1.2. Представление данных в языке ассемблера
- •1.2.1. Двоичная система счисления
- •1.2.2. Биты, байты и слова
- •1.2.3. Шестнадцатеричная система счисления
- •1.3. Адресное пространство микроконтроллеров avr
- •2. Лабораторный комплекс
- •2.1. Назначение и состав комплекса
- •2.2. Блок управления
- •3. Директивы ассемблера
- •3.1. Директивы организации сегментов
- •3.2. Директивы счетчика текущего адреса
- •3.3. Директивы определения данных
- •3.4. Директивы присваивания
- •3.5. Директивы задания набора допустимых команд
- •3.6. Директивы управления файлами
- •3.7. Директивы управления листингом
- •4. Система команд микроконтроллеров семейства avr
- •4.1. Команды пересылки данных
- •4.2. Арифметические команды
- •4.3. Логические команды
- •4.4. Команды перехода
- •5. Программа на ассемблере
- •5.1. Структура программы
- •5.2. Алгоритм решения задачи и структура данных
- •5.3. Пример алгоритма программы
- •5.4. Пример текста программы
- •6. Набор и отладка программ
- •6.1. Набор программы
- •6.2. Отладка программы
- •6.3. Запись программы в микроконтроллер
- •7. Меры безопасности при эксплуатации комплекса
- •8. Общие методические указания к лабораторным работам
- •Порядок выполнения лабораторных работ:
- •Содержание отчета по лабораторной работе:
- •9. Лабораторная работа № 1. Изучение системы команд микроконтроллера и директив ассемблера
- •9.2. Пояснения к работе
- •9.3. Варианты индивидуальных заданий
- •10. Лабораторная работа № 2. Система параллельного ввода/вывода
- •10.1. Цель работы
- •10.2. Пояснения к работе
- •Для вызова подпрограммы используется команда rcall pprmet, где pprmet – это метка и название подпрограммы.
- •10.3. Варианты индивидуальных заданий
- •11. Лабораторная работа № 3. Динамическая индикация
- •11.1. Цель работы Освоить организацию динамической индикации, используемой в программах. Экспериментально определить влияние длительности задержек на качество индикации.
- •11.2. Пояснения к работе
- •Работа продолжает изучение 8-разрядных двунаправленных портов программируемого микроконтроллера ат90s8535 для ввода и вывода дискретной информации, при этом используется динамическая индикация.
- •Если нет необходимости в длительной задержке, количество ступеней в подпрограмме можно уменьшить.
- •11.3. Варианты индивидуальных заданий
- •12. Лабораторная работа № 4. Система внешних прерываний микроконтроллера
- •12.1. Цель работы
- •12.2. Пояснения к работе
- •12.3. Варианты индивидуальных заданий
- •13. Лабораторная работа № 5. Программирование таймеров/счетчиков
- •13.1. Цель работы
- •13.2. Пояснения к работе
- •13.3.1. Работа в режиме счетчика
- •13.3.2. Работа в режиме таймера
- •13.3.3. Работа в режиме широтно-импульсного модулятора
- •13.3. Варианты индивидуальных заданий
- •Библиографический список
- •Алгоритм
- •Текст программы
- •Выводы по работе:
- •Содержание
- •Ломакин Игорь Владимирович
3. Директивы ассемблера
Синтаксис всех директив следующий:
директива [выражение]
То есть перед директивой должна стоять точка. Иначе ассемблер воспринимает это как метку.
3.1. Директивы организации сегментов
.DSEG
Директива DSEG указывает на начало сегмента данных (Data Segment). Директива показывает, что следующие за ней данные в виде меток, имен переменных или констант должны быть расположены в ОЗУ (регистровом файле, файле I/O, SRAM). Обычно сегмент данных состоит лишь из директив BYTE и меток. Директива ORG может использоваться для размещения переменных в нужной области ОЗУ.
Программа может содержать несколько сегментов данных, которые потом будут собраны в один при ассемблировании
.ESEG
Директива ESEG указывает на начало сегмента EEPROM (EEPROM Segment). Директива показывает, что следующие за ней данные в виде меток или имен констант должны быть расположены в EEPROM (ЭСППЗУ) Обычно сегмент EEPROM состоит из DB и DW директив и меток. Сегмент EEPROM памяти имеет свой собственный счетчик. Директива ORG может использоваться для размещения переменных в нужной области EEPROM.
Программа может содержать несколько EEPROM сегментов, которые будут собраны в один сегмент при ассемблировании.
.CSEG
Директива CSEG указывает на начало сегмента кодов (Code segmen). Директива показывает, что следующие за ней данные в виде машинных команд, меток или имен констант должны быть расположены в Flash-памяти программ. Директива ORG может использоваться для размещения команд и констант в нужной области памяти программ.
Программа может иметь несколько кодовых сегментов, которые будут объединены в один при ассемблировании.
3.2. Директивы счетчика текущего адреса
.ORG адрес
Директива ORG присваивает значения локальным счетчикам. Используется только совместно с директивами .CSEG, .DSEG, .ESEG.
В одном сегменте может использоваться несколько раз.
3.3. Директивы определения данных
label: .DB список выражений
Директива DB резервирует ресурсы памяти и определяет значения байта(ов) в программной памяти или в EEPROM. Директиве должна предшествовать метка label или директива ORG.
DB задает список выражений, и должна содержать по крайней мере одно выражение. Размещать директиву следует в сегменте кодов или в EEPROM сегменте.
Список выражений представляет собой последовательность выражений, разделенных запятыми. Каждое выражение должно быть величиной между – 128 и 255.
Если директива указывается в сегменте кодов и список выражений содержит более двух величин, то выражения будут записаны так, что 2 байта будут размещаться в каждом слове Flash-памяти.
label: .DW список выражений
Директива DW резервирует ресурсы памяти и определяет значения слов в программной памяти или в EEPROM. Директиве должна предшествовать метка или директива ORG.
DW задает список выражений и должна содержать по крайней мере одно выражение. Размещать директиву следует в сегменте кодов или в EEPROM сегменте.
Список выражений представляет собой последовательность выражений, разделенных запятыми. Каждое выражение должно быть величиной между 32768 и 65535.
label_var: .BYTE m
Директива BYTE резервирует m байт под переменную label_var в области ОЗУ. Размещать директиву следует в сегменте данных.