logo
К курсовому по ЭиМПТ 2012

Приложение 1 – Основные характеристики микроконтроллеров групп Tiny avr, Mega avr и lcd avr

Характеристика

Tiny AVR

Mega AVR

ATtiny13

ATtiny15L

ATtiny26

ATtiny28

ATtiny2313

ATmega48

ATmega8

ATmega88

ATmega8515

ATmega8535

Объём памяти программ (FLASH), Кбайт

1

1

2

2

2

4

8

8

8

8

Объём внутренней оперативной памяти данных (SRAM), байт

64

128

128

256

512

512

512

512

Объём энергонезависимой памяти данных (EEPROM), байт

64

64

128

128

512

1K

1K

512

512

Количество команд

120

90

118

90

120

130

130

130

130

130

Количество линий ввода-вывода

6

6

16

20

18

23

23

23

35

32

Количество векторов прерываний

10

9

12

6

19

19

19

19

17

21

Разрядность программного счётчика (PC)

16

16

16

16

16

16

16

16

16

16

Стек1

П

А

П

А

П

П

П

П

П

П

8-разрядный таймер-счётчик

1

2

2

1

1

2

2

2

1

2

16-разрядный таймер-счётчик

1

1

1

1

1

1

Сторожевой таймер

+

+

+

+

+

+

+

+

+

+

Аналоговый компаратор

+

+

+

+

+

+

+

+

+

+

АЦП (10 разрядов), каналов

4

4

11

8

8

8

8

Аппаратный умножитель

+

+

+

+

+

Универсальный асинхронный приёмопередатчик (УАПП)

1

1

1

1

1

1

Интерфейс SPI для обмена данными

2

1

2

1

1

Двухпроводный последовательный интерфейс (TWI)

+

+

+

+

+

Интерфейс JTAG

Программирование в системе (In-System Programming)

+

+

+

+

+

+

+

+

+

Самопрограммирование (Self-Programming)

+

+

+

+

+

Схема сброса при понижении напряжения питания

+

+

+

+

+

+

+

+

+

+

Синхронизация от внутренней RC-цепочки

+

+

+

+

+

+

+

+

+

+

Синхронизация от внешнего кварцевого генератора

+

+

+

+

+

+

+

+

+

+

Максимальная тактовая частота, МГц

16

1,6

16

4

16

16

16

16

16

16

Число выводов

8

8

20/32

28/32

20/32

28/32

28/32

28/32

40/44

40/44

Характеристика

Mega AVR

LCD AVR

ATmega16

ATmega162

ATmega168

ATmega32

ATmega64

ATmega128

ATmega256

ATmega169

ATmega329

Объём памяти программ (FLASH), Кбайт

16

16

16

32

64

128

256

16

32

Объём внутренней оперативной памяти данных (SRAM), байт

1K

1K

1K

2K

4K

4K

8K

1K

2K

Объём энергонезависимой памяти данных (EEPROM), байт

512

512

512

1K

2K

4K

4K

512

1K

Количество команд

131

131

131

131

130

133

130

130

130

Количество линий ввода-вывода

32

35

23

32

53

53

53

54

54

Количество векторов прерываний

21

28

21

21

35

35

35

23

23

Разрядность программного счётчика (PC)

16

16

16

16

16

22

22

16

16

Стек1

П

П

П

П

П

П

П

П

П

8-разрядный таймер-счётчик

2

2

2

2

2

2

2

2

2

16-разрядный таймер-счётчик

1

1

1

1

2

2

2

1

1

Сторожевой таймер

+

+

+

+

+

+

+

+

+

Аналоговый компаратор

+

+

+

+

+

+

+

+

+

АЦП (10 разрядов), каналов

8

8

8

8

8

8

8

8

Аппаратный умножитель

+

+

+

+

+

+

+

+

+

Универсальный асинхронный приёмопередатчик (УАПП)

1

2

1

1

2

2

2

1

1

Интерфейс SPI для обмена данными

