background image

forum

      

szukaj

      

literatura

      

linki

      

mapa strony

Powrót na stronę główną

ASM IDE

Od czego zacząć? - Co to jest mikrokontroler? - 

Kody i liczby 

Podstawowe układy logiczne - Budowa i działanie AT90S2313 

Zestawy uruchomieniowe - 

Kurs BASCOM-AVR w przyk

Kurs C dla AVR w przykładach - 

Kurs Asemblera dla AVR w 

przykładach - 

Gotowe projekty

Mikrokontrolery

na 

Kurs BASCOM-AVR

Panuje powszechna opinia, Ŝe asembler jest trudny do nauki 
niedawna myślałem. Przeciwnicy pisania programów w asemblerze 
twierdzą, Ŝe przy istniejących językach wysokiego poziomu (BASCOM i 
C)), które przyspieszają proces pisania programu, nie jest to uzasadnione 
ekonomicznie. Zwolennicy natomiast twierdzą, Ŝe tylko w asemblerze da 
się napisać zoptymalizowany np. pod względem zaleŜności czasowych 
program - pisząc to samo w C czy Bascomie nie zawsze da si
zapanować nad kodem wynikowym. KaŜdy ma swoje racje. Nie b
tego wątku tutaj rozwijał gdyŜ wybór zaleŜy od Ciebie, a skoro czytasz 
te słowa to znaczy, Ŝe temat Cię zainteresował.

Kurs asemblera

   Najlepszym argumentem z jakim się spotkałem przemawiaj
nauką asemblera, to ten który przeczytałem na stronie internetowej 

http://www.avr-asm-tutorial.net/

"Assembler or other languages, that is the question. Why should I learn 
another language, if I already learned other programming languages? 
The best argument: while you live in France you are able to get through 
by speaking english, but you will never feel at home then, and life 
remains complicated. You can get through with this, but it is rather 
inappropriate. If things need a hurry, you should use the country's 
language."
 
Tak więc wybór zostawiam Tobie   

Wprowadzenie do języka asembler

 

 
   PoniŜej widnieje spis elementów języka asembler, z któ
zapoznać przed przystąpieniem do praktycznych ćwiczeń 
kliknąć w wybrany odnośnik aby przenieść się do właściwego miejsca.

Co to jest asembler?

  

Elementy języka asembler

  

Dyrektywy

  

Funkcje i operatory w wyraŜeniach

 

  

Instrukcje asemblera

 

  

Lista rozkazów mikrokontrolerów AVR

 

  

do 

Co to jest asembler?
Aby odpowiedzieć na to pytanie najpierw trzeba odpowiedzie
pytanie, co to jest program dla mikrokontrolera.

 [4]

 Program jest to ci

instrukcji danego procesora wykonywanych jeden po drugim w 
określonej przez programistę kolejności. Ciąg ten zapisany w formie 
symbolicznej (czyli z uŜyciem symbolicznych nazw instrukcji) 
stworzony przez programistę nazywa się programem źród
sam program przetworzony przez kompilator do postaci kod
mikroprocesora nazywamy programem binarnym lub programem 
wykonywalnym. Ten podział spowodowany jest tym, Ŝe mikrokontrolery 

Strona 1 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie do...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

nie mogą wykonywać programów źródłowych, poniewaŜ 
ciągu zer i jedynek będących kodami instrukcji. Z drugiej strony 
człowiek nie moŜe poruszać się w programie binarnym, poniewa
dla niego kompletnie nieczytelny. Stosowany do przetwarzania z zapisu 
ź

ródłowego na postać binarną program jest kompilatorem, czyli 

programem tłumaczącym jedną postać na drugą. Dla unikni
problemów z interpretacją zapisów w programach stworzony jest 
specjalny język programowania. Takim językiem jest asembler (jako 
podstawowy i elementarny język programowania). Oprócz asemblera s
stosowane inne języki programowania, wśród których najwi
popularnością cieszy się język C. 
   Język programowania naleŜy uwaŜać za sformalizowany system regu
słuŜących do opisu czynności jakie ma wykonać program. 
Sformalizowanie oznacza jednoznaczne określenie składni j
zdefiniowanie pewnego zbioru słow (w sensie wyrazów) o 
określonym znaczeniu. 
   W programie uŜywa się symbolicznych nazw instrukcji, wskazuje si
poprzez nazwy uŜywane zmienne, miejsca w programie. Ka
(nazwa instrukcji, nazwa zmiennej) występująca w programie musi by
kompilatorowi nazwą znaną (przykładowo wszystkie nazwy 
zdefiniowane w opisie języka). Wprowadzenie przez programist
nowych nazw jest związane z jednoznacznym określeniem jej znaczenia. 
W pewnych sytuacjach uŜycie nowej nazwy musi być poprzedzone jej 
definicją, która informuje kompilator o jej znaczeniu (przyk
być nazwy zdefiniowane dyrektywami .equ.def ). W wielu przypadkach 
dopuszcza się uŜywanie nowych nazw bez ich wcześniejszego okre
(jak nazw etykiet jako miejsc w programie), które muszą by
w obrębie programu. Kompilator po napotkaniu końca programu 
ź

ródłowego sprawdzi, czy wszystkie uŜyte w programie nazwy s

jednoznacznie określone. Jednoznaczność oznacza, Ŝe nie mo
przykładowo w programie umieszczona jakaś etykieta w dw
miejscach. 
   Proces kompilacji (tłumaczenia z przykładowo języka asemblera na 
postać akceptowaną przez mikrokontrolery) moŜe przebiega
sposób (jest kilka programów róŜnych producentów będących 
kompilatorem języka asembler). Kompilator dostarczony przez firm
ATMEL jest programem, który tłumaczy i linkuje program (linkowanie 
programu oznacza określenie adresów wszystkich element
występujących w programie). Wynikiem działania tego kompilatora jest 
gotowy do uruchomienia program. W innych rozwiązaniach 
kompilatorów proces tłumaczenia i linkowania jest rozdzielony. 
Kompilator przetwarzając tekst programu generuje postać 
skompilowaną (postać, w której instrukcje są zamienione na 
odpowiednie kody ale występują jeszcze symboliczne odwo
zmiennych lub procedur). W procesie tworzenia programu dla 
mikrokontrolera występuje dodatkowy składnik, jakim jest oddzielny 
program do linkowania. Linker składa wszystkie fragmenty cz
skompilowane w jedną całość uzupełniając wszystkie wzajemne 
powiązania między występującymi jeszcze nazwami symbolicznymi.
 

do 

Elementy języka asembler

[4] 

Program źródłowy napisany w języku asemblera składa si

   • instrukcji zapisanych w postaci symbolicznej, 
   • etykiet,  

Strona 2 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie do...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

   • dyrektyw, 
   • stałych liczbowych, 
   • napisów oraz nazw zdefiniowanych przez programistę
Ich format zapisu jest określony i jednoznaczny. Jako nazw
szerokim znaczeniu) naleŜy rozumieć kaŜdy zapis, czyli ci
składający się liter, cyfr oraz znaku podkreślenia "_" zaczynaj
litery lub znaku podkreślenia. Stosuje się je do szeroko poj
rozróŜniania wszystkich części składowych programu (nazwy 
zmiennych, procedur, etykiet). Liczby to są zapisy składaj
(oraz liter od "a" do "f" w przypadku liczb w zapisie szesnastkowym). 
Mogą być one zapisane w systemie dziesiętnym, szesnastkowym (hex) 
lub dwójkowym (binarnym). Do rozpoznania systemu zapisu liczb 
uŜywane są pewne prefiksy poprzedzające samą liczbę, są
   • 0x (zero i x) lub znak $ dla liczb zapisanych szesnastkowo,
   • 0b (zero i b) dla liczba zapisywanych dwójkowo. 
JeŜeli liczba nie jest poprzedzona Ŝadnym prefiksem okre
system zapisu, to przyjmowane jest, Ŝe liczba zapisana w systemie 
dziesiętnym. Przykłady liczb: 
   • 10 – liczba w zapisie dziesiętnym, 
   • 255 – liczba w zapisie dziesiętnym, 
   • 0x0A – liczba w zapisie szesnastkowym, 
   • $FF – liczba w zapisie szesnastkowym, 
   • 0b11010011 – liczba w zapisie dwójkowym. 
