- •«Инструментальные средства разработки аппаратно-программных систем»
- •Оглавление
- •7 Инструментальные средства разработки систем управления на
- •Введение. Управляющие системы на микроконтроллерах.
- •Характеристика микроконтроллеров семейства avr
- •1.1 Особенности микроконтроллеров
- •1.2 Характеристики микроконтроллера aTмega16
- •1.3 Условное графическое обозначение микроконтроллера
- •2 Архитектура микроконтроллера
- •2.1 Структура микроконтроллера
- •2.2 Организация программной памяти
- •Организация памяти данных
- •2.4 Арифметико-логическое устройство и регистр состояния процессора
- •Методы адресации. Форматы команд
- •Система команд
- •2.6.1 Команды передачи данных (пересылки)
- •2.6.2 Команды передачи управления
- •2.6.3 Команды арифметики и логики (вычислительные)
- •2.6.4 Команды сдвигов и операций с битами
- •2.7 Функционирование конвейера
- •3 Встроенные устройства
- •3. 1 Параллельные порты ввода/вывода
- •Подсистема прерываний микроконтроллера
- •Регистр флагов прерываний таймеров/счетчиков – tifr
- •Таймеры/счетчики
- •Общие сведения
- •Таймер/счетчик т0.
- •3.3.3 Таймер/счетчик т1.
- •Сторожевой таймер (Watchdog Timer).
- •3.4 Последовательные интерфейсы -spi и uart
- •3.4.1 Последовательный периферийный интерфейс - spi
- •3.4.2 Uart - универсальный последовательный порт
- •3.5 Аналоговый компаратор и ацп
- •3.5.1 Аналоговый компаратор
- •3.5.2 Аналого-цифровой преобразователь
- •3.6 Энергонезависимая память данных
- •4 Ассемблер микроконтроллеров avr
- •5 Взаимодействие микроконтроллера с объектом управления
- •5.1 Формирование временных интервалов (задержек)
- •5.1.1 Программный способ формирования временных интервалов
- •Ext_l: ldi r17, X ;х – число внутренних циклов
- •Ext_l: ldi r17, 53 ;Загрузка в r17 константы внутреннего цикла
- •5.2 Генерация импульсных сигналов управления с использованием программных задержек
- •5.2.1 Генерация последовательности импульсов с использованием программных задержек
- •5.2.2 Генерация пакета импульсов
- •5.2.3 Генератор заданного числа пакетов импульсов
- •Формирование импульсных сигналов управления с использованием таймеров микроконтроллера
- •5.4 Ожидание внешних событий
- •5.5 Обработка динамического дисплея
- •5.6 Особенности схемы дисплея в учебной системе управления.
- •5.7 Часы
- •5.8 Измерение временных параметров импульсов
- •5.9 Обработка клавиатуры
- •6 Программирование микроконтроллеров aТmega16
- •7 Инструментальные средства разработки сисТем управления на микроконтроллерах aTmega16
- •Дубров ф.И. Встроенные системы управления на микроконтроллере aTmega16
Система команд
Все команды микроконтроллера сгруппированы в четыре группы:
команды передачи данных (таблица 4);
команды передачи управления (таблица 5);
арифметические и логические команды (таблица 6);
команды сдвигов и битовые (таблица 7).
В колонках “Описание” сокращенно приведено описание операции, выполняемой по команде или названии команды. В колонках “Операция” приведено условное обозначение выполняемой операции. В колонках “Циклов” приведены значения времени выполнения команды в машинных циклах (периодах тактовой частоты микроконтроллера). В колонках “Флаги” указаны биты регистра состояния SREG, которые могут изменяться при выполнении операции.
Обозначения в таблицах:
- символ пересылки;
Символ ( … ) обозначает ячейку памяти, а значение в скобках адрес ячейки или регистр, в котором размещен адрес ее;
Rd – номер регистра приемника 0-31;
Rr – номер регистра источника0-31;
D8 – 8-разрядный операнд 0-255;
q – значение смещения (0 q 63) в командах пересылок;
I/O – адрес регистра ввода-вывода(0 I/O 63);
X,Y,Z – 16-разрядные регистры;
Adr – значение адреса c указанной разрядностью;
rel – значение смещения (-64 rel +63) в командах передачи управления;
s – номер бита в регистре статуса процессора SREG;
b – номер бита в регистре РОН или ввода-вывода.
2.6.1 Команды передачи данных (пересылки)
Команды передачи данных приведены в таблице 4. Из нее видно, что набор этих команд представляет собой сочетание восьми операций с различными методами адресации.
Таблица 4. Команды передачи данных
Мнемоника |
Операнды |
Описание |
Операция |
Циклов |
MOV |
Rd,Rr |
Пересылка регистр-регистр |
Rd Rr |
1 |
MOVW |
Rd,Rr |
Пересылка двух регистров |
Rd+1:RdRr+1:Rr |
1 |
LDI |
Rd,D8
|
Загрузить операнд D8 в регистр R16≤Rd≤R31 |
Rd D8 |
1 |
LDS |
Rd,Adr16 |
Загрузить регистр из ячейки ОЗУ прямо |
Rd (Adr16) |
3 |
LD |
Rd,X |
Загрузить регистр косвенно |
Rd (X) |
2 |
LD |
Rd,X+ |
Загрузить регистр косвенно с постинкрементом |
Rd (X), X+1 |
2 |
LD |
Rd,-X |
Загрузить регистр косвенно с преддекрементом |
X-1,Rd(X) |
2 |
LD |
Rd,Y |
Загрузить регистр косвенно |
Rd (Y) |
2 |
LD |
Rd,Y+ |
Загрузить регистр косвенно с постинкрементом |
Rd (Y), Y+1 |
2 |
LD |
Rd,-Y |
Загрузить регистр косвенно с преддекрементом |
Y-1,Rd (Y) |
2 |
LDD |
Rd,Y+q |
Загрузить регистр косвенно со смещением |
Rd (Y+q) |
2 |
LD |
Rd,Z |
Загрузить регистр косвенно |
Rd (Z) |
2 |
LD |
Rd,Z+ |
Загрузит регистр косвенно с постинкрементом |
Rd (Z), Z+1 |
2 |
LD |
Rd,-Z |
Загрузить регистр косвенно с преддекрементом |
ZZ-1,Rd (Z) |
2 |
LDD |
Rd,Z+q |
Загрузить регистр косвенно со смещением |
Rd (Z+q) |
2 |
STS |
Adr16,Rr |
Записать из регистра прямо в ОЗУ |
(Adr16) Rr |
3 |
ST |
X,Rr |
Записать из регистра косвенно |
(X) Rr |
2 |
ST |
X+,Rr |
Записать косвенно из регистра с постинкрементом |
(X) Rr, X+1 |
2 |
ST |
-X,Rr |
Записать из регистра косвенно с преддекрементом |
XX-1,(X) Rr |
2 |
ST |
Y,Rr |
Записать косвенно |
(Y) Rr |
2 |
ST |
Y+,Rr |
Записать косвенно с постинкрементом |
(Y) Rr, Y+1 |
2 |
ST |
-Y,Rr |
Записать косвенно с преддекрементом |
Y-1,(Y) Rr |
2 |
ST |
Z,Rr |
Записать косвенно |
(Z) Rr |
2 |
STD |
Y+q,Rr |
Записать косвенно со смещением |
(Y+q) Rr |
2 |
ST |
Z+,Rr |
Записать косвенно с постинкрементом |
(Z) Rr, Z+1 |
2 |
ST |
-Z,Rr |
Записать косвенно с преддекрементом |
Z-1,(Z) Rr |
2 |
STD |
Z+q,Rr |
Записать косвенно со смещением |
(Z+q) Rr |
2 |
LPM |
|
Загрузить байт из памяти программ в R0 |
R0(Z) |
3 |
LPM |
Rd,Z |
Загрузить байт из памяти программ в регистр РОН |
Rd(Z) |
3 |
LPM |
Rd,Z+ |
Загрузить байт из памяти программ с постинкрементом |
Rd(Z), Z+1 |
3 |
SPM |
|
Записать слово из R1:R0 в программную память |
(Z)R1:R0 |
- |
IN |
Rd,I/O |
Загрузить данные из регистра I/O в регистр РОН |
Rd I/O |
1 |
OUT |
I/O,Rr |
Записать данные из регистра РОН в регистр I/O |
I/ORr |
1 |
PUSH |
Rr |
Сохранить регистр в стеке |
(SР)Rr, SP-1 |
2 |
POP |
Rd |
Выгрузить регистр из стека |
SP+1, Rd (SР) |
2 |
Команда MOV копирует содержимое одного регистра общего назначения в другой.
Команда LDI загружает содержимое регистра общего назначения непосредственно константой. В этой команде может использоваться один из регистров R16 – R31. Команды LD выполняют загрузку регистра РОН из ячейки ОЗУ, адрес которой в одном из регистров X, Y или Z, а также варианты с постинкрементом и преддекрементом адреса. Команда LDD выполняет эту же операцию при помощи косвенной адресации со смещением q. Адрес ячейки ОЗУ получается добавлением значения смещения к содержимому регистра Y или Z. Значение смещения q может быть в пределах 0 – 63. Команда LDS загружает в регистр общего назначения содержимое прямо адресуемой ячейки памяти данных.
Команда ST выполняют обратную операцию относительно команды LD - заносит в косвенно адресуемую ячейку памяти данных содержимое регистра общего назначения, используя также варианты с постинкрементом и преддекрементом адреса. Команда STD выполняет эту же операцию при помощи косвенной адресации со смещением, а команда STS прямо адресует ячейку ОЗУ.
Команда IN заносит содержимое регистра ввода-вывода в регистр общего назначения, а команда OUT выполняет обратную операцию.
Команда PUSH сохраняет содержимое регистра РОН в стеке, а команда POP выполняет обратную операцию. При выполнении этих команд изменяется значение указателя стека SP в соответствии с обозначениями в колонке “Операция”.
Команда LPM выполняет чтение из ячейки памяти программ, организованной как 16-битное слово, адрес которой в регистре Z, в регистр R0. Младший бит регистра Z определяет байт слова: 0- младший байт слова, 1- старший. Старшие 15 разрядов команды определяют адрес ячейки программной памяти в формате слова.
Имеются модификации этой команды, в которых может использоваться любой регистр РОН LPM Rd,Z и загрузка с последующим увеличением Z на единицу LPM Rd,Z+ .
По команде SPM слово из регистров R1 и R0 загружается в ячейку FLASH-памяти программ (так называемый режим самопрограммирования).
Команды пересылки данных состояния флагов регистра SREG не изменяют.