1

1

2

1

1

1

1

1

1

Двухпроводный последователь-ный интерфейс (TWI)

+

+

+

+

+

+

+

+

+

Интерфейс JTAG

+

+

+

+

+

+

+

+

Программирование в системе (In-System Programming)

+

+

+

+

+

+

+

+

+

Самопрограммирование (Self-Programming)

+

+

+

+

+

+

+

+

+

Схема сброса при понижении напряжения питания

+

+

+

+

+

+

+

+

+

Синхронизация от внутренней RC-цепочки

+

+

+

+

+

+

+

+

+

Синхронизация от внешнего кварцевого генератора

+

+

+

+

+

+

+

+

+

Максимальная тактовая частота, МГц

16

16

16

16

16

16

16

16

16

Число выводов

40/44

40/44

28/32

40/44

64

64

64

64

64

1 А – аппаратный, П – программный (организуемый в ОЗУ).

Приложение 2 – Система команд микроконтроллеров семейства AVR

Мнемо-ника

Операн-ды

Описание

Операция

Флаги

Число тактов*

1

2

3

4

5

6

Арифметические и логические команды

ADD

Rd, Rr

Сложить без учёта флага переноса

Rd  Rd + Rr

Z, C, N, V, H, S

1

ADC

Rd, Rr

Сложить с учётом флага переноса

Rd  Rd + Rr + C

Z, C, N, V, H, S

1

ADIW

Rdl, К6

Сложить слово и константу

Rdh:Rdl  Rdh:Rdl – K6

Z, C, N, V, S

2

SUB

Rd, Rr

Вычесть без учёта флага переноса

Rd  Rd – Rr

Z, C, N, V, H, S

1

SUBI

Rd, К8

Вычесть константу

Rd  Rd – K8

Z, C, N, V, H, S

1

SBC

Rd, Rr

Вычесть с учётом флага переноса

Rd  Rd – Rr – C

Z, C, N, V, H, S

1

SBCI

Rd, К8

Вычесть константу с учётом флага переноса

Rd  Rd – K8 – C

Z, C, N, V, H, S

1

SBIW

Rdl, К6

Вычесть константу из слова

Rdh:Rdl  Rdh:Rdl – K6

Z, C, N, V, S

2

AND

Rd, Rr

Выполнить логическое И

Rd  Rd · Rr

Z, N, V, S

1

ANDI

Rd, К8

Выполнить логическое И с константой

Rd  Rd · K8

Z, N, V, S

1

OR

Rd, Rr

Выполнить логическое ИЛИ

Rd  Rd v Rr

Z, N, V, S

1

ORI

Rd, К8

Выполнить логическое ИЛИ с константой

Rd  Rd v K8

Z, N, V, S

1

EOR

Rd, Rr

Выполнить логическое исключающее ИЛИ

Rd  Rd  Rr

Z, N, V, S

1

COM

Rd

Вычислить дополнение до од-ного (поразрядная инверсия)

Rd  $FF – Rd

Z, C, N, V, S

1

NEG

Rd

Вычислить дополнение до двух (изменить знак)

Rd  $00 – Rd

Z, C, N, V, H, S

1

SBR

Rd, К8

Установить разряд (разряды) в РОН

Rd  Rd v K8

Z, C, N, V, S

1

CBR

Rd, К8

Сбросить разряды в РОН

Rd  Rd · ($FF – K8)

Z, C, N, V, S

1

INC

Rd

Инкрементировать содержимое РОН

Rd  Rd + 1

Z, N, V, S

1

DEC

Rd

Декрементировать содержимое РОН

Rd  Rd – 1

Z, N, V, S

1

TST

Rd

Проверить на равенство нулю или отрицательное значение

Rd  Rd · Rd

Z, C, N, V, S

1

CLR

Rd

Очистить все разряды РОН

Rd  Rd  Rd

Z, C, N, V, S

1

SER

Rd

Установить все разряды РОН

