Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Part_2.doc
Скачиваний:
4
Добавлен:
04.09.2019
Размер:
2.6 Mб
Скачать

2.2.10. Вибір контролера

В AVR Studio існують симулятори всіх контролерів серії AT90S*. Для вибору контролера заходимо в меню Options >> Simulator Options (рис.2.11).

Рис.2.11

В меню Device вибираємо потрібний контролер. Якщо вибрати варіант Custom, то можна задати свої параметри контролера. В меню Program Memory задаємо об’єм програмної пам’яті, в меню Data Memory - об’єм пам’яті даних, в меню EEPROM - об’єм енергонезалежної пам’яті і в меню I/O Size - об’єм пам’яті вводу-виводу.

2.2. Система команд та їх характеристика

Усі команди AVR-контролерів можна умовно розділити на чотири групи:

    • арифметичні і логічні команди;

    • команди розгалуження;

    • команди пересилки;

    • команди роботи з бітами.

В табл.2.1. приведено вся система команд 8-розрядних AVR-контролерів.

Таблиця 2.1

Мнемоніка

Операнди

Описання

Дія

Прапорці

Цикл

АРИФМЕТИЧНІ І ЛОГІЧНІ КОМАНДИ

ADD

Rd, Rr

Скласти два регістра

Rd ← Rd + Rr

Z, ,N,V,H

1

ADC

Rd, Rr

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

Rd ← Rd + Rr + C

Z,C,N,V,H

1

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

AND

Rd, Rr

Логічне “І” двох регістрів

Rd ← Rd AND Rr

Z, N, V

1

ANDI

Rd, K

Логічне “І” регістра з константою

Rd ← Rd AND K

Z, N, V

1

OR

Rd, Rr

Логічне “АБО” двох регістрів

Rd ← Rd OR Rr

Z, N, V

1

ORI

Rd, K

Логічне “АБО” регістра з константою

Rd ← Rd OR K

Z, N, V

1

EOR

Rd, Rr

Виключаюче “АБО” двох регістрів

Rd ← Rd XOR Rr

Z, N, V

1

COM

Rd

Доповнення до 1 (зворотній код)

Rd ← $FF - Rd

Z, C, N, V

1

NEG

Rd

Доповнення до 2 (додатковий код)

Rd ← $00 - Rd

Z,C,N,V,H

1

SBR

Rd, K

Установка біта(-ів) в регістрі

Rd ← Rd OR K

Z, N, V

1

CBR

Rd, K

Скидання біта(-ів) в регістрі

Rd ← Rd AND (FFh - K)

Z, N, V

1

INC

Rd

Збільшити на 1

Rd ← Rd + 1

Z, N, V

1

DEC

Rd

Зменшити на 1

Rd ← Rd – 1

Z, N, V

1

TST

Rd

Перевірити на 0 або мінус

Rd ← Rd AND Rd

Z, N, V

1

CLR

Rd

Очистити регістр (всі біти обнуляються)

Rd ← Rd XOR Rd

Z, N, V

1

SER

Rd

Установити регістр (всі біти установлюються в 1)

Rd ← $FF

Не змінює

1

КОМАНДИ РОЗГАЛУДЖЕННЯ

RJMP

k

Відносний перехід

PC ← PC+k+1

Не змінює

2

RCALL

k

Відносний виклик підпрограми

PC ← PC+k+1

Не змінює

3

RET

Вихід із підпрограми

PC ← STACK

Не змінює

4

RETI

Вихід із переривання

PC ← STACK

I

4

CPSE

Rd, Rr

Зрівняти, якщо рівні, пропуск наступної команди

if(Rd=Rr) PC←PC+2 або 3

Не змінює

1/2

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

SBRC

Rr, b

Якщо біт в регістрі скинутий, пропуск наступної команди

if(Rr(b)=0) PC←PC+2 або 3

Не змінює

1/2

SBRS

Rr, b

Якщо біт в регістрі встановлений, пропуск наступної команди

if(Rr(b)=1) PC←PC+2 або 3

Не змінює

1/2

SBIC

P, b

Якщо біт в регістрі вводу-виводу скинутий, пропуск наступної команди

if(P(b)=0) PC←PC+2 або 3

Не змінює

1/2

SBIS

P, b

Якщо біт в регістрі вводу-виводу встановлений, пропуск наступної команди

if(P(b)=1) PC←PC+2 або 3

Не змінює

1/2

BRBS

s, k

Перехід на мітку якщо встановлений прапорець s

if(SREG(s)=1) PC←PC+k+1