Napisy są to stałe tekstowe, które zapisywane są jako ciąg dowolnych 
znaków ujęty w apostrofy. KaŜdy znak z napisu jest zamieniany na 
liczbę wynikającą z przyporządkowania znakom określonych kod
liczbowych zgodnie z powszechnie obowiązującą normą ISO.
   Komentarz w języku asemblera zaczyna się od znaku ";" (
obowiązuje do końca wiersza. W komentarzu mogą być zawarte 
dowolne znaki. Kompilator nie analizuje informacji zawartych w 
komentarzu. 
   

[5]

 KaŜda linijka programu moŜe zawierać maksymalnie 120 znak

KaŜda linijka programu napisanego w asemblerze moŜe mie
poniŜszych postaci: 
 
[etykieta:] dyrektywa [argumenty] [komentarz] 
[etykieta:] instrukcja [argumenty] [komentarz] 
komentarz 
pusta linia
 
 
gdzie  [komentarz]  ma postać  ; [tekst] 
 
Przykłady: 
 
   etykieta:   .EQU var1

=

100  

; var1 przyjmuje wartość 100 (dyrektywa)

                    .EQU var2

=

200  

; var2 przyjmuje wartość 200 

   test:          

rjmp

 test           

; nieskończona pętla (instrukcja)

                                              

; linia komentarza

 

 
                                              

; inny komentarz

 

 

do 

Dyrektywy

[4] [5] 

Dyrektywy w języku asembler spełniają dwie funkcje: s

zapisami sterującymi pracą kompilatora oraz definiują dodatkowe 

rezerwuje zasoby w SRAM

BYTE

Strona 3 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie do...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

początek segmentu kodu

CSEG

elementy programu (jak stałe, napisy, makra itp.). RóŜne kompilatory 
przyjmują zapis tych dyrektyw w róŜnej formie. Przykładowo 
kompilator języka asembler związany z programem AVR STUDIO 
wymaga zapisu nazwy dyrektywy ze znakiem kropki bezpo
dyrektywą, kompilatory dostarczane przez firmę IAR wymagaj
zapisu. PoniŜszy opis dotyczy oprogramowania oferowanego przez firm
ATMEL jako oprogramowania bezpłatnego (czyli dyrektywy w zapisie z 
kropką, pisownia małymi lub wielkimi literami na ma znaczenia). Z 
lewej strony widnieje wykaz dyrektyw z krótkim opisem, pe
kaŜdej dyrektywy znajdziesz w pliku pomocy w AVR Studio 
języku angielskim) lub "klikając" w nazwę dyrektywy przejdziesz do 
opisu na tej stronie. 
 
BYTE     
Dyrektywa BYTE rezerwuje zasoby w pamięci SRAM. Mo
uŜywana jedynie w segmencie danych (

DSEG

). BYTE wymaga jednego 

argumentu określającego wielkość rezerwowanych zasobó
zmiennej określonej w etykiecie, która musi poprzedzać dyrektyw
BYTE. Wielkość definiowanej zmiennej moŜe być zapisana w postaci 
wyraŜenia arytmetycznego (w wyraŜeniu mogą wystąpić bezpo
liczby lub

wprowadza stałe 1 bajtowe

DB

nadaje rejestrowi inną nazwę

DEF

określa typ mikrokontrolera

DEVICE

początek segmentu danych

DSEG

wprowadza stałe 2 bajtowe

DW

koniec definicji makroinstrukcji

ENDMACRO

ENDM

definiowanie stałych

EQU

początek segmentu EEPROM

ESEG

koniec kompilacji pliku

EXIT

dołączenie wskazanego pliku

INCLUDE

tworzenie raportu z kompilacji

LIST

raport z kompilacji z makro

LISTMAC

definicja makroinstrukcji

MACRO

wyłączenie raportu z kompilacji

NOLIST

początek adresacji segmentu

ORG

przypisanie wartości wyraŜenia

SET

identyfikatory wcześniej zdefiniowanych stałych liczbowych), kt
wartość musi być wyliczalna przez kompilator. 
 
   Składnia: 
       etykieta:    .BYTE  wyraŜenie 
 
   Przykład: 
       .DSEG 
       RSBufor:     .BYTE  16     

; rezerwuje 16 bajtów dla RSBufor

 
CSEG     
Dyrektywa CSEG oznacza, Ŝe wszystkie dalsze zapisy (instrukcji, 
danych włączonych do kodu itp.) dotyczą pamięci programu (pami
FLASH). Miejsce (w sensie adresowym) umieszczenia generowanego 
przez kompilator kodu wynika z dyrektywy 

ORG

. Kolejne zapisy 

powodują automatyczne zwiększanie adresu. JeŜeli w programie nie 
wystąpi Ŝadna dyrektywa określająca rodzaj segmentu, to kompilator 
wszystko umieści w segmencie CSEG. W obrębie tego segmentu nie 
mogą występować dyrektywy przewidziane do deklaracji zmiennych. 
Brak wystąpienie dyrektywy 

ORG

 implikuje adresację od adresu o 

wartości 0 (zero). Dyrektywa nie zawiera Ŝadnego argumentu.
 
   Składnia: 
       .CSEG 
 
   Przykład: 
       .CSEG 
       Main:     

sbi

 PORTB,0      

; PORTB.0 = 1

 

 
DBDW     
Dyrektywy DB i DW rezerwują zasoby w pamięci programu lub pami
EEPROM. Dyrektywy te muszą być poprzedzone etykietą
argumentów, które mogą być w postaci listy wyraŜeń (co najmniej jedno 
wyraŜenie). Etykieta określa adres inicjowanych zasobów pami

Strona 4 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie do...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

wyraŜenie dla DB to wartość bajtowa, a dla DW dwubajtowa. 
Dyrektywa DB wprowadza stałe o strukturze bajtowej (liczby sta
bajtowe oraz napisy), dyrektywa DW wprowadza stałe o strukturze 
dwubajtowej (liczby stałe 16-bitowe, adresy zmiennych i etykiet 
w programie). W przypadku uŜycia dyrektywy DB naleŜy pami
obszar wprowadzany tą dyrektywą zostanie uzupełniony bajtem 
o wartości zero gdy jego wielkość będzie nieparzysta. W dyrektywach 
tych pod symbolem lista wyraŜeń naleŜy rozumieć listę wyra
rozdzielonych przecinkami. Długie listy stałych w dyrektywach mo
przenosić do następnego wiersza (pamiętając o tym, by przerwa
parzystej liczbie bajtów) poprzez ponowne uŜycie tej samej dyrektywy 
ale bez etykiety (łącznie z dwukropkiem). W przypadku uŜ
dyrektywy DW dodatkowego komentarza wymaga kolejno
umieszczonych bajtów. W pierwszej kolejności zapisany jest bajt b
młodszą częścią stałej oraz następnie bajt będący starszą cz
 
   Składnia: 
       etykieta:    .DB  lista wyraŜeń 
 
   Przykłady: 
       Function:    .DB  0x0D,0x0A,"System kontroli.",0x0D,0x0A
                         .DW  "Wersja sprzętu: 1.00",0x0D,0x0A 
       CodeArr:    .DB  '0' , '1' 
                         .DW  '2' , '3' 
w kaŜdym przypadku lista stałych zawiera parzystą liczbę 
       CmmSrvArr:    .DB  Cmm0Service 
                             .DW  Cmm1Service 
                             .DW  Cmm2Service 
gdzie wszystkie stałe wypisane przy dyrektywie DW są nazwami etykiet 
w programie. 
 
DEF     
Dyrektywa DEF pozwala nadać rejestrowi inną nazwę, któ
moŜna uŜywać w instrukcjach - nadal naleŜy pamiętać, Ŝe wprowadzona 
nazwa tak naprawdę jest rejestrem. 
 
   Składnia: 
       .DEF    definiowana nazwa = symbol rejestru 
 
   Przykład: 
       .DEF    acc = r16 
określa, Ŝe nazwa ‘acc’ występująca jako argument w instrukcji jest 
rejestrem r16. Taki zabieg znacznie zwiększa czytelność programu.
 
DEVICE     
Dyrektywa DEVICE słuŜy do poinformowania kompilatora na jaki 
model mikrokontrolera ma być generowany kod programu. Kompilator 
musi znać tą informację, czyli w kaŜdym programie musi wyst
dyrektywa jeden raz. W programie poprzez dyrektywę INCLUDE 
dołącza się do programu jeden z plików definiujących środowisko 
mikrokontrolera i między innymi zawarta tam jest ta dyrektywa. Te pliki 
definiujące dostarcza producent mikrokontrolerów, dla AT90S2313 taki 
plik ma nazwę 2313def.inc, a znajduje się w przypadku zainstalowanego 
AVR-Studio 4.09 w katalogu C:\Program Files\Atmel\AVR 
Tools\AvrAssembler\Appnotes
 - moŜna sobie pod notatnikiem otworzy

Strona 5 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie do...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

taki plik i przeanalizować wszystkie definicje. 
 
   Składnia: 
       .DEVICE    symbol mikrokontrolera 
 
   Przykład: 
       .DEVICE    AT90S2313 
 
DSEG     
Dyrektywa DSEG oznacza, Ŝe wszystkie dalsze zapisy definiuj
zmienne. Adres, na jakim zostanie umieszczona zmienna mo
zmieniany dyrektywą ORG. Brak dyrektywy 

ORG

 w obszarze 

przewidzianym na zmienne oznacza, Ŝe kompilator zacznie adresowa
od adresu 60 hex. W obrębie segmentu danych nie mogą wyst
zapisy wymuszające określone wartości (np. nie moŜna utworzy
zmiennej, która ma określoną wartość początkową, naleŜy j
jako typową zmienną i w programie zawrzeć instrukcje, kt
tej zmiennej określoną wartość). 
 
   Składnia: 
       .DSEG 
 
   Przykład: 
       .DSEG 
       var:     .BYTE  1 
co oznacza zarezerwowanie jednego bajtu pamięci dla zmiennej 
 