Rd  $FF

Нет

1

CP

Rd, Rr

Сравнить

Rd – Rr

Z, C, N, V, H, S

1

CPC

Rd, Rr

Сравнить с учётом флага переноса

Rd – Rr – C

Z, C, N, V, H, S

1

1

2

3

4

5

6

CPI

Rd, К8

Сравнить с константой

Rd – K8

Z, C, N, V, H, S

1

MUL

Rd, Rr

Перемножить содержимое двух РОН (без знака)

R1:R0  Rd  Rr

Z, C

2

MULS

Rd, Rr

Перемножить содержимое двух РОН (со знаком)

R1:R0  Rd  Rr

Z, C

2

MULSU

Rd, Rr

Перемножить содержимое двух РОН (Rd – со знаком; Rr – без знака)

R1:R0  Rd  Rr

Z, C

2

FMUL

Rd, Rr

Перемножить содержимое двух РОН (без знака) со сдвигом влево на 1 разряд

R1:R0  Rd  Rr << 1

Z, C

2

FMULS

Rd, Rr

Перемножить содержимое двух РОН (со знаком) со сдвигом влево на 1 разряд

R1:R0  Rd  Rr << 1

Z, C

2

FMULSU

Rd, Rr

Перемножить содержимое двух РОН (Rd – со знаком; Rr – без знака) со сдвигом влево на 1 разряд

R1:R0  Rd  Rr << 1

Z, C

2

Команды ветвления

RJMP

k

Относительный переход

PC  PC + k +1

Нет

2

IJMP

Нет

Косвенный переход

PC  Z

Нет

2

EIJMP

Нет

Расширенный косвенный переход

PC(15:0)  Z,

PC(21:16)  EIND

Нет

2

JMP

k

Косвенный переход

PC  k

Нет

3

RCALL

k

Относительный вызов подпрограммы

STACK  PC + 1,

PC  PC + k + 1

Нет

3

ICALL

Нет

Косвенный вызов подпрограммы

STACK  PC + 1,

PC  Z

Нет

3

EICALL

Нет

Расширенный косвенный вызов подпрограммы

STACK  PC + 1,

PC(15:0)  Z,

PC(21:16)  EIND

Нет

3

CALL

k

Вызов подпрограммы

STACK  PC + 1,

PC  k

Нет

4/5

RET

Нет

Возврат из подпрограммы

PC  STACK

Нет

4

RETI

Нет

Возврат из подпрограммы обработки прерывания

PC  STACK

I

4

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

I/O, b

Пропустить, если бит в регист-ре ввода-вывода сброшен

если I/O(b) = 0,

PC  PC + 2 (или 3)

Нет

1/2/3

SBIS

I/O, b

Пропустить, если бит в регистре ввода-вывода установлен

если I/O(b) = 1,

PC  PC + 2 (или 3)

Нет

1/2/3

BRBC

s, k

Перейти, если флаг в регистре SREG сброшен

если SREG(s) = 0,

PC  PC + k + 1

Нет

1/2

1

2

3

4

5

6

BRBS

s, k

Перейти, если флаг в регистре SREG установлен

если SREG(s) = 1,

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

BRCS

k

Перейти, если флаг переноса установлен

если C = 1,

PC  PC + k + 1

Нет

1/2

BRCC

k

Перейти, если флаг переноса сброшен

если C = 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

k

Перейти, если минус

если N = 1,

PC  PC + k + 1

Нет

1/2

BRPL

k

Перейти, если плюс

если N = 0,

PC  PC + k + 1

Нет

1/2

BRGE

k

Перейти, если больше или равно (со знаком)

если S = 0,

PC  PC + k + 1

Нет

1/2

BRLT

k

Перейти, если меньше (со знаком)

если S = 1,

PC  PC + k + 1

Нет

1/2

BRHS

k

Перейти, если флаг полупереноса установлен

если H = 1,

PC  PC + k + 1

Нет

1/2

