Микроконтроллеры для систем автоматики - часть 8

 

  Главная      Учебники - Производство     

 

поиск по сайту           правообладателям

 

 

 

 

 

 

 

 

 

содержание   ..  6  7  8  9   ..

 

 

Микроконтроллеры для систем автоматики - часть 8

 

 

 

31 

Окончание табл.3.3. 

Мнемо-

ника 

Операнды 

Описание 

Операция 

Флаги 

Так

т 

ror Rd 

Rotate Right Through 
Carry 

Rd(7) <- C,Rd(n)<- 
Rd(n+1),C <- Rd(0) 

Z,C,N,V 

asr Rd 

Arithmetic Shift Right  Rd(n) <- Rd(n+1), n=0..6 

Z,C,N,V 

swap Rd 

Swap Nibbles 

Rd(3..0) <- Rd(7..4), Rd(7..4) 
<- Rd(3..0) 

None 

bset s 

Flag Set 

SREG(s) <- 1 SREG(s) 

 

bclr s 

Flag Clear 

SREG(s) <- 0 SREG(s) 

 

bld Rd, 

Bit load from T to 
Register 

Rd(b) <- T 

None 

bst Rr, 

Bit Store from 
Register to T 

T <- Rr(b) 

sec  

Set Carry 

C <- 1 C 

clc  

Clear Carry 

C <- 0 

sen  

Set Negative Flag 

N <- 1 N 

cln  

Clear Negative Flag  N <- 0 

sez  

Set Zero Flag 

Z <- 1 Z 

clz  

Clear Zero Flag 

Z <- 0 

sei  

Global Interrupt 
Enable 

I <- 1 I 

cli  

Global Interrupt 
Disable 

I <- 0 

ses  

Set Signed Test Flag  S <- 1 S 

cls  

Clear Signed Test 
Flag 

S <- 0 

sev  

Set Twos 
Complement 
Overflow 

V <- 1 V 

clv  

Clear Twos 
Complement 
Overflow 

V <- 0 

set  

Set T in SREG 

T <- 1 T 

clt  

Clear T in SREG 

T <- 0 

she  

Set Half Carry Flag in 
SREG 

H <- 1 H 

clh  

Clear Half Carry Flag 
in SREG 

H <- 0 

Инструкции ветвления 

Инструкции  ветвления  изменяют  содержимое  программного  счетчика.  Они 

используются при организации переходов и подпрограмм. Инструкции условных переходов 
и  условных  вызовов  подпрограмм  в  процессе  исполнения  проверяют  выполнение 
различных  условий.  Если  условие  не  выполняется,  программный  счетчик  просто 

 

32 

инкрементируется. Такими условиями может быть равенство содержимого двух регистров, 
единичное  или  нулевое  состояние  заданных  битов  в  регистрах  общего  назначения, 
регистрах ввода/вывода или в регистре состояния, Например, команда cpse (compare, skip if 
equal
 ) проверяет равенство содержимого регистров, команда sbrc Rr, b (skip if bit in register 
cleared 
) осуществляет переход при условии равенства нулю содержимого бита b в регистре 
Rr, а инструкция brmi k (branch if minus) проверяет флаг отрицательного результата (N) в 
регистре состояния SREG.  

Время  выполнения  команд  ветвления  зависит  от  результата  проверки.  Оно,  для 

различных инструкций, может меняться, в пределах от одного до четырех тактов. 

Таблица 3.4.  

Команды переходов микроконтроллера ATmega163 

Мнемо-

ника 

Операнды  Описание 

Операция 

Флаги  Такт 

rjmp k 

Relative Jump 

PC <- PC + k + 1 None 

 

ijmp  

Indirect Jump to (Z) 

PC <- Z 

None 

jmp k 

Jump 

PC <- k 

None 

rcall k 

Relative Subroutine Call  PC <- PC + k + 1 None 

call k 

Call Subroutine 

PC <- k 

None 

icall  

Indirect Call to (Z) 

PC <- Z 

None 

ret  

Subroutine Return 

PC <- STACK 

None 

reti  

Interrupt Return 

PC <- STACK 

cpse Rd,Rr 

Compare, Skip if Equal   if (Rd = Rr) PC <- PC + 2 

or 3 

None  1/ 2 / 

sbrc Rr, 

Skip if Bit in Register 
Cleared  

if (Rr(b)=0)  PC <- PC + 2 
or 3 

None  1 / 2 

sbrs Rr, 

Skip if Bit in Register is 
Set  

if (Rr(b)=1) PC <- PC + 2 
or 3 

None  1 / 2 

sbic P*, 

Skip if Bit in I/O 
Register Cleared  

if (P(b)=0) PC <- PC + 2 or 

None  1 / 2 

sbis P*, 

Skip if Bit in I/O 
Register is Set  

if (P(b)=1) PC <- PC + 2 or 

None  1 / 2 

brbs s, 

Branch if Status Flag 
Set  

if (SREG(s) = 1) then PC 
<- PC+k + 1 

None  1 / 2 

brbc s, 

Branch if Status Flag 
Cleared  

if(SREG(s) = 0) then PC 
<- PC+k + 1 

None  1 / 2 

breq k 

Branch if Equal  

if (Z = 1) then PC <- PC + 
k + 1 

None  1 / 2 

brcs k 

Branch if Carry Set 

if (C = 1) then PC <- PC + 
k + 1 

None  1 / 2 

brne k 

Branch if Not Equal 

if (Z = 0) then PC <- PC + 
k + 1 

None  1 / 2 

brcc k 

Branch if Carry Cleared   if (C = 0) then PC <- PC + 