ENDMACROENDM     
Dyrektywa ENDMACRO lub ENDM oznacza koniec definicji 
makroinstrukcji zapoczątkowanej dyrektywą 

MACRO

. Nie wymaga 

Ŝ

adnych argumentów. 

 
   Składnia: 
       .ENDMACRO 
lub 
       .ENDM 
 
   Przykład: 
       .MACRO    ldz     

; początek definicji makroinstrukcji

              .                  

;

 

              .                  

; definicja makroinstrukcji

 

              .                  

;

 

       .ENDMACRO       

; koniec definicji makroinstrukcji

 

 
EQU     
Dyrektywa słuŜy do definiowania stałych, przydziela ona jakiemu
identyfikatorowi (nazwie) określoną wartość (moŜe to być
która moŜe być później uŜyta w jakimś wyraŜeniu. Tak zdefiniowana 
stała nie moŜe być zmieniana czy teŜ redefiniowana. 
 
   Składnia: 
       .EQU    nazwa = wyraŜenie 
 
   Przykład: 
       .EQU    x1 = 'x' 

Strona 6 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie do...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

       .EQU    x2 = 145 
W powyŜszych przykładach przyporządkowana jest identyfikatorowi 
taka wartość bitowa, która odpowiada małej literze x, w drugim 
przypadku identyfikator x2 ma wartość liczbową 145. 
 
ESEG     
Dyrektywa ESEG oznacza, Ŝe wszystkie dalsze zapisy odnosz
pamięci EEPROM. W segmencie zapoczątkowanym przez dyrektyw
ESEG znajdują się tylko dyrektywy 

DB

 i 

DW

. Adresacja zmiennych jest 

określona przez dyrektywę 

ORG

 (brak specyfikacji ORG w obr

pamięci EEPROM oznacza wartość początkowa równą zero). W tym 
segmencie moŜliwe jest, oprócz powołania do istnienia zmiennej, 
nadanie jej określonej wartości początkowej. W strukturze postaci 
wynikowej programu (najczęściej w formacie heksadecymalnym) jest 
przewidziane na to miejsce i programator (w trakcie programowania 
mikrokontrolera) umieści w tej pamięci określone wartości pocz
Nie oznacza to jednak, Ŝe program w czasie pracy nie moŜ
wartości tych zmiennych. KaŜde następne uruchomienie programu w 
zmiennych tych będzie zawierać wartość ostatnio zapisaną
same nigdy nie zmienią swej wartości).  
 
   Składnia: 
       .ESEG 
 
   Przykład: 
       .ESEG 
       CodeArr:    .DB  '0' , '1' 
 
EXIT     
Dyrektywa EXIT oznacza zakończenie kompilacji z danego pliku. 
Podczas normalnej pracy kompilacja trwa do końca pliku je
dołączonym przez dyrektywę 

INCLUDE

 pliku pojawi się 

EXIT to kompilator zakończy kompilację dołączonego pliku i b
kontynuował pracę od linii następnej po dyrektywie 

INCLUDE

 
   Składnia: 
       .EXIT 
 
   Przykład: 
       .EXIT                  

; koniec kompilacji

 

 
INCLUDE     
Dyrektywa INCLUDE włącza do kompilacji wskazany plik. Kompilacja 
trwa do końca pliku lub do napotkania dyrektywy 

EXIT

. Do

przez dyrektywę INCLUDE plik równieŜ moŜe zawierać dyrektywy 
INCLUDE. Nazwa dołączanego pliku powinna być umieszczona mi
znakami " ". 
 
   Składnia: 
       .INCLUDE    "nazwa pliku " 
 
   Przykład: 
       .INCLUDE    "2313def.inc"         

; dołączenie pliku definiuj

                                                        ; mikrokontroler AT90S2313

 

Strona 7 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie do...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

LIST     
Dyrektywa LIST informuje kompilator o konieczności stworzenia 
raportu z kompilacji.  
 
   Składnia: 
       .LIST 
 
   Przykład: 
       .NOLIST                                     

; wyłączenie raportu z kompilacji

       .INCLUDE    "2313def.inc"         

; dołączenie pliku

 

       .LIST                                          

; ponowne załączenie raportu

                                                         ; z kompilacji 

 
LISTMAC     
Dyrektywa LISTMAC informuje kompilator o koniecznoś
do raportu z kompilacji informacji z kompilacji makroinstrukcji. 
 
   Składnia: 
       .LIST 
 
   Przykład: 
       .NOLIST                                     

; wyłączenie raportu z kompilacji

       .INCLUDE    "2313def.inc"         

; dołączenie pliku

 

       .LIST                                          

; ponowne załączenie raportu

       .LISTMAC                                   

; dołączenie informacji

                                                         ; o makroinstrukcji 

 
MACRO     
Dyrektywa MACRO oznacza początek definicji makroinstrukcji. 
Dyrektywa wymaga argumentu w postaci nazwy makroinstrukcji.
 
   Składnia: 
       .MACRO    nazwa makroinstrukcji 
 
   Przykład: 
       .MACRO    ldz                         

; początek definicji makroinstrukcji

                       

ldi

  r30, low(@0) 

                       

ldi

  r31, high(@0) 

       .ENDMACRO                           

; koniec definicji makroinstrukcji

Przy okazji warto zauwaŜyć, Ŝe makroinstrukcje mogą zawiera
parametry. Wyjaśnia to pojawienie się w powyŜszym przyk
tajemniczego zapisu low(@0) czy high(@0). Dla przypomnienia: @0 
oznacza pierwszy parametr, @9 oznacza dziesiąty parametr. Liczba 
parametrów makroinstrukcji jest limitowana do 10. 
 
NOLIST     
Dyrektywa NOLIST informuje kompilator o konieczności wy
raportu z kompilacji.  
 
   Składnia: 
       .NOLIST 
 
   Przykład: 
       .NOLIST                                     

; wyłączenie z raportu z kompilacji

Strona 8 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie do...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

       .INCLUDE    "2313def.inc"         

; dołączonego pliku 

AT90S2313def.inc

 

 
ORG     
Dyrektywa ORG słuŜy do określenia miejsca (w sensie adresu), gdzie 
kompilator rozpocznie umieszczanie generowanych bajtów (je
dyrektywa ORG jest uŜyta w obrębie 

CSEG

) lub określa pocz

adresacji przyszłych zmiennych (jeŜeli dyrektywa jest uŜyta w obr

DSEG

). Dyrektywa ta wymaga uŜycia argumentu w postaci wyra

określającego adres. W obrębie segmentu kodu programu dyrektywa 
uŜywana jest do "usztywnienia" ściśle określonych miejsc w programie 
(głównie do wskazania początków obsługi przerwań, na kt
jest ściśle określona w adresacji programu). W segmencie danych 
(DSEG) dyrektywy tej moŜna uŜyć do "poinformowania" kompilatora 
asemblera o uŜyciu przykładowo dodatkowej pamięci RAM 
przyłączonej na zewnątrz (przykładowo mikrokontroler AT90S8515 
moŜe obsługiwać zewnętrzną pamięć). 
 
   Składnia: 
       .ORG    wyraŜenie 
   gdzie wyraŜenie wskazuje adres w pamięci 
 
   Przykład: 
       .DSEG 
       Int_RAM_Variable1:    .BYTE  1 
       Int_RAM_Variable2:    .BYTE  1 
              . 
              . 
              . 
       .ORG    0x8000 
       Ext_RAM_Variable1:    .BYTE  1 
       Ext_RAM_Variable2:    .BYTE  1 
Zgłoszenie dyrektywą DSEG (jeŜeli jest pierwsze) oznacza, 
zmienne (Int_RAM_Variable1 i kolejne) będą umieszczane w pami
wewnętrznej RAM poczynając od adresu 60 hex. UŜycie dyrektywy 
ORG spowodowało przestawienie pozycji, na jakiej będą 
zmienne na adres 8000 hex. Kompilator będzie nadawał kolejnym 
zmiennym adresy z przestrzeni zewnętrznej pamięci RAM. U
zewnętrznych pamięci RAM (dotyczy to wszystkich dołączanych na 
zewnątrz pamięci i portów) naleŜy pamiętać, Ŝe w przypadku 
zbudowania dekodera adresowego o niepełnym dekodowaniu, mo
okazać się, Ŝe pewne komórki są umieszczone w przestrzeni adresowej 
wielokrotnie. 
 
SET     
Dyrektywa SET przypisuje wartość wyraŜenia jakiemuś 
identyfikatorowi. Identyfikator moŜe być później uŜyty w jakim
wyraŜeniu. 
 
   Składnia: 
       .SET    nazwa = wyraŜenie 
 
   Przykład: 
       .SET    io_offset = 0x23 
       .SET    portA = io_offset + 2 

Strona 9 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie do...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

 

do 

Funkcje i operatory w wyraŜeniach

[4] 

W zapisach instrukcji i dyrektyw języka asembler mog

wyraŜenia, które w swoim zapisie mogą uŜywać funkcji. 
 
Wśród dopuszczalnych funkcji są następujące: 
   • LOW(wyraŜenie) - funkcja, której wynikiem jest najm