Не змінює

1/2

BRBC

s, k

Перехід на мітку якщо скинутий прапорець s

if(SREG(s)=0) PC←PC+k+1

Не змінює

1/2

BREQ

k

Перехід на мітку якщо рівно

if(Z=1) PC←PC+k+1

Не змінює

1/2

BRNE

k

Перехід на мітку якщо не рівно

if(Z=0) PC←PC+k+1

Не змінює

1/2

BRCS

k

Перехід на мітку якщо встановлений перенос

if(C=1) PC←PC+k+1

Не змінює

1/2

BRCC

k

Перехід на мітку якщо скинутий перенос

if(C=0) PC←PC+k+1

Не змінює

1/2

BRSH

k

Перехід на мітку якщо рівно або більше

if(C=0) PC←PC+k+1

Не змінює

1/2

BRLO

k

Перехід на мітку якщо менше

if(C=1) PC←PC+k+1

Не змінює

1/2

BRMI

k

Перехід на мітку якщо мінус

if(N=1) PC←PC+k+1

Не змінює

1/2

BRPL

k

Перехід на мітку якщо плюс

if(N=0) PC←PC+k+1

Не змінює

1/2

BRGE

k

Перехід на мітку якщо рівно або більше, зі знаком

if(N XOR V=0) PC←PC+k+1

Не змінює

1/2

BRLT

k

Перехід на мітку якщо менше нуля, зі знаком

if(N XOR V=1) PC←PC+k+1

Не змінює

1/2

BRHS

k

Перехід на мітку якщо встановлений прапорець H

if(H=1) PC←PC+k+1

Не змінює

1/2

BRHC

k

Перехід на мітку якщо скинутий прапорець H

if(H=0) PC←PC+k+1

Не змінює

1/2

BRTS

k

Перехід на мітку якщо встановлений прапорець T

if(H=1) PC←PC+k+1

Не змінює

1/2

BRTC

k

Перехід на мітку якщо скинутий прапорець Т

if(H=0) PC←PC+k+1

Не змінює

1/2

BRVS

k

Перехід на мітку якщо встановлений прапорець V (переповнення)

if(H=1) PC←PC+k+1

Не змінює

1/2

BRVC

k

Перехід на мітку якщо скинутий прапорець V

if(H=0) PC←PC+k+1

Не змінює

1/2

BRIE

k

Перехід на мітку якщо дозволено переривання

if(I=1) PC←PC+k+1

Не змінює

1/2

BRID

k

Перехід на мітку якщо заборонено переривання

if(I=1) PC←PC+k+1

Не змінює

1/2

КОМАНДИ ПЕРЕСИЛКИ

LD

Rd, Z

Загрузити регістр безпосередньо

Rd ← (Z)

Не змінює

2

ST

Z, Rr

Записати регістр безпосередньо

(Z) ← Rr

Не змінює

2

MOV

Rd, Rr

Пересилка з одного регістра в другий

Rd ← Rr

Не змінює

1

LDI

Rd, K

Загрузити константу

Rd ← K

Не змінює

1

IN

Rd, P

Ввід із порту

Rd ← P

Не змінює

1

OUT

P, Rr

Вивід в порт

P ← Rr

Не змінює

1

КОМАНДИ РОБОТИ З БІТАМИ

SBI

P, b

Установити біт в регістрі вводу-виводу

I/O (P, b) ← 1

Не змінює

2

CBI

P,b

Скинути біт в регістрі вводу-виводу

I/O (P, b) ← 0

Не змінює

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

Зсув вліво через C

Rd (0) ←C,

Rd (n+1)←Rd (n), C←Rd (7)

Z, C, N, V

1

ROR

Rd

Зсув вправо через C

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)

Не змінює

1

BSET

s

Встановити прапорець

SREG(s) ← 1

SREG(s)

1

BCLR

s

Скинути прапорець

SREG(s) ← 0

SREG(s)

1

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

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

Немає операції

Не змінює

1

SLEEP

Зупинка (сплячий режим)

Не змінює

3

WDR

Скидання охоронного таймеру

Не змінює

1

Регістри та їх операнди:

Rd – регістр призначення (і джерело) в регістровому файлі;

Rr – регістр джерело в регістровому файлі;

K – константа;

k – мітка;

b – біт в регістровому файлі або біт в регістрі вводу-виводу;

s – біт в регістрі статусу;

X, Y, Z – регістри непрямої адресації (X=R27:R26, Y=R29:R28, Z=R31:R30);

Р – адрес порту вводу-виводу;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]