BRHC

k

Перейти, если флаг полупереноса сброшен

если H = 0,

PC  PC + k + 1

Нет

1/2

BRTS

k

Перейти, если флаг T установлен

если T = 1,

PC  PC + k + 1

Нет

1/2

BRTC

k

Перейти, если флаг T сброшен

если T = 0,

PC  PC + k + 1

Нет

1/2

BRVS

k

Перейти, если флаг переполнения установлен

если V = 1,

PC  PC + k + 1

Нет

1/2

BRVC

k

Перейти, если флаг переполнения сброшен

если V = 0,

PC  PC + k + 1

Нет

1/2

BRIE

k

Перейти, если прерывания разрешены

если I = 1,

PC  PC + k + 1

Нет

1/2

BRID

k

Перейти, если прерывания запрещены

если I = 0,

PC  PC + k + 1

Нет

1/2

Команды передачи данных

MOV

Rd, Rr

Копирование РОН

Rd  Rr

Нет

1

MOVW

Rd, Rr

Копирование пары РОН

Rd+1:Rd  Rr+1:Rr

Нет

1

LDI

Rd, К8

Загрузка константы в РОН

Rd  K8

Нет

1

LDS

Rd, k

Прямая загрузка из ОЗУ в РОН

Rd  (k)

Нет

2

LD

Rd, X

Косвенная загрузка из ОЗУ в РОН

Rd  (X)

Нет

2

LD

Rd, X+

Косвенная загрузка из ОЗУ с постинкрементом

Rd  (X), X  X + 1

Нет

2

LD

Rd, –X

Косвенная загрузка из ОЗУ с предекрементом

X  X – 1, Rd  (X)

Нет

2

1

2

3

4

5

6

LD

Rd, Y

Косвенная загрузка из ОЗУ в РОН

Rd  (Y)

Нет

2

LD

Rd, Y+

Косвенная загрузка из ОЗУ с постинкрементом

Rd  (Y), Y  Y + 1

Нет

2

LD

Rd, –Y

Косвенная загрузка из ОЗУ с предекрементом

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  Z + 1

Нет

2

LD

Rd, –Z

Косвенная загрузка из ОЗУ с предекрементом

Z  Z – 1, Rd  (Z)

Нет

2

LDD

Rd, Z+q

Косвен. загрузка из ОЗУ со смещением

Rd  (Z + q)

Нет

2

STS

k, Rr

Прямое сохранение в ОЗУ

(k)  Rr

Нет

2

ST

X, Rr

Косвенное сохранение в ОЗУ

(X)  Rr

Нет

2

ST

X+, Rr

Косвенное сохранение в ОЗУ с постинкрементом

(X)  Rr, X  X + 1

Нет

2

ST

–X, Rr

Косвенное сохранение в ОЗУ с предекрементом

X  X – 1, (X)  Rr

Нет

2

ST

Y, Rr

Косвенное сохранение в ОЗУ

(Y)  Rr

Нет

2

ST

Y+, Rr

Косвенное сохранение в ОЗУ с постинкрементом

(Y)  Rr, Y  Y + 1

Нет

2

ST

–Y, Rr

Косвенное сохранение в ОЗУ с предекрементом

Y  Y – 1, (Y)  Rr

Нет

2

STD

Y+q, Rr

Косвенное сохранение в ОЗУ со смещением

(Y + q)  Rr

Нет

2

ST

Z, Rr

Косвенное сохранение в ОЗУ

(Z)  Rr

Нет

2

ST

Z+, Rr

Косвенное сохранение в ОЗУ с постинкрементом

(Z)  Rr, Z  Z + 1

Нет

2

ST

–Z, Rr

Косвенное сохранение в ОЗУ с предекрементом

Z  Z – 1, (Z)  Rr

Нет

2

ST

Z+q, Rr

Косвенное сохранение в ОЗУ со смещением

(Z + q)  Rr

Нет

2

LPM

Нет

