- •1. Техническое описание лабораторного комплекса
- •1.1. Назначение комплекса
- •1.2. Состав комплекса
- •1.3. Технические данные комплекса
- •1.4. Структура комплекса и общие принципы работы
- •1.5 Общие принципы работы с комплексом
- •1.5.2 Ассемблер микроконтроллеров avr и его особенности
- •1.5.2.2 Система команд
- •1.5.2.3 Директивы ассемблера
- •Cseg - Code segment
- •Dseg - Data Segment
- •Eseg - eeprom Segment
- •Org - Установить адрес начала программы
- •Db - определить байт(ы) в программной памяти или в eeprom
- •Dw – Определить слово(а) в программной памяти или в eeprom
- •Def – Присвоить имя регистру
- •Equ – Присвоить имя выражению
- •Include –вставить другой файл
- •1.5.3.1 Написание программы
- •1.7 Сбои в лабораторном комплексе и их устранение
1.5.2.2 Система команд
Система команд микроконтроллеров ATMEL семейства AVR очень большая и в то же время эффективная. Одной из отличительных особенностей микроконтроллеров AVR является то, что почти все команды выполняются за 1 тактовый цикл. Исключение составляют команды перехода. Это существенно увеличивает производительность микроконтроллера даже при относительно невысокой тактовой частоте.
Все команды можно классифицировать на 5 типов:
1. арифметические команды;
2. логические команды;
3. команды перехода;
команды передачи данных;
побитовые команды и команды тестирования битов.
Система команд приведена в главе 3.
1.5.2.3 Директивы ассемблера
Ассемблер поддерживает множество директив. Директивы не транслируются непосредственно в коды операции. Напротив, они используются, чтобы корректировать местоположение программы в памяти, определять макрокоманды, инициализировать память и так далее. То есть это указания самому ассемблеру, а не команды микроконтроллера.
Все директивы ассемблера приведены в табл. 1.2.
Таблица 1.2.
Директивы ассемблера
Директива |
Описание |
BYTE |
Зарезервировать байт под переменную |
CSEG |
Сегмент кодов |
DB |
Задать постоянным(и) байт(ы) в памяти |
DEF |
Задать символическое имя регистру |
DEVICE |
Задать для какого типа микроконтроллера компилировать |
DSEG |
Сегмент данных |
DW |
Задать постоянное(ые) слово(а) в памяти |
EQU |
Установите символ равный выражению |
ESEG |
Сегмент EEPROM |
EXIT |
Выход из файла |
INCLUDE |
Включить исходный код из другого файла |
LIST |
Включить генерацию .lst - файла |
NOLIST |
Выключить генерацию .lst - файла |
ORG |
Начальный адрес программы |
SET |
Установите символ равный выражению |
Синтаксис всех директив следующий:
.[директива]
То есть перед директивой должна стоять точка. Иначе ассемблер воспринимает это как метку.
Дадим несколько пояснений наиболее важным директивам ассемблера
Cseg - Code segment
Директива CSEG указывает на начало сегмента кодов. Ассемблируемый файл может иметь несколько кодовых сегментов, которые будут объединены в один при ассемблировании.
Синтаксис: .CSEG
Пример: .DSEG ; Начало сегмента данных vartab: .BYTE 4 ; Резервируется 4 байта в СОЗУ
.CSEG ; Начало сегмента кодов const: .DW 2 ; Записать 0x0002 в программной памяти mov r1,r0 ; Что-то делать
Dseg - Data Segment
Директива DSEG указывает на начало сегмента данных. Ассемблируемый файл может содержать несколько сегментов данных, которые потом будут собраны в один при ассемблировании. Обычно сегмент данных состоит лишь из директив BYTE и меток.
Синтаксис: .DSEG
Пример: .DSEG ; Начало сегмента данных var1: .BYTE 1 ; Резервировать 1 байт под переменную var1 table: .BYTE tab_size ; Резервировать tab_size байтов.
.CSEG ldi r30,low(var1) ldi r31,high(var1) ld r1,Z