- •Введение
- •1. Омэвм avr семейства Mega
- •1.1. Технические характеристики микроконтроллера avr aTmega8515
- •1.2 Условное графическое обозначение (уго) микроконтроллера avr aTmega8515
- •1.3. Структура микроконтроллера аTmega8515
- •1.4. Организация памяти
- •1.4.1. Карта памяти
- •1.4.2. Память программ (Flash – пзу)
- •1.4.3. Память данных
- •Регистровая память (рон и рвв)
- •Файл регистров общего назначения
- •Регистр X, регистр y и регистр z
- •Регистр статуса – sreg
- •1.4.4. Оперативная память (озу или ram)
- •Регистр управления mcu - mcu Control Register - mcucr
- •1.4.5. Энергонезависимая память данных (eeprom)
- •1.5. Режимы адресации памяти данных
- •1.7. Стек. Указатель стека - Stack Pointer - sp
- •1.8. Тактирование. Режимы пониженного энергопотребления
- •1.8.1. Тактовый генератор
- •Система реального времени (rtc)
- •1.8.2. Сброс. Источники сброса
- •Сброс по включению питания
- •Внешнее управление сбросом
- •Сброс по сторожевому таймеру
- •1.8.3. Режимы энергосбережения (Sleep Modes)
- •1.9. Прерывания (interrupts)
- •Время отклика на прерывание
- •Обработка прерываний и сброса
- •Регистр флагов прерываний – gifr (General Interrupt Flag Register)
- •Регистр управления внешними прерываниями – gicr
- •Регистр масок прерывания по таймерам/счетчикам - timsk (Timer/Counter Interrupt Mask Register)
- •Регистр флагов прерываний по таймерам/счетчикам tifr
- •1.10. Таймеры/счетчики (timer/counters)
- •1.10.1. Таймер/счетчик t/c0
- •Регистр управления т/с0 - tccr0 (The Timer/Counter0 Control Register) Регистр tccr0 предназначен для управления модулем т/c0. Формат регистра tccr0:
- •Регистр сравнения выхода т/с0
- •Режимы работы т/с0
- •Изменение состояния ос0 определяется разрядами сом01:сом00 регистра tccr0 (состояние вывода ос0 изменяется в соответствии с таблицей 11).
- •1.10.2. Таймер/счетчик 1 – t/c1
- •1.11. Сторожевой таймер (Watchdog Timer)
- •Регистр управления сторожевым таймером – wdtcr
- •1.12. Универсальный синхронно-асинхронный приемопередатчик (usart)
- •Регистр данных usart - udr - (usart I/o Data Register)
- •Регистр ucsra
- •Регистр ucsrв
- •Регистр ucsrс
- •Формат кадра
- •Скорость обмена данными
- •Передача данных
- •Прием данных
- •1.13. Последовательный периферийный интерфейс spi
- •1.14. Аналоговый компаратор (Analog Comparator)
- •2. Система команд
- •Команды логических операций
- •Команды арифметических операций и сдвига
- •Команды операций с битами
- •Команды пересылки данных
- •Команды передачи управления
- •Теоретическая часть
- •1.1. Методические указания по выполнению лабораторной работы
- •1.1.1. Создайте новый проект.
- •1.1.2. Напишите и отладьте программу lab1
- •. Содержание отчета
- •3.2. Практическая работа №1 Изучение системы команд мк avr aTmega8515
- •2. Содержание отчета
- •3.3. Лабораторная работа №2 Изучение работы с портами ввода/вывода мк avr
- •Контрольные вопросы
- •Литература
2. Содержание отчета
Наименование практической работы.
Цель практической работы.
Формулировка задания.
Блок-схема алгоритма.
Программа на языке ассемблер.
Проверка реализуемой задачи (выполнить функции, выставить флаги).
3.3. Лабораторная работа №2 Изучение работы с портами ввода/вывода мк avr
Цель работы: знакомство со структурой и принципами функционирования портов ввода/вывода МК AVR.
Задание 1.
Необходимо для рассмотренной в практической работе задачи написать программу на ассемблере, провести проверку, выставить флаги
Методические рекомендации по выполнению примера.
Создать проект в AVR Studio 4, написать и отладить программу, продемонстрировать преподавателю функционирование МК для данной задачи.
Пример выполнения задания на рис. 34.
Рис. 34. Рабочее окно AVR Studio 4 с результатами проверки задачи
Проверим правильность выставления флагов по выполнению команды сложения (результат на рис. 35) – все арифметические флаги =0, что подтверждает правильность теоретических расчетов в задании 1.
Рис. 35. Рабочее окно AVR Studio 4 с результатами проверки арифметических флагов
Задание 3. Получить у преподавателя задачу для реализации, выполнить задания № 1, 2 в соответствии с указанной методикой.
Ответить на контрольные вопросы.
Контрольные вопросы
Методика выставления арифметических флагов МК.
Методика работы в AVR Studio 4.
Литература
Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL. Евстифеев А.В., 2-е изд., стер. – М.: Издательский дом «Додека – XXI», 2005. – 560с.
ПРИЛОЖЕНИЕ 1
Таблица 25. Система команд МК ATmega8515
Мнемоника |
Операнды |
Описание |
Операция |
Флаги |
Кол-во тактов |
АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ КОМАНДЫ |
|||||
ADD |
Rd, Rr |
Сложение двух регистров общего назначения без учета переноса |
Rd Rd + Rr |
Z,C,N,V,H |
1 |
ADC |
Rd, Rr |
Сложение двух регистров с учетом переноса |
Rd Rd+Rr+C |
Z,C,N,V,H |
1 |
ADIW |
Rdl, K |
Сложение регистровой пары с константой |
Rdh:Rdl Rdh:Rdl+K |
Z,C,N,V,S |
2 |
SUB |
Rd, Rr |
Разность двух регистров без учета переноса |
Rd Rd - Rr |
Z,C,N,V,H |
1 |
SUBI |
Rd*, K |
Разность регистра и константы |
Rd ¬Rd - K |
Z,C,N,V,H |
1 |
SBC |
Rd, Rr |
Разность двух регистров с учетом переноса |
Rd¬Rd-Rr - C |
Z,C,N,V,H |
1 |
SBCI |
Rd*, K |
Разность регистра и константы с учетом переноса |
Rd¬Rd- K - C |
Z,C,N,V,H |
1 |
SBIW |
Rdl, K |
Вычитание константы из регистровой пары |
Rdh:Rdl ¬ Rdh:Rdl - K |
Z,C,N,V,S |
2 |
MUL |
Rd, Rr |
Умножение беззнаковых чисел |
R1:R0 ¬ RdRr |
Z,C |
2 |
MULS |
Rd, Rr |
Умножение чисел со знаком |
R1:R0 ¬ RdRr |
Z,C |
2 |
AND |
Rd, Rr |
Логическое И двух регистров |
Rd ¬Rd Rr |
Z,N,V |
1 |
ANDI |
Rd*, K |
Логическое И регистра и константы |
Rd¬Rd K |
Z,N,V |
1 |
OR |
Rd, Rr |
Логическое ИЛИ двух регистров |
Rd ¬Rd v Rr |
Z,N,V |
1 |
ORI |
Rd*, K |
Логическое ИЛИ регистра и константы |
Rd ¬Rd v K |
Z,N,V |
1 |
EOR |
Rd, Rr |
Исключающее ИЛИ двух регистров |
Rd ¬Rd vRr |
Z,N,V |
1 |
COM |
Rd |
Инверсия регистра |
Rd ¬$FF Rd |
Z,C,N,V |
1 |
NEG |
Rd |
Отрицание регистра |
Rd ¬$00 Rd |
Z,C,N,V,H |
1 |
INC |
Rd |
Инкремент |
Rd ¬Rd + 1 |
Z,N,V |
1 |
DEC |
Rd |
Декремент |
Rd ¬Rd 1 |
Z,N,V |
1 |
TST |
Rd |
Тестирование на ноль и минус |
Rd ¬Rd Rd |
Z,N,V |
1 |
CLR |
Rd |
Очистка регистра |
Rd ¬Rd Rd |
Z,N,V |
1 |
SER |
Rd |
Установка регистра в FF |
Rd ¬$FF |
None |
1 |
CP |
Rd, Rr |
Сравнение двух регистров |
Rd -Rr |
Z, N,V,C,H |
1 |
CPC |
Rd, Rr |
Сравнение двух регистров с учетом переноса |
Rd -Rr -C |
Z, N,V,C,H |
1 |
CPI |
Rd*, K |
Сравнение с константой |
Rd -K |
Z, N,V,C,H |
1 |
КОМАНДЫ ПЕРЕДАЧИ УПРАВЛЕНИЯ |
|||||
RJMP |
k |
Безусловный переход на метку k+1 |
PC ¬PC + k + 1 |
None |
2 |
IJMP |
|
Переход на указатель (Z) |
PC ¬Z |
None |
2 |
JMP |
k |
Переход на метку k |
PC k |
None |
3 |
RCALL |
k |
Относительный вызов подпрограммы |
PC¬PC + k + 1 |
None |
3 |
CALL |
k |
Абсолютный вызов подпрограммы |
PC k |
None |
4 |
ICALL |
|
Косвенный вызов подпрограммы |
PC ¬Z |
None |
3 |
RET |
|
Возврат из подпрограммы |
PC ¬STACK |
None |
4 |
RETI |
|
Возврат из подпрограммы обработки прерывания |
PC ¬STACK |
I |
4 |
CPSE |
Rd,Rr |
Пропуск команды при равенстве двух РОН |
if (Rd = Rr)PC ¬PC + 2 or 3 |
None |
1 / 2 / 3 |
SBRC |
Rr, b |
Пропустить команду, если разряд РОН сброшен |
if (Rr(b)=0)PC ¬PC + 2 or 3 |
None |
1 / 2 |
SBRS |
Rr, b |
Пропустить команду, если разряд РОН установлен |
if (Rr(b)=1)PC ¬PC + 2 or 3 |
None |
1 / 2 |
SBIC |
P*, b |
Пропустить команду, если разряд РВВ сброшен |
if (P(b)=0)PC ¬PC + 2 or 3 |
None |
1 / 2 |
SBIS |
P*, b |
Пропустить команду, если разряд РВВ установлен |
if (P(b)=1)PC ¬PC + 2 or 3 |
None |
1 / 2 |
BRBS |
s, k |
Переход, если разряд регистра SREG установлен |
if (SREG(s)=1) then РC¬PC+k+1 |
None |
1 / 2 |
BRBC |
s, k |
Переход, если разряд регистра SREG сброшен |
if(SREG(s) = 0) then PC¬PC+k + 1 |
None |
1 / 2 |
BREQ |
k |
Переход по «равно» |
if (Z = 1) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRCS |
k |
Переход по переносу |
if (C = 1) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRNE |
k |
Переход по «не равно» |
if (Z = 0) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRCC |
k |
Переход, если не было переноса |
if (C = 0) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRSH |
k |
Переход по «выше или равно» (для беззнаковых данных) |
if (C = 0) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRLO |
k |
Переход по «меньше» (для беззнаковых данных) |
if (C = 1) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRMI |
k |
Переход по «отрицательное значение» |
if (N = 1) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRPL |
k |
Переход по «положительное значение» |
if (N = 0) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRGE |
k |
Переход по «больше или равно» |
if (N V= 0) then PC¬PC+k + 1 |
None |
1 / 2 |
BRLT |
k |
Переход по «меньше» |
if (N V= 1) then PC¬PC+k + 1 |
None |
1 / 2 |
BRHS |
k |
Переход по половинному переносу |
if (H = 1) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRHC |
k |
Переход, если не было половинного переноса |
if (H = 0) then PC ¬PC + k + 1 |
None |
|
BRTS |
k |
Переход, если флаг Т установлен |
if (T = 1) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRTC |
k |
Переход, если флаг Т сброшен |
if (T = 0) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRVS |
k |
Переход по переполнению дополнительного кода |
if (V = 1) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRVC |
k |
Переход, если нет переполнения дополнительного кода |
if (V = 0) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRIE |
k |
Переход, если прерывания разрешены |
if ( I = 1) then PC ¬PC + k + 1 |
None |
1 / 2 |
BRID |
k |
Переход, если прерывания запрещены |
if ( I = 0) then PC ¬PC + k + 1 |
None |
1 / 2 |
КОМАНДЫ ПЕРЕСЫЛКИ ДАННЫХ |
|||||
MOV |
Rd, Rr |
Пересылка между регистрами |
Rd ¬Rr |
None |
1 |
LDI |
Rd*, K |
Загрузка константы |
Rd ¬K |
None |
1 |
LD |
Rd, X |
Косвенное чтение памяти данных |
Rd ¬(X) |
None |
2 |
LD |
Rd, X+ |
Косвенное чтение памяти данных с постинкрементом |
Rd ¬(X), X ¬X + 1 |
None |
2 |
LD |
Rd, - X |
Косвенное чтение памяти данных с преддекрементом |
X ¬X – 1, Rd ¬(X) |
None |
2 |
LD |
Rd, Y |
Косвенное чтение памяти данных |
Rd ¬(Y) |
None |
2 |
LD |
Rd, Y+ |
Косвенное чтение памяти данных с постинкрементом |
Rd ¬(Y), Y ¬Y + 1 |
None |
2 |
LD |
Rd, - Y |
Косвенное чтение памяти данных с преддекрементом |
Y ¬Y – 1, Rd ¬(Y) |
None |
2 |
LDD |
Rd,Y+q |
Косвенное относительное чтение памяти данных |
Rd ¬(Y + q) |
None |
2 |
LD |
Rd, Z |
Косвенное чтение памяти данных |
Rd ¬(Z) |
None |
2 |
LD |
Rd, Z+ |
Косвенное чтение памяти данных с постинкрементом |
Rd ¬(Z), Z ¬Z+1 |
None |
2 |
LD |
Rd, -Z |
Косвенное чтение памяти данных с преддекрементом |
Z ¬Z – 1, Rd ¬(Z) |
None |
2 |
LDD |
Rd, Z+q |
Косвенное относительное чтение памяти данных |
Rd ¬(Z + q) |
None |
2 |
LDS |
Rd, k |
Непосредственная загрузка из памяти данных |
Rd ¬(k) |
None |
2 |
ST |
X, Rr |
Косвенная запись в память данных |
(X) ¬Rr |
None |
2 |
ST |
X+, Rr |
Косвенная запись в память данных с постинкрементом |
ST (X) ¬Rr, X ¬X + 1 |
None |
2 |
ST |
- X, Rr |
Косвенная запись в память данных с преддекрементом |
X¬X – 1, (X) ¬Rr |
None |
2 |
ST |
Y, Rr |
Косвенная запись в память данных |
(Y) ¬Rr |
None |
2 |
ST |
Y+, Rr |
Косвенная запись в память данных с постинкрементом |
(Y) ¬Rr, Y¬Y + 1 |
None |
2 |
ST |
- Y, Rr |
Косвенная запись в память данных с преддекрементом |
Y ¬Y – 1, (Y) ¬Rr |
None |
2 |
STD |
Y+q,Rr |
Косвенная относительная запись в память данных |
(Y + q) ¬Rr |
None |
2 |
ST |
Z, Rr |
Косвенная запись в память данных |
(Z) ¬Rr |
None |
2 |
ST |
Z+, Rr |
Косвенная запись в память данных с постинкрементом |
(Z) ¬Rr, Z¬Z + 1 |
None |
2 |
ST |
-Z, Rr |
Косвенная запись в память данных с преддекрементом |
Z ¬Z – 1, (Z) ¬Rr |
None |
2 |
STD |
Z+q,Rr |
Косвенная относительная запись в память данных |
(Z + q) ¬Rr |
None |
2 |
STS |
k, Rr |
Непосредственная запись в память данных |
(k) ¬Rr |
None |
2 |
LPM |
|
Загрузка данных из памяти программ |
R0 ¬(Z) |
None |
3 |
ELPM |
|
Расширенная загрузка данных из памяти программ |
R0 ¬(RAMPZ: Z) |
None |
3 |
IN |
Rd, P |
Ввод из порта |
Rd ¬P |
None |
1 |
OUT |
P, Rr |
Вывод в порт |
P ¬Rr |
None |
1 |
PUSH |
Rr |
Сохранение байта в стеке |
STACK ¬Rr; SP¬SP-1 |
None |
2 |
POP |
Rd |
Извлечение байта из стека |
SP¬SP+1, Rd ¬STACK |
None |
2 |
КОМАНДЫ РАБОТЫ С БИТАМИ |
|||||
SBR |
Rd*, K |
Установка бита(тов) в регистре |
Rd ¬Rd v K |
Z,N,V |
1 |
CBR |
Rd*, K |
Очистка бита(тов) в регистре |
Rd ¬Rd ($FF - K) |
Z,N,V |
1 |
SBI |
P*,b |
Установка бита в регистре I/O |
I/O(P,b) ¬1 |
None |
2 |
CBI |
P*,b |
Очистка бита в регистре I/O |
I/O(P,b) ¬0 |
None |
2 |
LSL |
Rd |
Логический сдвиг влево |
Rd(n+1) ¬Rd(n), Rd(0) ¬0 |
Z,C,N,V |
1 |
LSR |
Rd |
Логический сдвиг вправо |
Rd(n) ¬Rd(n+1), Rd(7) ¬0 |
Z,C,N,V |
1 |
ROL |
Rd |
Циклический сдвиг влево через перенос |
Rd(0) ¬C, Rd(n+1) ¬Rd(n), C¬Rd(7) |
Z,C,N,V |
1 |
ROR |
Rd |
Циклический сдвиг вправо через перенос |
Rd(7) ¬C, Rd(n) ¬Rd(n+1), C ¬Rd(0) |
Z,C,N,V |
1 |
ASR |
Rd |
Арифметический сдвиг вправо |
Rd(n) ¬Rd(n+1), n=0..6 |
Z,C,N,V |
1 |
SWAP |
Rd |
Обмен тетрадами |
Rd(3..0)¬Rd(7..4), Rd(7..4)¬Rd(3..0) |
None |
1 |
BSET |
s |
Установка разряда регистра SREG |
SREG(s) ¬1 SREG(s) |
|
1 |
BCLR |
s |
Сброс разряда регистра SREG |
SREG(s) ¬0 SREG(s) |
|
1 |
BLD |
Rd, b |
Пересылка флага Т в РОН |
Rd(b) ¬T |
None |
1 |
BST |
Rr, b |
Запись разряда РОН в флаг Т |
T ¬Rr(b) |
T |
1 |
SEC |
|
Установка флага С |
C ¬1 |
C |
1 |
CLC |
|
Очистка флага C |
C ¬0 |
C |
1 |
SEN |
|
Установка флага N |
N ¬1 |
N |
1 |
CLN |
|
Очистка флага N |
N ¬0 |
N |
1 |
SEZ |
|
Установка флага Z |
Z ¬1 |
Z |
1 |
CLZ |
|
Очистка флага Z |
Z ¬0 |
Z |
1 |
SEI |
|
Разрешение глобальных прерываний |
I ¬1 |
I |
1 |
CLI |
|
Запрет глобальных прерываний. |
I ¬0 |
I |
1 |
SES |
|
Установка флага S |
S ¬1 |
S |
1 |
CLS |
|
Очистка флага S |
S ¬0 |
S |
1 |
SEV |
|
Установка флага V |
V ¬1 |
V |
1 |
CLV |
|
Очистка флага V |
V ¬0 |
V |
1 |
SET |
|
Установка флага T |
T ¬1 |
T |
1 |
CLT |
|
Очистка флага T |
T ¬0 |
T |
1 |
SEH |
|
Установка флага H |
H ¬1 |
H |
1 |
CLH |
|
Очистка флага H |
H ¬0 |
H |
1 |
КОМАНДЫ УПРАВЛЕНИЯ СИСТЕМОЙ |
|||||
NOP |
|
Нет операции |
None |
|
1 |
SLEEP |
|
Спящий режим |
None |
|
3 |
WDR |
|
Сброс по сторожевому таймеру |
None |
|
1 |
Обозначения, используемые в системе команд:
Rd - регистр-приемник результата, 0 d 31,
Rd* - регистр-приемник результата, 16 d 31,
Rdl: R24, R26, R28, R30. Для ADIW и SBIW команд,
Rr - регистр-источник,
P- адрес регистра ввода/вывода,
P*- адрес побитно адресуемого регистра ввода/вывода (адреса $00-$1F),
K - символьная или численная константа (8 бит),
k - адресная константа,
b - номер бита в регистре (3 бита),
s - номер бита в регистре статуса (3 бита),
X,Y,Z - регистры косвенной адресации (X=R27:R26, Y=R29:R28; Z=R31:R30).