k + 1 

None  1 / 2 

 

 

33 

Окончание табл. 3.4. 

Мнемо-

ника 

Операнды  Описание 

Операция 

Флаги  Такт 

brsh k 

Branch if Same or 
Higher 

if (C = 0) then PC <- PC + 
k + 1 

None  1 / 2 

brlo k 

Branch if Lower  

if (C = 1) then PC <- PC + 
k + 1 

None  1 / 2 

brmi k 

Branch if Minus  

if (N = 1) then PC <- PC + 
k + 1 

None  1 / 2 

brpl k 

Branch if Plus 

if (N = 0) then PC <- PC + 
k + 1 

None  1 / 2 

brge k 

Branch if Greater or 
Equal, Signed  

if (N 

 V= 0) then PC <- 

PC + k + 1 

None  1 / 2 

brlt k 

Branch if Less Than 
Zero, Signed 

if (N 

 V= 1) then PC <- 

PC + k + 1 

None  1 / 2 

brhs k 

Branch if Half Carry 
Flag Set  

if (H = 1) then PC <- PC + 
k + 1 

None  1 / 2 

brhc k 

Branch if Half Carry 
Flag Cleared 

if (H = 0) then PC <- PC + 
k + 1 

None  

brts k 

Branch if T Flag Set  

if (T = 1) then PC <- PC + 
k + 1 

None  1 / 2 

brtc k 

Branch if T Flag 
Cleared  

if (T = 0) then PC <- PC + 
k + 1 

None  1 / 2 

brvs k 

Branch if Overflow Flag 
is Set 

if (V = 1) then PC <- PC + 
k + 1 

None  1 / 2 

brvc k 

Branch if Overflow Flag 
is Cleared 

if (V = 0) then PC <- PC + 
k + 1 

None  1 / 2 

brie k 

Branch if Interrupt 
Enabled 

if ( I = 1) then PC <- PC + 
k + 1 

None  1 / 2 

brid k 

Branch if Interrupt 
Disabled  

if ( I = 0) then PC <- PC + 
k + 1 

None  1 / 2 

Инструкции управления 

Инструкции управления используются для управления вычислениями и режимами 

работы процессорного ядра. Пустая операция nop заполняет пробелы между инструкциями 
в программной памяти или используется в качестве выдержки. Команда sleep переводит 
процессорное ядро в режим пониженного энергопотребления. Инструкция wdr сбрасывает 
сторожевой таймер. 

Таблица 3.5.  

Инструкции управления микроконтроллера ATmega163

Мнемоника 

Описание 

Операция  Такт 

nop 

No Operation 

None 

sleep 

Sleep (see specific description) 

None 3 

wdr 

Watchdog Reset 

None 

 

34 

4. ЯЗЫК АССЕМБЛЕРА 

Язык 

ассемблера 

(assembler language) – язык 

программирования 

микропроцессорных  систем,  ориентированный  на  определенную  архитектуру  системы. 
Программа, написанная на языке ассемблера, переводится в машинные коды с помощью 
специального компилятора.  

Язык ассемблера использует систему команд процессорного ядра и специальные 

директивы,  указывающие  программе  ассемблеру,  как  организовать  различные  секции 
программы,  где  располагать  данные,  как  связать  отдельные  процедуры  и  т.  д.  Из-за 
множества  архитектурных  отличий  различных  систем  единого  языка  ассемблера  не 
существует. Каждый разработчик создает свой язык и свое программное обеспечение для 
работы с ним. Все примеры далее написаны на языке ассемблера Atmel AVR Assembler. 

Компилятор  транслирует  исходные  коды  с  языка  ассемблера  в  объектный  код. 

Полученный 

объектный 

может 

быть 

непосредственно 

запрограммирован 

в 

микроконтроллеры AVR.  

4.1. Выражения 

Программа  на  языке  ассемблера  состоит  из  отдельных  строк.  Строка  кода  не 

должна  быть  длиннее  120  символов.  Ассемблер Atmel AVR не  различает  строчные  и 
заглавные буквы. 

Любая  строка  может  начинаться  с  метки,  которая  является  набором  символов, 

заканчивающимся  двоеточием.  Метки  используются  для  указания  места,  в  которое 
передаётся управление при переходах, а также для задания имён переменных. 

Входная строка может иметь одну из четырёх форм:  

º [метка:] директива [операнды] [Комментарий] 
º [метка:] инструкция [операнды] [Комментарий] 
º 

Комментарий 

º 

Пустая строка 

Комментарий имеет следующую форму:  

º ; 

[Текст] 

Позиции в квадратных скобках необязательны. Текст после точки с запятой (;) и до 

конца строки игнорируется компилятором. Метки, инструкции и директивы более детально 
описываются ниже.  

Примеры: 
label: .equ var1=100   ; Устанавливает var1 равным 100 (директива) 
.equ var2=200  

; Устанавливает var2 равным 200  

test: rjmp test 

; Бесконечный цикл (инструкция) 

; Строка с одним только комментарием 
; Ещё одна строка с комментарием 

Компилятор  не  требует,  чтобы  метки,  директивы,  комментарии  или  инструкции 

находились в определённой колонке строки. 

Команды  микроконтроллера  и  директивы  языка  ассемблера  оперируют 

выражениями.  Выражением  считается  набор:  операндов  (operands),  связанных  между 
собой операторами (operators) и функциями (functions).  

О

П Е Р А Н Д Ы

 

Операндами языка ассемблера могут быть: 

 

 

 

 

 

 

 

содержание   ..  6  7  8  9   ..