Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мет-AVR.doc
Скачиваний:
94
Добавлен:
02.11.2018
Размер:
3.04 Mб
Скачать

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 в соответствии с указанной методикой.

Ответить на контрольные вопросы.

Контрольные вопросы

    1. Методика выставления арифметических флагов МК.

    2. Методика работы в AVR Studio 4.

Литература

  1. Микроконтроллеры 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 ¬ RdRr

Z,C

2

MULS

Rd, Rr

Умножение чисел со знаком

R1:R0 ¬ RdRr

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).

64