(bity 
      od b0 do b7) wartości wyraŜenia - przykładowo LOW(0x1234) daje
      w wyniku liczbę $34 (zapis szesnastkowy), 
   • HIGH(wyraŜenie) - funkcja, której wynikiem jest drugi bajt (bity od 
b8 
      do b15) wartości wyraŜenia - przykładowo HIGH(0x1234) daje
      w wyniku liczbę $12, 
   • BYTE2(wyraŜenie) - funkcja toŜsama z funkcją HIGH,
   • BYTE3(wyraŜenie) - funkcja, której wynikiem jest trzeci bajt (bity 
od 
      b16 do b23) wartości wyraŜenia - przykładowo BYTE3(0x654321) 
daje 
      w wyniku liczbę $65, 
   • BYTE4(wyraŜenie) - funkcja, której wynikiem jest czwarty bajt (bity 
od 
      b24 do b31) wartości wyraŜenia - przykładowo BYTE4(0x87654321
      daje w wyniku liczbę $87, 
   • LWRD(wyraŜenie) - funkcja, której wynikiem jest młodsze s
      dwubajtowe (bity od b0 do b15) wartości wyraŜenia, 
   • HWRD(wyraŜenie) - funkcja, której wynikiem jest starsze s
      dwubajtowe (bity od b16 do b31) wartości wyraŜenia,
   • PAGE(wyraŜenie) - funkcja, której wynikiem jest liczba b
kodem 
      strony (bity od b16 do b21) wartości wyraŜenia, 
   • EXP2(wyraŜenie) - funkcja, której wynikiem jest liczba b
      odpowiednią potęgą liczby 2 (2 do potęgi wartość wyra
   • LOG2(wyraŜenie) - funkcja, której wynikiem jest liczba b
częścią 
      całkowitą logarytmu przy podstawie 2 z wartości wyra
 

Operatory mogące występować w wyraŜeniach:

Symbol

Funkcja

Znaczenie

!

Logiczny operator 
negacji

Jednoargumentowy operator 
zwracający wartość 1 jeŜ
wyraŜenia jest równa zero; w 
przeciwnym wypadku zwracana jest 
wartość 0

~

Bitowy operator 
negacji

Jednoargumentowy operator 
zwracający wartość zanegowan
logicznie (odwrócone wszystkie bity)

-

Operator minus

Jednoargumentowy operator 
zwracający wartość z arytmetycznie 
zmienionym znakiem

*

Operator mnoŜenia

Dwuargumentowy operator zwracaj
wartość arytmetycznego iloczynu

Strona 10 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

/

Operator dzielenia

Dwuargumentowy operator zwracaj
wartość arytmetycznego ilorazu (cz
całkowitą)

+

Operator sumowania Dwuargumentowy operator zwracaj

wartość arytmetycznej sumy

-

Operator 
odejmowania

Dwuargumentowy operator zwracaj
wartość arytmetycznej róŜ

<<

Operator 
przesunięcia w lewo

Dwuargumentowy operator zwracaj
wartość będącą wynikiem przesuni
w lewo (ilość pozycji o ile nale
przesunąć jest drugim argumentem)

>>

Operator 
przesunięcia w 
prawo

Dwuargumentowy operator zwracaj
wartość będącą wynikiem przesuni
w prawo (ilość pozycji o ile nale
przesunąć jest drugim argumentem)

<

Operator 
porównania 
(mniejsze)

Dwuargumentowy operator zwracaj
1 jeŜeli wartość wyraŜenia po lewej 
stronie jest mniejsza niŜ warto
wyraŜenia po prawej stronie; w 
przeciwnym wypadku zwracana jest 
wartość 0

<=

Operator 
porównania 
(mniejsze lub 
równe)

Dwuargumentowy operator zwracaj
1 jeŜeli wartość wyraŜenia po lewej 
stronie jest mniejsza lub r
wartość wyraŜenia po prawej stronie; w 
przeciwnym wypadku zwracana jest 
wartość 0

>

Operator 
porównania 
(większe)

Dwuargumentowy operator zwracaj
1 jeŜeli wartość wyraŜenia po lewej 
stronie jest większa niŜ warto
wyraŜenia po prawej stronie; w 
przeciwnym wypadku zwracana jest 
wartość 0

>=

Operator 
porównania 
(większe lub równe)

Dwuargumentowy operator zwracaj
1 jeŜeli wartość wyraŜenia po lewej 
stronie jest większa lub r
wartość wyraŜenia po prawej stronie; w 
przeciwnym wypadku zwracana jest 
wartość 0

==

Operator 
porównania (równe)

Dwuargumentowy operator zwracaj
1 jeŜeli wartość wyraŜenia po lewej 
stronie jest równa z warto
wyraŜenia po prawej stronie; w 
przeciwnym wypadku zwracana jest 
wartość 0

!=

Operator 
porównania (nie 
równe)

Dwuargumentowy operator zwracaj
1 jeŜeli wartość wyraŜenia po lewej 
stronie nie jest równa z warto
wyraŜenia po prawej stronie; w 
przeciwnym wypadku zwracana jest 
wartość 0

Strona 11 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

&

Operator logicznego 
iloczynu

Dwuargumentowy operator zwracaj
wartość logicznego iloczynu (logiczne 
and)

^

Operator logicznej 
exclusive or

Dwuargumentowy operator zwracaj
wartość logicznej sumy 

|

Operator logicznej 
sumy

Dwuargumentowy operator zwracaj
wartość logicznej sumy (logiczne or)

 
 
   W ogólnym wypadku w wyraŜeniu mogą występować wcze
zdefiniowane stałe oraz zmienna (jedna). NaleŜy pamiętać
zmiennej występującej w wyraŜeniu jest jej adres (nie zawarto
Przykłady uŜycia funkcji: 
 
.equ x1  

=  exp2(eewe)

; eewe jest stałą o warto
; 1 (zobacz bity rejestru
; sterującego pracą EEPROM)

.equ x2  

=  0x02

 
oba powyŜsze zapisy w sumie dają tę samą wartość; 
 

 

ldi

r16,low((var<<1)+7+x2)

 

 
powyŜszy zapis oznacza, Ŝe do rejestru r16 naleŜy wpisać 
młodszą częścią z wyraŜenia - adres zmiennej var naleŜy przesun
w lewo o jedną pozycję do tego dodać stałą o wartości 7 i wynik 
wyraŜenia x2; 
 

 

ldi

r16,!0xf0

 

 
wpisz do rejestru r16 stałą o wartości 0 - wartość wyraŜenia !0xf0 jest 
równa 0 
 

 

ldi

r16,~0xf0

 

 
wpisz do rejestru r16 stałą o wartości 0x0f - wartość wyra
jest równa 0x0f; 
 

 

ldi

r16,-1

 

 
wpisz do rejestru r16 stałą o wartości 0xff - wartość wyraŜ
słowa jednobajtowego wynosi 0xff; 
 

 

ldi

r16,eewe+eemwe

 

 
wpisz do rejestru r16 stałą o wartości 3 (wartość eewe=1 i eemwe=2);
 

 

ldi

r16,(1<<eewe)+(1<<eemwe)

 
wpisz do rejestru r16 stałą o wartości 0x06 (wartość (1<<eewe)=0x02 
i (1<<eemwe)=0x04 co w sumie daje 0x06); 
 

 

ldi

r16,(1<<eewe)&(1<<eemwe)

Strona 12 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

 
wpisz do rejestru r16 stałą o wartości 0 (wartość (1<<eewe)=0x02 
i (1<<eemwe)=0x04 co w iloczynie logicznym daje wynik r
 

do 

Instrukcje asemblera

[4] 

Instrukcje języka asembler stanowią symboliczny zapis ich kod

wraz z ewentualnymi jej operandami (argumentami). 
Instrukcje w ogólnym przypadku mają następujący zapis: 
 
etykieta:

instrukcja

[argumenty]

;komentarz

 
Gdzie występujące w zapisie elementy mają następujące znaczenie:
   • etykieta jest symbolicznym określeniem miejsca w programie
      (przykładowo jako miejsca, do którego moŜe być wykonany skok)
      kompilator tłumacząc program z języka asembler na posta
      przyporządkowuje etykiecie określoną wartość liczbow
      adresem, etykieta nie jest obowiązkowym elementem w zapisie
      instrukcji, 
   • instrukcja (wraz z jej ewentualnym lub ewentualnymi operandami)
      jest symbolicznym zapisem kodu instrukcji, jaka ma by
      miejscu wykonana przez mikrokontroler, w przypadku u
      wcześniej zdefiniowanej makroinstrukcji kompilator zamieni j
ciąg, 
      instrukcji mikrokontrolera zgodnie z jej definicją, 
   • komentarz jako dowolny ciąg znaków zaczynający się 
      średnika ";" nie jest analizowany przez kompilator, programista 
moŜe 
      w komentarzu zawrzeć dowolne swoje uwagi lub notatki,
      komentarz obowiązuje do końca wiersza. 
 
   W instrukcji (łącznie z makroinstrukcją) mogą występowa
przewidziane dla danej instrukcji. W niektórych instrukcjach operandem 
jest symboliczne oznaczenie rejestru roboczego (od R0 do R31). Istnieje 
grupa instrukcji, w której operand jest symbolicznym odwo
zmiennej. Zmienne są identyfikowane przez swój adres (jako liczba 
określająca jej połoŜenie w przestrzeni pamięci RAM). W og
przypadku jako adres zmiennej moŜe być uŜyte dowolne wyra
arytmetyczne z uŜyciem jej adresu (tylko jednej zmiennej).
Przykłady: 
 

.dseg

 

;

variable:

.byte

1

; zmienna o nazwie variable

; o wielkości jednego bajtu o jakimś adresie (obliczonym przez 
kompilator) 
; wynikającym z wszystkich dotychczas występujących zmiennych oraz
; z ewentualnego uŜycia dyrektywy .org 
 

 

.cseg

 

;

 

lds

r16,variable

; ta instrukcja spowoduje

; przepisanie bajtu z pamięci RAM o adresie symbolicznym variable
; (kompilator wstawi do generowanego kodu liczbę będąc
rzeczywistym 
; adresem zmiennej w pamięci) rejestru o symbolicznej nazwie r16
 

 

ldi

r16,low(variable)

; ta instrukcja oznacza wpisanie

Strona 13 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

; do rejestru r16 liczby będącej młodszą częścią adresu zmiennej variable
 

 

ldi

r16,high(variable)

; ta instrukcja oznacza wpisanie

; do rejestru r16 liczby będącej starszą częścią adresu zmiennej variable
 

   Teraz pozostało jeszcze zapoznać się z listą rozkazów 
mikrokontrolerów AVR i moŜna przystąpić do pisania 

pierwszego 

programu w asemblerze

 

do 

Lista instrukcji (rozkazów) mikrokontrolerów AVR
Przedstawiona tutaj lista instrukcji i komentarz wprowadzaj
zostały opracowane na podstawie materiałów zawartych w karcie 
katalogowej AT90S2313 i w ksiąŜkach "Mikrokontrolery AVR 
w praktyce" 

[1]

, "Mikrokontrolery rodziny AVR - AT90S2313" 

materiałów jakie otrzymałem od Gawła 

[4] 

. Pełny opis rozkaz

z odpowiednimi przykładami zastosowania moŜna znaleźć
stronach wyŜej wymienionej ksiąŜki J. Dolińskiego "Mikrokontrolery 
AVR w praktyce" 

[1]

 - polecam. 

Listę instrukcji języka asembler mikrokontrolerów z rodziny AVR 
moŜna podzielić na następujące grupy: 

   • instrukcje arytmetyczne i logiczne

 

   • instrukcje skoków

 

   • instrukcje przesyłania danych

 

   • instrukcje operacji bitowych

 

   • instrukcje kontroli pracy jednostki centralnej (MCU)

 

W grupie instrukcji arytmetycznych znajdują się wszystkie instrukcje 
dodawania oraz dodawania z przeniesieniem, instrukcje odejmowania 
oraz odejmowania z przeniesieniem, instrukcje sumy logicznej 
"lub" (ang. or), instrukcje iloczynu logicznego "i" (ang. and)
symbolem &, sumy logicznej "albo" (ang. exclusive or) oznaczanej 
symbolem 

, instrukcje negacji logicznej (ang. not) instrukcji mno

arytmetycznego, instrukcje zwiększania i zmniejszania o jeden. W 
grupie instrukcji skoków moŜna wyróŜnić instrukcje skok
bezwarunkowych oraz skoków warunkowych. Instrukcje skok
bezwarunkowych to takie instrukcje, w których sterowanie w programie 
zostaje przeniesione w nowe miejsce bezwarunkowo. Instrukcje skok
warunkowych, to takie instrukcje, w których sterowanie w programie 
zostanie przeniesione w nowe miejsce tylko w pewnych ści
określonych warunkach, jeŜeli warunek nie jest spełniony wykonanie 
programu przechodzi do następnej instrukcji. Do instrukcji skoku nale
jeszcze zaliczyć instrukcje wywołania procedury oraz instrukcje powrotu 
z procedury. Specyfiką instrukcji wywołania procedury jest to, 
instrukcja przed wykonaniem skoku (lista instrukcji procesor
rodziny AVR nie zawiera instrukcji warunkowego wywoł
procedury) zawsze zapamiętuje miejsce powrotu. Instrukcja powrotu z 
procedury jest instrukcją skoku bezwarunkowego do miejsca 
zapamiętanego przez instrukcję wywołania. W obrębie grupy instrukcji 
przesyłania danych występują instrukcje, których zadaniem jest 
przesyłanie zawartości określonych rejestrów do innych rejestr
wymiany danych pomiędzy rejestrami roboczymi i wewnę
RAM oraz zewnętrzną pamięcią RAM (jeŜeli dany model 
mikrokontrolera ma takie moŜliwości techniczne). Do instrukcji 
operujących na bitach naleŜą instrukcje pozwalające modyfikowa

 
 

Znaczenie symboli z tabeli instrukcji 

 

Rejestr źródła lub rejestr przeznaczenia 
(R30...R31)

-

Rd

Rejestr źródła (R30...R31)

-

Rs

Rejestr górny (R16...R31)

-

Rh

Rejestr przeznaczenia z zakresu 
rejestrów górnych

-

Rhd

Rejestr źródła z zakresu rejestrów 
górnych

-

Rhs

Rejestr środkowy (R16...R23)

-

Rm

Rejestr przeznaczenia z zakresu 
rejestrów środkowych

-

Rmd

Rejestr źródła z zakresu rejestrów 
ś

rodkowych

-

Rms

Para rejestrów 
(r24=R25:R24, r27=R27:R26, 
r28=R29:R28, r30=R31:R30)

-

RR

Rejestry indeksowe (X=R27:R26, 
Y=R29:R28, Z=R31:R30)

-

Rxyz

Rejestry indeksowe z przemieszczeniem 
(Y=R29:R28, Z=R31:R30)

-

Ry

Stała wskaźnikowa (0...63)

-

c63

Stała uŜywana jako parametr 
określający zakres skoku warunkowego 
(-64...63)

-

c127

Stała 8-bitowa (0...255)

-

c255

Stała uŜywana jako parametr 
określający zakres skoku względnego (-
512...511)

-

c1024

Stała określająca 16-bitowy adres 
(0...65535)

-

adr

Stała określająca względne 
przemieszczenie w obrębie ±2k

-

adr2k

Stała określająca 16-bitowy adres

-

adr64k

Stała określająca 16-bitowy adres 
(0...$FFFF) w obrębie bieŜącego 
segmentu

-

adr65635

Stała określająca 22-bitowy adres 
(0...$3FFFFF)

-

adr4M

Pozycja bitu (0...7)

-

b

Numer portu (rejestru) naleŜącego do 
obszaru we/wy (0...63=$00...$3F)

-

P

Adres portu (rejestru) naleŜącego do 
dolnej strony obszaru we/wy 
(0...31=$00...$1F)

-

Pl

Dodawanie arytmetyczne

-

+

Odejmowanie arytmetyczne

-

Suma logiczna

-

∨∨∨∨

Iloczyn logiczny

-

∧∧∧∧

Strona 14 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

Suma modulo 2 (Ex-OR)

-

Zawartość 8-bit. rejestru Ri

-

Ri

Zawartość 16-bitowego rejestru 
złoŜonego z rejestrów Rj (starszy) i Ri 
(młodszy)

-

Rj:Ri

Komórka pamięci adresowana przez 
rejestr Ri

-

(Ri)

Bit b rejestru Ri

-

Ri(b)

Bity od i do j rejestru Rk, np. R1(3...0) - 
młodsze 4 bity rejestru R1

-

Rk(j...i)

Implikacja logiczna 
(jeŜeli a, to b)

-

a => b

Przypisanie b do a 
(np. wpisanie wartości b do rejestru a)

-

 b

Flaga ustawiana zgodnie z wynikiem 
operacji

-

Flaga zerowana ("0")

-

0

Flaga ustawiana ("1")

-

1

Flaga pozostaje bez zmian

-

pojedynczych bitów, instrukcje przesunięć logicznych i cyklicznych. W 
grupie instrukcji kontroli pracy mikrokontrolera jest instrukcja pusta, 
instrukcja zerowania watchdoga i instrukcje sterujące przej
stanów obniŜonego poboru prądu. Przed omówieniem poszczeg
instrukcji niezbędne jest wyjaśnienie kilku istotnych pojęć
takich jest operand instrukcji, czyli określenie zasobu jaki bierze udzia
w wykonaniu instrukcji (przykładowo wskazanie na rejestr z puli 
wszystkich rejestrów) lub szeroko rozumiana stała (stała jako adres 
skoku, stała jako wartość do wpisania do rejestru). 
   W tabeli prezentującej instrukcje uŜyte są symbole operand
znaczenie jest wyjaśnione obok. Skróty te i ich opis pochodz
"Mikrokontrolery AVR w praktyce", zdecydowałem się na to zamiast 
uŜycia przyjętej symboliki w kartach katalogowych gdyŜ 
swoim zapisie od razu przeznaczenie i zasięg działania. Szczeg
uwagę naleŜy zwrócić na przyjęte oznaczenie rejestrów. Wynikaj
ich ograniczonego zasięgu działania. Obok zostały równie
przyjęte zapisy symboliczne uŜywane w opisie rozkazów jak r
oznaczenie zachowania się znaczników (flag) po wykonaniu rozkazu.
   Ze względu na to, Ŝe działanie rozkazów mikrokontrolera (
silnie związane z jego architekturą, wszystkie wątpliwości nale
wyjaśniać posługując się odpowiednimi kartami katalogowymi dla 
danego µC. 
W µC moŜna wyróŜnić trzy rejestry, które maja wpływ na przebieg 
programu, są to: 
   • 16-bitowy rejestr PC - licznik programu (ang. Program Counter
       zawierający adres pamięci programu, spod którego jest pobierany
       kod rozkazu wykonywanego w kolejnym kroku, 
   • 8-bitowy (dla AT90S2313) lub 16-bitowy rejestr wska
SP 
       (ang. Stack Pointer), zawierający adres pamięci SRAM, pod kt
       będzie zapisywany np. adres powrotu z podprogramu (adres
       następnego rozkazu po rozkazie wywołania podprogramu),
   • 8-bitowy rejestr znaczników (flag) - SREG (ang. Status Register)
       zawierający znaczniki mogące mieć wpływ na przebieg programu
       (wykorzystywane np. w rozkazach skoków warunkowych).
Ze względu na szczególne znaczenie tych rejestrów w opisie rozkaz
uwzględniony został sposób ich modyfikacji przez poszczeg
rozkazy. 
   PoniŜej przedstawione są w tabelach poszczególne grupy rozkaz
(instrukcji). Na pytanie czy warto się uczyć tej listy rozkaz
odpowiedzieć w dwojaki sposób. Tak, poniewaŜ wpływa to na pisanie 
programów w sposób zapewniający optymalne wykorzystanie zasob
mikrokontrolera. Nie, bo asembler w swojej "czystej" postaci jest coraz 
mniej wykorzystywany ustępując językom wysokiego poziomu takim 
jak C czy Bascom. Jednak wszystkim, którzy zaczynają swoj
z AVRami polecam zapoznanie się z ich listą rozkazów, poniewa
ułatwia to zrozumienie budowy i działania mikrokontrolera.
   W poniŜszych tabelach wiersze zaznaczone tłem róŜowym oznaczaj
Ŝ

e opisywany rozkaz nie jest zaimplementowany w AT90S2313 (mo

dotyczyć to takŜe innych mikrokontrolerów), tło szare świadczy o tym, 
Ŝ

e dany rozkaz nie jest zaimplementowany we wszystkich 

mikrokontrolerach. Szczegółowo jest to wyjaśnione w kartach 
katalogowych. 
 

Strona 15 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

Instrukcje arytmetyczne i logiczne 

[1][6]

 

Mnemonika

 

Operandy

 

Opis

 

Operacje

ADD

Rd

,

Rs

Dodaj zawartość dwóch rejestrów

Rd 

 Rd + Rs

Z,C,N,V,H,S

ADC

Rd

,

Rs

Dodaj zawartość dwóch rejestrów 
z przeniesieniem

Rd 

 Rd + Rs + C

Z,C,N,V,H,S

ADIW

RR

,

c63

Dodaj bezpośrednio stałą do słowa

RRh:RRl 

 RRh:RRl + c63 Z,C,N,V,S

SUB

Rd

,

Rs

Odejmij zawartość dwóch rejestrów

Rd 

 Rd - Rs

Z,C,N,V,H,S

SUBI

Rh

,

c255

Odejmij stałą od zawartości rejestru

Rh 

 Rh - c255

Z,C,N,V,H,S

SBIW

RR

,

c63

Odejmij bezpośrednio stałą do słowa

RRh:RRl 

 RRh:RRl - c63 Z,C,N,V,S

SBC

Rd

,

Rs

Odejmij zawartość dwóch rejestrów 
z przeniesieniem

Rd 

 Rd - Rs - C

Z,C,N,V,H,S

SBCI

Rh

,

c255

Odejmij stałą z przeniesieniem od 
zawartości rejestru

Rh 

 Rh - c255 - C

Z,C,N,V,H,S

AND

Rd

,

Rs

Iloczyn logiczny zawartości rejestrów

Rd 

 Rd 

 Rs

Z,N,V,S

ANDI

Rh

,

c255

Iloczyn logiczny zawartości rejestru i 
stałej

Rh 

 Rh 

 c255

Z,N,V,S

OR

Rd

,

Rs

Suma logiczna zawartości rejestrów

Rd 

 Rd 

 Rs

Z,N,V,S

ORI

Rh

,

c255

Suma logiczna zawartości rejestru i stałej

Rh 

 Rh 

 c255

Z,N,V,S

EOR

Rd

,

Rs

Suma Exclusive OR zawartości rejestrów

Rd 

 Rd 

 Rs

Z,N,V,S

COM

Rd

Uzupełnienie do jedności (negacja bitów)

Rd 

 $FF - Rd

Z,C,N,V,S

NEG

Rd

Uzupełnienie do dwóch

Rd 

 $00 - Rd

Z,C,N,V,H,S

SBR

Rh

,

c255

Ustaw bity(y) w rejestrze

Rh 

 Rh 

 c255

Z,N,V,S

CBR

Rh

,

c255

Zeruj bit(y) w rejestrze

Rh 

 Rh 

 c255

Z,N,V,S

INC

Rd

Zwiększ o 1 zawartość rejestru

Rd 

 Rd + 1

Z,N,V,S

DEC

Rd

Zmniejsz o 1 zawartość rejestru

Rd 

 Rd - 1

Z,N,V,S

TST

Rd

Sprawdź zero lub minus

Rd 

 Rd 

 Rd

Z,N,V,S

CLR

Rd

Zeruj wszystkie bity rejestru

Rd 

 Rd 

 Rd

Z,N,V,S

SER

Rh

Ustaw wszystkie bity rejestru

Rh 

 $FF

MUL

Rd

,

Rs

MnoŜenie bez znaku zawartości rejestrów R1:R0 

 Rd · Rs

Z,C

MULS

Rhd

,

Rhs

MnoŜenie ze znakiem zawartości 
rejestrów

R1:R0 

 Rhd · Rhs

Z,C

MULSU

Rhd

,

Rhs

MnoŜenie zawartości rejestrów (jeden ze 
znakiem, drugi bez znaku)

R1:R0 

 Rhd · Rhs

Z,C

FMUL

Rd

,

Rs

MnoŜenie liczb ułamkowych bez znaku

R1:R0 

 (Rd · Rs) << 1

Z,C

FMULS

Rd

,

Rs

MnoŜenie liczb ułamkowych ze znakiem

R1:R0 

 (Rd · Rs) << 1

Z,C

FMULSU

Rd

,

Rs

MnoŜenie liczby ułamkowej ze znakiem z 
liczbą ułamkową bez znaku

R1:R0 

 (Rd · Rs) << 1

Z,C

Instrukcje skoków 

[1][6]

 

Mnemonika

 

Operandy

 

Opis

 

Operacje

Strona 16 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

RJMP

adr2k

Skok względny

PC 

 PC + adr2k + 1

IJMP

 

Skok pośredni określony zawartością 
rejestru indeksowego Z

PC 

 Z

EIJMP

 

Rozszerzony skok pośredni określony 
zawartością rejestru indeksowego Z

PC(15...0)) 

 Z 

PC(21...16)) 

 EIND

JMP

adr4M

Skok bezpośredni

PC 

 adr4M

RCALL

c1024

Względne wywołanie podprogramu

(SPL) 

 PC + 1 

SPL 

 SPL - 2 

PC 

 PC + 1024 + 1

ICALL

 

Pośrednie wywołanie podprogramu 
określone zawartością rejestru 
indeksowego Z

(SPL) 

 PC + 1 

SPL 

 SPL - 2 

PC 

 Z

EICALL

 

Rozszerzone, pośrednie wywołanie 
podprogramu określone zawartością 
rejestru Z oraz EIND

(SPL) 

 PC + 1 

SPL 

 SPL - 3 

PC(15...0) 

 Z 

PC(21...16) 

 EIND

CALL

adr4M

Rozszerzone, pośrednie wywołanie 
podprogramu określone zawartością 
rejestru Z oraz EIND

(SPL) 

 PC + 1 

SPL 

 SPL - 3 

PC(15...0) 

 Z 

PC(21...16) 

 EIND

RET

 

Powrót z podprogramu

PC 

 (SPL) 

SPL 

 SPL + 2

RETI

 

Powrót z procedury obsługi przerwania

PC 

 (SPL) 

SPL 

 SPL + 2

I

CPSE

Rd

,

Rs

Porównaj, skocz jeśli równe

(Rd=Rs) 

=>

 PC 

 PC + 2 

lub 3

CP

Rd

,

Rs

Porównaj zawartość rejestrów

Rd - Rs

Z,C,N,V,H,S

CPC

Rd

,

Rs

Porównaj zawartość rejestrów z 
przeniesieniem

Rd - Rs - C

Z,C,N,V,H,S

CPI

Rh

,

c255

Porównaj zawartość rejestru ze stałą

Rh - c255

Z,C,N,V,H,S

SBRC

Rs

,

b

Przeskocz jeśli bit w rejestrze jest 
wyzerowany

Rs(b) = 0 => PC 

 PC + 2 

Rs(b) = 1 => PC 

 PC + 1

SBRS

Rs

,

b

Przeskocz jeśli bit w rejestrze jest 
ustawiony

Rs(b) = 1 => PC 

 PC + 2 

Rs(b) = 0 => PC 

 PC + 1

SBIC

Pl

,

b

Przeskocz jeśli bit w rejestrze we/wy jest 
wyzerowany

Pl(b) = 0 => PC 

 PC + 2 

Pl(b) = 1 => PC 

 PC + 1

SBIS

Pl

,

b

Przeskocz jeśli bit w rejestrze we/wy jest 
ustawiony

Pl(b) = 1 => PC 

 PC + 2 

Pl(b) = 0 => PC 

 PC + 1

BRBS

b

,

c127

Skok względny jeśli flaga w rejestrze 
SREG jest ustawiona

SREG(b) = 1 => PC 

 PC 

+ c127 + 1 
SREG(b) = 0 => PC 

 PC 

+ 1

BRBC

b

,

c127

Skok względny jeśli flaga w rejestrze 
SREG jest wyzerowana

SREG(b) = 0 => PC 

 PC 

+ c127 + 1 

Strona 17 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

SREG(b) = 1 => PC 

 PC 

+ 1

BREQ

c127

Skok względny jeśli równe (gdy Z=1)

Z = 1 => PC 

 PC + c127 + 


Z = 0 => PC 

 PC + 1

BRNE

c127

Skok względny jeśli nie równe (gdy Z=0)

Z = 0 => PC 

 PC + c127 + 


Z = 1 => PC 

 PC + 1

BRCS

c127

Skok względny jeśli flaga przeniesienia 
jest ustawiona (gdy C=1)

C = 1 => PC 

 PC + c127 + 


C = 0 => PC 

 PC + 1

BRCC

c127

Skok względny jeśli flaga przeniesienia 
jest wyzerowana (gdy C=0)

C = 0 => PC 

 PC + c127 + 


C = 1 => PC 

 PC + 1

BRSH

c127

Skok względny jeśli większy lub równy 
(gdy C=0, dotyczy liczb bez znaku)

C = 0 => PC 

 PC + c127 + 


C = 1 => PC 

 PC + 1

BRLO

c127

Skok względny jeśli mniejszy (gdy C=1, 
dotyczy liczb bez znaku)

C = 1 => PC 

 PC + c127 + 


C = 0 => PC 

 PC + 1

BRMI

c127

Skok względny jeśli wartość ujemna (gdy 
N=1)

N = 1 => PC 

 PC + c127 

+ 1 
N = 0 => PC 

 PC + 1

BRPL

c127

Skok względny jeśli wartość dodatnia 
(gdy N=0)

N = 0 => PC 

 PC + c127 

+ 1 
N = 1 => PC 

 PC + 1

BRGE

c127

Skok względny jeśli większy lub równy 
(gdy N albo V=0, dotyczy liczb ze 
znakiem)

(N 

 V)=0 => PC 

 

PC+c127+1 
(N 

 V) = 1 => PC 

 PC + 

1

BRLT

c127

Skok względny jeśli mniejszy niŜ zero 
(gdy N albo V=1, dotyczy liczb ze 
znakiem)

(N 

 V)=1 => PC 

 

PC+c127+1 
(N 

 V) = 0 => PC 

 PC + 

1

BRHS

c127

Skok względny jeśli flaga przeniesienia 
pomocniczego ustawiona (gdy H=1)

H = 1 => PC 

 PC + c127 

+ 1 
H = 0 => PC 

 PC + 1

BRHC

c127

Skok względny jeśli flaga przeniesienia 
pomocniczego wyzerowana (gdy H=0)

H = 0 => PC 

 PC + c127 

+ 1 
H = 1 => PC 

 PC + 1

BRTS

c127

Skok względny jeśli flaga T ustawiona 
(gdy T=1)

T = 1 => PC 

 PC + c127 + 


T = 0 => PC 

 PC + 1

BRTC

c127

Skok względny jeśli flaga T wyzerowana 
(gdy T=0)

T = 0 => PC 

 PC + c127 + 


T = 1 => PC 

 PC + 1

Strona 18 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

 

BRVS

c127

Skok względny jeśli flaga przepełnienia 
jest ustawiona (gdy V=1)

V = 1 => PC 

 PC + c127 

+ 1 
V = 0 => PC 

 PC + 1

BRVC

c127

Skok względny jeśli flaga przepełnienia 
jest wyzerowana (gdy V=0)

V = 0 => PC 

 PC + c127 

+ 1 
V = 1 => PC 

 PC + 1

BRIE

c127

Skok względny jeśli przerwanie jest 
odblokowane (gdy I=1)

I = 1 => PC 

 PC + c127 + 


I = 0 => PC 

 PC + 1

BRID

c127

Skok względny jeśli przerwanie jest 
zablokowane (gdy I=0)

I = 0 => PC 

 PC + c127 + 


I = 1 => PC 

 PC + 1

Instrukcje przesyłania danych 

[1][6]

 

Mnemonika

 

Operandy

 

Opis

Operacje

MOV

Rd

,

Rs

Przepisanie zawartości rejestru Rs do Rd

Rd 

 Rs

MOVW

Rd+1:Rd

Rs+1;Rs

Przepisanie zawartości pary rejestrów Rs i 
Rs+1 do pary rejestrów Rd i Rd+1

Rd+1:Rd 

 Rs+1:Rs

LDI

Rd

,

c255

Ładuj rejestr Rd bezpośrednio wartością 
stałej z zakresu 0...255

Rd 

 c255

LD

Rd

,

X

Ładuj rejestr Rd pośrednio daną z pamięci 
SRAM znajdującą się pod adresem 
wskazanym przez rejestr indeksowy X

Rd 

 (X)

LD

Rd

,

X+

Ładuj rejestr Rd pośrednio daną z pamięci 
SRAM znajdującą się pod adresem 
wskazanym przez rejestr indeksowy X z 
postinkrementacją rejestru X

Rd 

 (X) 

 X + 1

LD

Rd

,

-X

Ładuj rejestr Rd pośrednio daną z pamięci 
SRAM znajdującą się pod adresem 
wskazanym przez rejestr indeksowy X z 
predekrementacją rejestru X

 X - 1 

Rd 

 (X)

LD

Rd

,

Y

Ładuj rejestr Rd pośrednio daną z pamięci 
SRAM znajdującą się pod adresem 
wskazanym przez rejestr indeksowy Y

Rd 

 (Y)

LD

Rd

,

Y+

Ładuj rejestr Rd pośrednio daną z pamięci 
SRAM znajdującą się pod adresem 
wskazanym przez rejestr indeksowy Y z 
postinkrementacją rejestru Y

Rd 

 (Y) 

 Y + 1

LD

Rd

,

-Y

Ładuj rejestr Rd pośrednio daną z pamięci 
SRAM znajdującą się pod adresem 
wskazanym przez rejestr indeksowy Y z 
predekrementacją rejestru Y

 Y - 1 

Rd 

 (Y)

LDD

Rd

,

Y

+

c63

Ładuj rejestr Rd pośrednio daną z pamięci 
SRAM znajdującą się pod adresem 
wskazanym przez rejestr indeksowy Y z 
uwzględnieniem przemieszczenia o 
wartość z zakresu 0...63

Rd 

 (Y + c63)

Strona 19 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

LD

Rd

,

Y

Ładuj rejestr Rd pośrednio daną z pamięci 
SRAM znajdującą się pod adresem 
wskazanym przez rejestr indeksowy Z

Rd 

 (Z)

LD

Rd

,

Y+

Ładuj rejestr Rd pośrednio daną z pamięci 
SRAM znajdującą się pod adresem 
wskazanym przez rejestr indeksowy Z z 
postinkrementacją rejestru Z

Rd 

 (Z) 

 Z + 1

LD

Rd

,

-Z

Ładuj rejestr Rd pośrednio daną z pamięci 
SRAM znajdującą się pod adresem 
wskazanym przez rejestr indeksowy Z z 
predekrementacją rejestru Z

 Z - 1 

Rd 

 (Z)

LDD

Rd

,

Z

+

c63

Ładuj rejestr Rd pośrednio daną z pamięci 
SRAM znajdującą się pod adresem 
wskazanym przez rejestr indeksowy Z z 
uwzględnieniem przemieszczenia o 
wartość z zakresu 0...63

Rd 

 (Z + c63)

LDS

Rd

,

adr65535

Ładuj rejestr Rd bezpośrednio daną z 
pamięci SRAM znajdującą się pod 
adresem wskazanym przez stałą z zakresu 
0...65535

Rd 

 (adr65535)

ST

X

,

Rs

Zachowaj pośrednio zawartość rejestru Rs 
w pamięci SRAM pod adresem 
wskazanym przez rejestr indeksowy X

(X) 

 Rs

ST

X+

,

Rs

Zachowaj pośrednio zawartość rejestru Rs 
w pamięci SRAM pod adresem 
wskazanym przez rejestr indeksowy X z 
postinkrementacją rejestru X

(X) 

 Rs 

 X + 1

ST

-X

,

Rs

Zachowaj pośrednio zawartość rejestru Rs 
w pamięci SRAM pod adresem 
wskazanym przez rejestr indeksowy X z 
predekrementacją rejestru X

 X - 1 

(X) 

 Rs

ST

Y

,

Rs

Zachowaj pośrednio zawartość rejestru Rs 
w pamięci SRAM pod adresem 
wskazanym przez rejestr indeksowy Y

(Y) 

 Rs

ST

Y+

,

Rs

Zachowaj pośrednio zawartość rejestru Rs 
w pamięci SRAM pod adresem 
wskazanym przez rejestr indeksowy Y z 
postinkrementacją rejestru Y

(Y) 

 Rs 

 Y + 1

ST

-Y

,

Rs

Zachowaj pośrednio zawartość rejestru Rs 
w pamięci SRAM pod adresem 
wskazanym przez rejestr indeksowy Y z 
predekrementacją rejestru Y

 Y - 1 

(Y) 

 Rs

STD

Y

+

c63

,

Rs

Zachowaj pośrednio zawartość rejestru Rs 
w pamięci SRAM pod adresem 
wskazanym przez rejestr indeksowy Y z 
uwzględnieniem przemieszczenia o 
wartość z zakresu 0...63

(Y + c63) 

 Rs

ST

Z

,

Rs

Zachowaj pośrednio zawartość rejestru Rs 
w pamięci SRAM pod adresem 
wskazanym przez rejestr indeksowy Z

(Z) 

 Rs

Strona 20 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

ST

Z+

,

Rs

Zachowaj pośrednio zawartość rejestru Rs 
w pamięci SRAM pod adresem 
wskazanym przez rejestr indeksowy Z z 
postinkrementacją rejestru Z

(Z) 

 Rs 

 Z + 1

ST

-Z

,

Rs

Zachowaj pośrednio zawartość rejestru Rs 
w pamięci SRAM pod adresem 
wskazanym przez rejestr indeksowy Z z 
predekrementacją rejestru Z

 Z - 1 

(Z) 

 Rs

STD

Z

+

c63

,

Rs

Zachowaj pośrednio zawartość rejestru Rs 
w pamięci SRAM pod adresem 
wskazanym przez rejestr indeksowy Z z 
uwzględnieniem przemieszczenia o 
wartość z zakresu 0...63

(Z + c63) 

 Rs

STS

adr

,

Rs

Zachowaj pośrednio zawartość rejestru Rs 
w pamięci SRAM pod adresem 
wskazanym przez stałą adr

(adr) 

 Rs

LPM

 

Ładuj zawartość bajtu z pamięci programu 
o adresie określonym zawartością rejestru 
indeksowego Z do rejestru R0

R0 

 (Z)

LPM

Rd

,

Z

Ładuj zawartość bajtu z pamięci programu 
o adresie określonym zawartością rejestru 
indeksowego Z do rejestru Rd

Rd 

 (Z)

LPM

Rd

,

Z+

Ładuj zawartość bajtu z pamięci programu 
o adresie określonym zawartością rejestru 
indeksowego Z do rejestru Rd 
z postinkrementacją rejestru Z

Rd 

 (Z) 

 Z + 1

ELPM

 

Ładuj zawartość bajtu z pamięci programu 
o adresie określonym zawartością rejestru 
indeksowego Z i rejestru RAMPZ do 
rejestru R0

R0 

 (RAMPZ:Z)

ELPM

Rd

,

Z

Ładuj zawartość bajtu z pamięci programu 
o adresie określonym zawartością rejestru 
indeksowego Z i rejestru RAMPZ do 
rejestru Rd

Rd 

 (RAMPZ:Z)

ELPM

Rd

,

Z

Ładuj zawartość bajtu z pamięci programu 
o adresie określonym zawartością rejestru 
indeksowego Z i rejestru RAMPZ do 
rejestru Rd z postinkrementacją rejestrów 
Z i RAMPZ

Rd 

 (RAMPZ:Z) 

 Z + 1 

RAMPZ 

 RAMPZ + 1

SPM

 

Zapisanie zawartości pary rejestrów 
R1:R0 do pamięci programu w miejscu 
określonym zawartością rejestru 
indeksowego Z i RAMPZ

(RAMPZ:Z) 

 R1:R0

IN

Rd

,

P

Przepisanie zawartości rejestru z 
przestrzeni adresowej I/O o adresie P do 
rejestru Rd

Rd 

 P

OUT

P

,

Rs

Przepisanie zawartości rejestru Rs do 
rejestru z przestrzeni adresowej I/O o 
adresie P

 Rs

PUSH

Rs

Przepisanie zawartości rejestru Rs na 

(SPL) 

 Rs 

Strona 21 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

szczyt stosu

SPL 

 SPL - 1 

lub 
(SPH:SPL) 

 Rs 

SPH:SPL 

 SPH:SPL - 1

POP

Rd

Przepisanie zawartości szczytu stosu do 
rejestru Rd

SPL 

 SPL + 1 

Rd 

 (SPL) 

lub 
SPH:SPL 

 SPH:SPL + 1 

Rd 

 (SPH:SPL)

Instrukcje operacji bitowych 

[1][6]

 

Mnemonika

 

Operandy

 

Opis

 

Operacje

SBI

PL

,

b

Ustaw bit b w rejestrze we/wy o adresie Pl Pl(b) 

 1

CBI

PL

,

b

Zeruj bit b w rejestrze we/wy o adresie Pl

Pl(b) 

 0

LSL

Rd

Przesunięcie logiczne zawartości rejestru 
Rd w lewo

Rd(n+1) 

 Rd(n) 

Rd(0) 

 0

Z,C,N,V,H

LSR

Rd

Przesunięcie logiczne zawartości rejestru 
Rd w prawo

Rd(n) 

 Rd(n+1) 

Rd(7) 

 0

Z,C,N,V

ROL

Rd

Przesunięcie cykliczne zawartości rejestru 
Rd w lewo

Rd(0) 

 C 

Rd(n+1) 

 Rd(n) 

C

 Rd(7)

Z,C,N,V,H

ROR

Rd

Przesunięcie cykliczne zawartości rejestru 
Rd w prawo

Rd(7) 

 C 

Rd(n) 

 Rd(n+1) 

C

 Rd(0)

Z,C,N,V

ASR

Rd

Przesunięcie arytmetyczne zawartości 
rejestru Rd w prawo

Rd(n) 

 Rd(n+1), n=0...6

Z,C,N,V

SWAP

Rd

Zamiana półbajtów (nibli - ang. nibbles
w rejestrze Rd

Rd(3...0) 

 Rd(7...4) 

Rd(7...4) 

 Rd(3...0)

BSET

b

Ustawienie wybranej flagi (wskazanej 
przez numer bitu b) w rejestrze statusów 
SREG

SREG(b) 

 1

SREG(b)

BCLR

b

Zerowanie wybranej flagi (wskazanej 
przez numer bitu b) w rejestrze statusów 
SREG

SREG(b) 

 0

SREG(b)

BST

Rs

,

b

Przepisanie wartości bitu b z rejestru Rs 
do wskaźnika T w rejestrze statusów 
SREG

 Rs(b)

T

BLD

Rd

,

b

Przepisanie stanu wskaźnika T w rejestrze 
statusów SREG do bitu określonego przez 
b w rejestrze Rd

Rd(b) 

 T

 
To nie wszystko - juŜ wkrótce dalszy ciąg listy rozkazów ...

 
Literatura i inne źródła:

 

[1] "Mikrokontrolery AVR w praktyce"

 - J. Doliński 

[2] www.atmel.com

 - strona producenta mikrokontrolerów AVR

[3] AVR-Assembler-Tutorial

 - www.avr-asm-tutorial.net by Gerhard 

Strona 22 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...

background image

Schmidt 
[4] materiały od uŜytkownika forum o nicku "GAWEŁ" 
[5] AVRASM.chm - plik pomocy z AVR Studio4  
[6] "Mikrokontrolery rodziny AVR - AT90S2313" - A. Krysiak 
 

do 

Wstecz

Menu

Dalej

nowości na stronie

 | 

elektronika w stylu retro

 | 

mikrokontrolery

 | 

ciekawe rozwiązania układowe

 | 

katalogi

coś dla początkujących

 | 

teoria - wstęp

 | 

podstawowe prawa

 | 

elementy RLC

 | 

diody

 | 

tranzystory

 | 

ź

r

prądu

 | 

wzmacniacze operacyjne

 | 

elementy optoelektroniczne

 | 

filtry

 | 

generatory

 | 

zasilacze

 | 

stabilizatory

przykłady

 | 

 

trochę matematyki

 | 

archiwum

 | 

© Copyright 2001-2004 

http://www.elektronika.qs.pl/

     

Strona 23 z 23

Elektronika analogowa - Kurs asemblera dla AVR w przykładach - wprowadzenie ...

2006-05-19

file://E:\__UAM_~1\__RNE_~1\FOLDER~1\POMOCE~1\MIKROS~1\Elektronika ...