Загрузка байта из памяти программ

R0  (Z)

Нет

3

LPM

Rd, Z

Загрузка байта из памяти программ

Rd  (Z)

Нет

3

LPM

Rd, Z+

Загрузка байта из памяти программ с постинкрементом

Rd  (Z), Z  Z + 1

Нет

3

ELPM

Нет

Расширенная загрузка байта из памяти программ

R0  (RAMPZ:Z)

Нет

3

ELPM

Rd, Z

Расширенная загрузка байта из памяти программ

Rd  (RAMPZ:Z)

Нет

3

ELPM

Rd, Z+

Расширенная загрузка байта из памяти программ с постинкрементом

Rd  (RAMPZ:Z),

Z  Z + 1

Нет

3

SPM

Нет

Запись в память программ

(Z)  R1:R0

Нет

IN

Rd, I/O

Чтение регистра ввода-вывода

Rd  I/O

Нет

1

OUT

I/O, Rr

Запись в регистр ввода-вывода

I/O  Rr

Нет

1

PUSH

Rr

Занесение содержимого РОН в стек

STACK  Rr

Нет

2

POP

Rd

Извлечение из стека в РОН

Rd  STACK

Нет

2

1

2

3

4

5

6

Команды работы с битами

LSL

Rd

Логический сдвиг влево

Rd(n + 1)  Rd(n),

Rd(0)  0, C  Rd(7)

Z, C, N, V, H, S

1

LSR

Rd

Логический сдвиг вправо

Rd(n)  Rd(n + 1),

Rd(7)  0, C  Rd(0)

Z, C, N, V, H, S

1

ROL

Rd

Циклический сдвиг влево через флаг переноса

Rd(0)  C, Rd(n + 1)  Rd(n), C  Rd(7)

Z, C, N, V, H, S

1

ROR

Rd

Циклический сдвиг вправо через флаг переноса

Rd(7)  C, Rd(n) 

 Rd(n+1), C  Rd(0)

Z, C, N, V, S

1

ASR

Rd

Арифметический сдвиг вправо

Rd(n)  Rd(n + 1),

n = 0...6

Z, C, N, V, S

1

SWAP

Rd

Поменять нибблы местами (перестановка тетрад)

Rd(3...0)  Rd(7...4),

Rd(7...4)  Rd(3...0)

Нет

1

BSET

s

Установить флаг в регистре состояния SREG

SREG(s)  1

SREG(s)

1

BCLR

s

Сбросить флаг в регистре состояния SREG

SREG(s)  0

SREG(s)

1

SBI

I/O, b

Установить разряд в регистре ввода-вывода

I/O(b)  1

Нет

2

CBI

I/O, b

Сбросить разряд в регистре ввода-вывода

I/O(b)  0

Нет

2

BST

Rr, b

Сохранить разряд РОН во флаге T

T  Rr(b)

T

1

BLD

Rd, b

Загрузить разряд из флага T в РОН

Rd(b)  T

Нет

1

SEC

Нет

Установить флаг переноса

C  1

C

1

CLC

Нет

Сбросить флаг переноса

C  0

C

1

SEN

Нет

Установить флаг отрицательного числа

N  1

N

1

CLN

Нет

Сбросить флаг отрицательного числа

N  0

N

1

SEZ

Нет

Установить флаг нуля

Z  1

Z

1

CLZ

Нет

Сбросить флага нуля

Z  0

Z

1

SEI

Нет

Установить флаг разрешения прерываний

I  1

I

1

CLI

Нет

Сбросить флаг разрешения прерываний

I  0

I

1

SES

Нет

Установить флаг числа со знаком

S  1

S

1

CLS

Нет

Сбросить флаг числа со знаком

S  0

S

1

SEV

Нет

Установить флаг переполнения

V  1

V

1

CLV

Нет

Сбросить флаг переполнения

V  0

V

1

SET

Нет

Установить флаг T

T  1

T

1

CLT

Нет

