- •Исследование узлов комплексных систем управления
- •Часть 4
- •Интегрированная среда разработки avr Studio
- •2. Порядок выполнения работы Контрольные вопросы по допуску к работе
- •2.1. Предварительное задание
- •2.2. Рабочее задание
- •3. Итоговые вопросы
- •Описание платы управления, используемой в лабораторной работе
- •Описание системы отладки
- •2. Порядок выполнения работы Контрольные вопросы по допуску к работе
- •Предварительное задание
- •Рабочее задание
- •Приложение 1 Система команд микроконтроллера aTmega
- •Группа команд логических операций
- •Группа команд арифметических операций
- •Группа команд операций с битами
- •Группа команд пересылки данных
- •Группа команд передачи управления
- •Dseg - Сегмент данных
- •Endmacro - Конец макроса
- •Exit - Выйти из файла
- •Include - Вложить другой файл
- •List - Включить генерацию листинга
- •Macro - Начало макроса
- •Nolist - Выключить генерацию листинга
- •Приложение 3 Приведение вкладки в состояние Docking
- •Приложение 4 Названия и номера регистров и портов avr Classic и Mega
- •Регистры управления
- •Библиографический список
- •Содержание
- •Часть 4
- •394026 Воронеж, Московский просп., 14
Группа команд передачи управления
Мнемоника |
Описание |
Операция |
Циклы |
Флаги |
RJMP k |
Относительный безусловный переход |
PC = PC + k + 1 |
2 |
— |
IJMP |
Косвенный безусловный переход |
PC = Z |
2 |
— |
JMP k |
Абсолютный переход |
PC = k |
3 |
— |
RCALL k |
Относительный вызов подпрограммы |
PC = PC + k + 1 |
3 |
— |
ICALL |
Косвенный вызов подпрограммы |
PC = Z |
3 |
— |
CALL k |
Абсолютный вызов подпрограммы |
PC = k |
4 |
— |
RET |
Возврат из подпрограммы |
PC = STACK |
4 |
— |
RETI |
Возврат из подпрограммы обработки прерывания |
PC = STACK |
4 |
I |
CP Rd,Rr |
Сравнение РОН |
Rd – Rr |
1 |
Z, N, V, C, H |
CPC Rd,Rr |
Сравнение РОН с учетом переноса |
Rd – Rr – C |
1 |
Z, N, V, C, H |
CPI Rd,K |
Сравнение РОН с константой |
Rd – K |
1 |
Z, N, V, C, H |
Продолжение табл. П1.5
Мнемоника |
Описание |
Операция |
Циклы |
Флаги |
CPSE Rd,Rr |
Сравнение и пропуск следующей команды при равенстве |
Если Rd = Rr, то PC = PC + 2 (3) |
1/2/3 |
— |
SBRC Rr,b |
Пропуск след. команды, если разряд РОН сброшен |
Если Rr.b = 0, то PC = PC + 2 (3) |
1/2/3 |
— |
SBRS Rr,b |
Пропуск след. команды, если разряд РОН установлен |
Если Rr.b = 1, то PC = PC + 2 (3) |
1/2/3 |
— |
SBIC A,b |
Пропуск след. команды, если разряд РВВ сброшен |
Если A.b = 0, то PC = PC + 2 (3) |
1/2/3 |
— |
SBIS A,b |
Пропуск след. команды, если разряд РВВ установлен |
Если A.b = 1, то PC = PC + 2 (3) |
1/2/3 |
— |
BRBC s,k3 |
Переход, если флаг s регистра SREG сброшен |
Если SREG.s = 0, то PC = PC + k + 1 |
1/2 |
— |
BRBS s,k |
Переход, если флаг s регистра SREG установлен |
Если SREG.s = 1, то PC = PC + k + 1 |
1/2 |
— |
BRCS k |
Переход по переносу |
Если C = 1, то PC = PC + k + 1 |
1/2 |
— |
Продолжение табл. П1.5
Мнемоника |
Описание |
Операция |
Циклы |
Флаги |
|
BRCC k |
Переход, если нет переноса |
Если C = 0, то PC = PC + k + 1 |
1/2 |
— |
|
BREQ k |
Переход по «равно» |
Если Z = 1, то PC = PC + k + 1 |
1/2 |
— |
|
BRNE k |
Переход по «не равно» |
Если Z = 0, то PC = PC + k + 1 |
1/2 |
— |
|
BRSH k |
Переход по «выше или равно» |
Если C = 0, то PC = PC + k + 1 |
1/2 |
— |
|
BRLO k |
Переход по «меньше» |
Если C = 1, то PC = PC + k + 1 |
1/2 |
— |
|
BRMI |
Переход по «отрицательное значение» |
Если N = 1, то PC = PC + k + 1 |
1/2 |
— |
|
BRPL |
Переход по «положительное значение» |
Если N = 0, то PC = PC + k + 1 |
1/2 |
— |
|
BRGE |
Переход по «больше или равно» (числа со знаком) |
Если (N V) = 0, то PC = PC + k + 1 |
1/2 |
— |
|
BRLT |
Переход по «меньше нуля» (числа со знаком) |
Если (N V) = 1, то PC = PC + k + 1 |
1/2 |
— |
|
BRHS |
Переход по половинному переносу |
Если H = 1, то PC = PC + k + 1 |
1/2 |
— |
Окончание табл. П1.5
Мнемоника |
Описание |
Операция |
Циклы |
Флаги |
|
BRHC |
Переход, если нет половинного переноса |
Если H = 0, то PC = PC + k + 1 |
1/2 |
— |
|
BRTS |
Переход, если флаг T установлен |
Если T = 1, то PC = PC + k + 1 |
1/2 |
— |
|
BRTC |
Переход, если флаг T сброшен |
Если T = 0, то PC = PC + k + 1 |
1/2 |
— |
|
BRVS |
Переход по переполнению доп. кода |
Если V = 1, то PC = PC + k + 1 |
1/2 |
— |
|
BRVC |
Переход, если нет переполнения доп. кода |
Если V = 0, то PC = PC + k + 1 |
1/2 |
— |
|
BRID |
Переход, если прерывания запрещены |
Если I = 0, то PC = PC + k + 1 |
1/2 |
— |
|
BRIE |
Переход, если прерывания разрешены |
Если I = 1, то PC = PC + k + 1 |
1/2 |
— |
Таблица П1.6
Группа команд управления системой
Мнемоника |
Описание |
Операция |
Циклы |
Флаги |
NOP |
Нет операции |
— |
1 |
— |
SLEEP |
Переход в «спящий» режим |
— |
3 |
— |
WDR |
Сброс сторожевого таймера |
— |
1 |
— |
ПРИЛОЖЕНИЕ 2
Директивы ассемблера, используемые в данной работе
Компилятор поддерживает ряд директив. Все директивы предваряются точкой. Директивы не транслируются непосредственно в код – они используются для указания положения в программной памяти, определения макросов, инициализации памяти и т.д.
CSEG - Программный сегмент
Директива CSEG определяет начало программного сегмента. Исходный файл может состоять из нескольких программных сегментов, которые объединяются в один программный сегмент при компиляции. Программный сегмент является сегментом по умолчанию. Программные сегменты имеют свои собственные счётчики положения, которые считают не побайтно, а пословно. Для размещения кода и констант в необходимом месте сегмента может быть использована директива ORG. Директива CSEG не имеет параметров.
Синтаксис: .CSEG
Пример: .DSEG ; Начало сегмента данных vartab: .BYTE 4 ; Резервирует 4 байта в ОЗУ
.CSEG ; Начало кодового сегмента const: .DW 2 ; Разместить константу 0x0002 ; в памяти программ mov r1,r0 ; Выполнить действия
DEF - Назначить регистру символическое имя
Директива DEF позволяет ссылаться на регистр через некоторое символическое имя. Назначенное имя может использоваться во всей нижеследующей части программы для обращений к данному регистру. Регистр может иметь несколько различных имен. Символическое имя может быть переназначено позднее в программе.
Синтаксис: .DEF Символическое_имя = Регистр
Пример: .DEF temp=R16 .DEF ior=R0
.CSEG ldi temp,0xf0 ; Загрузить 0xf0 в регистр temp (R16) in ior,0x3f ; Прочитать SREG в регистр ior (R0) eor temp,ior ; Регистры temp и ior складываются по . ; исключающему ИЛИ