Сбросить флаг T

T  0

T

1

SEH

Нет

Установить флаг внутреннего переноса

H  1

H

1

CLH

Нет

Сбросить флаг внутреннего переноса

H  0

H

1

NOP

Нет

Нет операции

Нет

Нет

1

1

2

3

4

5

6

SLEEP

Нет

Уменьшить энергопотребление

См. описание конкретного микроконтроллера

Нет

1

WDR

Нет

Сбросить сторожевой таймер

См. описание конкретного микроконтроллера

Нет

1

УСЛОВНЫЕ ОБОЗНАЧЕНИЯ:

Rd – результирующий (destination) и исходный РОН;

Rr – исходный (source) РОН;

I/O – регистр ввода-вывода;

b – разряд в регистре общего назначения или регистре ввода-вывода;

s – разряд (флаг) в регистре состояния SREG;

Rdl – регистры R24, R26, R28, R30;

X, Y, Z – регистры-указатели для косвенной адресации (X = R27:R26, Y = R29:R28, Z = R31:R30);

RAMPX, RAMPY, RAMPZ – регистры, связанные с регистрами-указателями X, Y и Z и обеспечивающие косвенную адресацию по всему объёму памяти данных (при размере памяти данных более 64 Кбайт) и доступ к размещённым в памяти программ константам в микроконтроллерах с размером памяти программ более 64 Кбайт;

РС – программный счётчик (Program Counter);

STACK – стек для хранения адресов возврата и содержимого регистров;

SP – указатель стека (Stack Pointer);

EIND – регистр, связанный с программным счётчиком и обеспечивающий косвенную адресацию по всему объёму памяти программ для микроконтроллеров с размером памяти программ более 64 Кбайт;

K6 – константа (6 разрядов), может быть константное выражение;

K8 – константа (8 разрядов), может быть константное выражение;

k – адресная константа для программного счётчика (размер зависит от команды);

q – смещение при косвенной адресации (6 разрядов).

РАЗРЯДЫ РЕГИСТРА СОСТОЯНИЯ SREG:

C – флаг переноса;

Z – флаг нулевого значения;

N – флаг отрицательного значения;

V – флаг переполнения;

S = N  V – флаг для проверок со знаком при переполнении;

H – флаг полупереноса (переноса между третьим и четвёртым разрядами байта);

T – флаг для команд пересылки;

I – флаг глобального разрешения (запрещения) прерываний.

ПРИМЕЧАНИЯ: 1. Транслятор с языка ассемблера AVR-микроконтроллеров не различает регистр символов.

2. Мнемокоды ANDI и CBR а также ORI и SBR транслируются в один и тот же машинный код. Выбор между ними производится в зависимости от контекста программы.

3. Длительность выполнения команд условных переходов составляет 1 такт, если условие ложно (переход не производится), и 2 (3) такта (в зависимости от величины смещения), если соответствующее условие истинно (производится переход).

4. Для команд доступа к данным длительность выполнения указана при обращении к внутренней оперативной памяти данных.

Приложение 3Директивы ассемблера микроконтроллеров семейства AVR

Директива

Описание

.byte

Зарезервировать байты в оперативной памяти данных

.cseg

Сегмент программы

.db

Определить (задать) байты в памяти программ или энергонезави-симой памяти данных

.def

Назначить регистру общего назначения символическое имя

.device

Определить устройство, для которого транслируется программа

.dseg

Сегмент данных

.dw

Определить (задать) слова в памяти программ или энергонезависимой памяти данных

.endm, .endmacro

Конец макроса

.equ

Установить постоянное выражение

.eseg

Сегмент энергонезависимой памяти данных

.exit

Выйти из файла

.include

Вложить другой файл

.list

Включить генерацию листинга

.listmac

Включить разворачивание макросов в листинге

.macro

Начало макроса

.nolist

Выключить генерацию листинга

.org

Установить положение в сегменте

.set

Установить переменный символический эквивалент выражения

31