Programování avr v assembleru. Praktické programování mikrokontrolérů Atmel AVR v assembleru. (3. vydání). Elektronika v řeckém stylu


Doufám tedy, že svědomitý čtenář již sestavil programátor, experimentální desku a také nainstaloval a nakonfiguroval požadovaný software.

Nyní, když jsem napsal první článek v sérii, chápu, že jsem byl trochu nadšený a udělal jsem stejnou chybu jako moji předchůdci, když jsem uvedl frázi „pro začátečníky“. Přesnější by bylo formulovat téma „Pro začátečníky v programování v assembleru“, tedy předpokládám, že čtenář již alespoň povrchně chápe, co je mikrokontrolér, jinak nám zabere spoustu času jen to, seznámit se s tímto tématem. Pro ty, kteří je vůbec neznají, mohu doporučit sérii článků od S. Ryumika „AVR Microcontrollers“, která je podle mě naprosto úžasná, publikovaná v časopise Radioamator (č. 1-11 za rok 2005) . V tomto cyklu byl jako základní řadič zvolen ATmega8, nicméně obecné funkční jednotky výše uvedeného řadiče a ATtiny13 jsou prakticky totožné.

Pro přímé seznámení s mikrokontrolérem ATtiny13 doporučuji knihu A.V. Evstifeeva "Mikrokontroléry" Rodina AVR drobný. User's Guide" (M.: Publishing House "Dodeka-XXI", 2007. - 432 s.). Obsahuje přeložené a systematizované datové listy pro celou řadu ovladačů malé rodiny a podle mého názoru by měl být desktop přečtěte si pro ty, kteří se zabývají programováním mikrokontrolérů.

Nicméně, jak bude příběh postupovat, podám nějaké informace týkající se těch uzlů a modulů řadiče, které budou použity v napsaných programech.

Ale to vše je lyrická odbočka. Vraťme se přímo k příběhu.

Ovladač ATtiny13 má i přes své malé rozměry velmi dobré funkční vlastnosti. A malý počet pinů je více než kompenzován počtem funkcí, které každý z nich vykonává. Pinout a popis pinů jsou uvedeny níže:

Tabulka je převzata z výše zmíněné knihy A.V. Evstifeeva.

Jak vidíte, každý pin může vykonávat nejméně tři funkce, nebo dokonce mnohem více. Nejprve nebudeme uvažovat o alternativních funkcích, ale pouze o té základní - digitální vstup/výstup.

Jak je patrné z obrázku a tabulky, všechny piny, s výjimkou napájecích, mají název PB, za kterým následuje sériové číslo. Co to znamená? Všechny piny ovladače jsou sloučeny do 8 kusů pro snadnou práci s nimi a každé skupině 8 pinů jsou přiděleny tři speciální I/O registry. Obecně je koncept registrů klíčový při práci s kontroléry, zejména v assembleru. Podívejme se blíže na každý ze tří výše zmíněných registrů. Všechny jsou jednobajtové buňky v paměti řadiče. Každý bit odpovídá jednomu z výstupů řadiče a číslo bitu v registru se shoduje s číslem výstupu (např. 0. bit je zodpovědný za výstup PB0, 1. bit je zodpovědný za výstup PB1 atd.). Všechny registry mají svůj název, pod kterým se k nim přistupuje při psaní programů. Co to je za jména?

1. Registr DDRB je zodpovědný za směr přenosu informací každého pinu ovladače. Pokud je některý bit tohoto registru „0“, pak odpovídající výstup bude vstup a pokud „1“, pak výstup. Navíc je každý výstup konfigurován individuálně a kdekoli v programu. To znamená, že za různých podmínek nebo v různých časech může být stejný pin konfigurován jako vstup nebo jako výstup, nezávisle na ostatních pinech.

2. Registr PINB obsahuje aktuální stav všech pinů: pokud je na pin přivedeno napětí, zapíše se do odpovídajícího bitu logická „1“, pokud napětí není, zapíše se logická „0“. Tento registr se používá hlavně ke čtení stavu pinu, který je ve vstupním režimu.

3. Registr PORTB plní dvojí funkci v závislosti na směru přenosu informace. Pokud pin funguje jako digitální výstup, pak zápis „1“ do libovolného bitu registru PORTB způsobí, že se na odpovídajícím pinu objeví napětí a zápis „0“ způsobí, že napětí zmizí. Ve výstupním režimu je to tedy tento registr, který určuje stav každého pinu. V režimu digitálního vstupu zápis logické "1" do libovolného bitu způsobí připojení vestavěného pull-up rezistoru k odpovídajícímu kolíku a zápis "0" pro jeho deaktivaci. Co je to za „pull-up rezistor“ a k čemu je určen? Pokud pin funguje jako digitální vstup, pak je odpor vstupní vyrovnávací paměti poměrně vysoký a vstupní proud je poměrně malý. Jakékoli elektrické rušení tedy může vést k samovolnému přepnutí výstupu do libovolného stavu. Aby se tak nestalo, je mezi vstup a zdroj zapojen rezistor s odporem několika desítek kiloohmů, který „přitáhne“ vstupní potenciál k napájecímu napětí (odtud název). Proud procházející tímto rezistorem je dostatečně malý, aby nerušil zbytek obvodu, ale dostatečně velký, aby zabránil náhodnému přepnutí pinů. Při práci s tlačítky budeme často používat pull-up rezistory, protože když nejsou stisknuty, piny, ke kterým jsou připojeny, v podstatě „visí“ ve vzduchu a podléhají rušení.

Je třeba zmínit, že při zapnutí jsou všechny registry resetovány na 0 a každý pin funguje jako digitální vstup bez pull-up rezistoru.

Nyní, když máme alespoň nějakou představu o tom, CO je potřeba pro práci se vstupy ovladače, je čas zjistit, JAK s nimi pracovat.

Napíšeme naše první pracovní program v assembleru. Nejprve uvedu kompletní algoritmus pro vytvoření nového projektu, ale v budoucnu jej vynechám a zaměřím se pouze na text samotného programu.

1. Přejděte do složky asm a vytvořte v ní novou složku. Přejmenujte jej na název, který nám vyhovuje. Abych byl konkrétní, budu na ně odkazovat podle čísla našeho kroku. V tomto případě "krok 2".

2. Klepněte pravým tlačítkem myši na soubor build.bat a změňte cestu ke zdrojovému souboru s odkazem na nově vytvořenou složku (krok 2). Poté můj obsah vypadá takto:

"F:\Prog\AVR\asm\avrasm32 -fI %F:\Prog\AVR\asm\step2\main.asm
pauza"

Může se lišit podle toho, kde jste archiv rozbalili.

3. Přejděte do složky Asmedit a spusťte program ASM_Ed.exe

4. V okně, které se otevře, napište text programu. Tomuto bodu se budu věnovat podrobněji, protože je to hlavní v naší dnešní lekci, stejně jako v následujících.

Jaký je text assembleru? Může obsahovat několik prvků napsaných podle určitých pravidel:

Instrukce sestavení s operandy nebo bez nich v závislosti na syntaxi instrukce. Mezi názvem příkazu a prvním operandem musí být buď mezera, tabulátor nebo libovolné číslo obou. Operandy jsou odděleny čárkou, které může také předcházet nebo následovat libovolný počet mezer nebo tabulátorů;

Direktivy, z nichž každá začíná ".";

Štítky, což jsou místa v programu libovolně pojmenovaná uživatelem, na která může být nutné přejít. Každý štítek končí znakem ":";

Komentáře začínající na „;“. Veškerý text od začátku komentáře do konce řádku je při vytváření hex souboru ignorován a může být zcela libovolný;

Prázdné řádky pro lepší strukturu a čitelnost programu.

Na každém řádku nemůže být více než jeden příkaz. Je však povolena současná přítomnost štítku v řádku, za kterým následuje příkaz a komentář.

Pomocí těchto pravidel napíšeme program, který rozsvítí LED2, když je tlačítko SB1 stisknuté, a zhasne, pokud je tlačítko uvolněno. Text programu je uveden níže:

.include "F:\Prog\AVR\asm\Appnotes\tn13def.inc"
sbi DDRB, 4 ;РВ4 - výstup (LED2)
sbi PORTB, 2 ; Zapněte pull-up rezistor na PB2 (tlačítko SB1)
sbic PINB, 2 ;Pokud PB2=0 (tlačítko stisknuto), přeskočte další. čára
sbi PORTB, 4 ;Instalace PB4 v 1 (vypnutí LED)
sbis PINB, 2 ;Pokud PB2=1 (tlačítko uvolněno), přeskočte další. čára
cbi PORTB, 4 ;Nastavení PB4 na 0 (LED svítí)

Pojďme se na to podívat podrobněji. První řádek obsahuje direktivu "include", napsanou podle výše uvedených pravidel s tečkou na začátku. Jeho účelem je zahrnout do textu programu za ním uvedený soubor. Jak jsem řekl v prvním kroku, budeme potřebovat soubor "tn13def.inc". V tomto řádku budete muset změnit cestu k umístění složky Appnotes na vašem počítači. Proč musíme tento soubor zahrnout? Zvědavý čtenář do ní může nahlédnout a přečíst si její obsah, ale s největší pravděpodobností tomu zpočátku málo rozumí. Prozatím řeknu, že obsahuje shodu mezi názvy registrů, které assembler standardně nezná, s jejich fyzickými adresami v řadiči.

Následující řádky jsou příkazy assembleru. Pozorný čtenář si všimne, že se používají celkem čtyři různé příkazy. Podívejme se na účel každého z nich.

Instrukce sbi má dva operandy: první je jméno registru, druhý je číslo bitu. V důsledku jeho provedení se zadaný bit v určeném registru nastaví na "1".

Příkaz cbi je syntaxí podobný výše uvedenému a provádí přesně opačnou funkci – resetuje zadaný bit v určeném registru na „0“.

Syntaxe příkazu sbis je také podobná výše uvedenému. Na rozdíl od nich však neprovádí žádné operace s registry, ale pouze kontroluje stav zadaného bitu v zadaném registru, a pokud je roven „1“, přeskočí řádek za příkazem. V opačném případě se provede řádek následující za ním, stejně jako všechny ostatní za ním.

Příkaz sbiс je opakem příkazu sbis. Pokud je zadaný bit registru "0", přeskočí další řádek.

Nyní, když shrneme vše výše uvedené, pokusme se porozumět algoritmu programu. Pro začátek to udělám doslova řádek po řádku.

1 řádek. Direktiva include obsahuje soubor tn13def.inc, který obsahuje definice registrů.

2. řádek. Příkaz sbi nastaví "1" v bitu 4 registru DDRB, čímž přepne pin PB4 na výstup. Pokud se podíváte na schéma desky (obr. 1 předchozího kroku), můžete vidět, že LED2 je připojena k tomuto pinu. Po příkazu a znaku ";" byl napsán komentář, který stručně vysvětluje význam akcí provedených v řádku.

3 řádek. Stejný příkaz sbi nastaví "1" v bitu 2 registru PORTB, spojuje interní pull-up rezistor s pinem PB2, ke kterému je připojeno tlačítko SB1. Vzhledem k tomu, že jsme nezměnili stav bitu 2 registru DDRB, zůstane tento pin vstupem, což je to, co vlastně potřebujeme.

4 řádek. Příkaz sbic kontroluje přítomnost logické "0" na vstupu PB2 pomocí registru PINB. Pokud se podíváte pozorně na schéma, můžete vidět, že tlačítka po stisknutí uzavřou odpovídající svorku společným vodičem. Jedná se o standardní techniku, protože po uvolnění tlačítka je na výstupu přítomna logická „1“ díky pull-up rezistoru a po stisknutí tlačítka se objeví logická „0“ díky připojení výstup na společný vodič. Pokud je tedy na pinu PB2 logická „0“, to znamená, že je stisknuto tlačítko, přeskočíme další řádek, a pokud je tlačítko uvolněno, provedeme jej.

5 řádek. V něm příkaz sbi nastaví logickou „1“ v bitu 4 registru PORTB, čímž zhasne LED2. Bystrého čtenáře může zajímat, proč LED zhasne, pokud na výstup přivedeme napětí. Odpověď spočívá v designu. LED je připojena anodou k napájecímu vodiči a katoda k výstupu regulátoru. Pokud tedy přivedete napětí na výstup, potenciály anody a katody budou stejné a LED zhasne. Pokud je na výstupu logická „0“, pak se na LED přivede napětí a rozsvítí se. Dvojice řádků 4 a 5 tedy po uvolnění tlačítka zhasne LED2.

6 řádek. Význam je opačný než 4. Příkaz sbis zkontroluje přítomnost logické „1“ na vstupu PB2, tedy zkontroluje, zda je tlačítko uvolněno. Pokud tlačítko uvolníte, další řádek se přeskočí a další řádek přejde na další. Protože je ale 7. řádek poslední, dochází k přechodu na 2. řádek. Pokud je stisknuto tlačítko, provede se řádek 7.

7 řádek. Naproti 5. Příkaz cbi resetuje bit 4 registru PORTB na "0", čímž se rozsvítí LED2. Dvojice řádků 6 a 7 tedy rozsvítí LED2 při stisku tlačítka SB1.

Jak vidíte, nedělali jsme nic zvlášť složitého. Se znalostí pouze 3 registrů a 4 instrukcí jsme napsali náš první program. Co s ní dál dělat? Pokud jste ještě nezapomněli, pokračujeme v psaní algoritmu tvorby programu.

5. Po napsání textu programu v okně editoru vyberte položku nabídky „Soubor“ a v seznamu, který se otevře, klikněte na „Uložit jako...“. V okně ukládání souboru vyberte složku step2, kterou jsme vytvořili, a zadejte název souboru „main“, protože toto je název, který jsme zadali v souboru „build.bat“

Po uložení by okno programu mělo vypadat takto:

6. Vytvořte hexadecimální soubor. Chcete-li to provést, klepněte na tlačítko "II" na panelu nástrojů. Mělo by se zobrazit následující okno:

Oznámí nám, že montáž byla dokončena bez chyb a byl vytvořen soubor firmwaru „main.hex“ o objemu 6 slov, tedy 12 bajtů. to podotýkám podobný program v jazyce C by měl alespoň 5krát větší objem.

7. Když přejdeme do složky step2, najdeme k ní dodatek ve formě nově vytvořeného souboru main.hex, který lze nyní do regulátoru všít libovolným programátorem, což je nutné udělat, abyste viděli výsledky program, který jsme napsali. Po bliknutí ovladače, pokud je obvod správně sestaven, by mělo vše fungovat podle algoritmu, který jsme vyvinuli: když jsou tlačítka uvolněna, LED2 by měla zhasnout a když je tlačítko SB1 stisknuto, mělo by svítit.

Před dalším krokem vám doporučuji provést následující úkoly:

1. Přidejte do programového zpracování stisknutí tlačítka SB2 s opačným algoritmem: při uvolnění tlačítka SB2 by měla svítit LED1 a po stisknutí by měla zhasnout.

2. Napište program pro ovládání LED2 pomocí obou tlačítek. Po stisknutí tlačítka SB1 by se měla LED dioda rozsvítit a zůstat svítit, dokud není stisknuto tlačítko SB2, čímž se vypne až do dalšího stisknutí SB1.

Kompilátor překládá zdrojové kódy od assembleru po objektový kód. Výsledný objektový kód lze použít v simulátoru ATMEL AVR Studio nebo v emulátoru obvodu ATMEL AVR. Kompilátor také generuje kód, který lze přímo naprogramovat do mikrokontrolérů AVR.

Kompilátor generuje kód, který nevyžaduje propojení.

Kompilátor běží pod Microsoft Windows 3.11, Microsoft Windows95 a Microsoft Windows NT. Kromě toho existuje konzolová verze pro MS-DOS.

Rodinná instrukční sada Mikrokontroléry AVR stručně popsány v tomto dokumentu, pro podrobnější pokyny se prosím obraťte na úplné pokyny a dokumentaci pro váš konkrétní mikrokontrolér.

Zdrojové kódy

Kompilátor pracuje se zdrojovými soubory obsahujícími instrukce, štítky a direktivy. Instrukce a příkazy mají obvykle jeden nebo více operandů.

Řádek kódu by neměl být delší než 120 znaků.

Jakýkoli řádek může začínat štítkem, což je řetězec znaků končící dvojtečkou. Štítky se používají k označení místa, na které se řízení během přechodů přenáší, a také k určení názvů proměnných.

Vstupní řetězec může mít jednu ze čtyř podob:

[label:] direktiva [operandy] [Komentář][label:] instrukce [operandy] [Komentář]KomentářPrázdný řádek

Komentář má následující podobu:

; [Text]

Pozice v hranatých závorkách jsou volitelné. Text za středníkem (;) a až do konce řádku je kompilátorem ignorován. Štítky, pokyny a směrnice jsou podrobněji popsány níže.

Příklady:

štítek: .EQU var1=100 ; Nastaví var1 na 100 (Toto je direktiva) .EQU var2=200 ; Nastaví var2 na 200

test: rjmp test ; Nekonečná smyčka (Toto je instrukce) ; Řádek s pouze jedním komentářem

; Další řádek s komentářem

Kompilátor nevyžaduje, aby popisky, direktivy, komentáře nebo instrukce byly v konkrétním sloupci řádku.

instrukce procesoru avr

Níže je uvedena sada příkazů pro procesory AVR, jejichž podrobnější popis lze nalézt v AVR Data Book.

Aritmetické a logické instrukce

Mnemotechnické pomůcky

Operandy

Popis

Úkon

Vlajky

Cykly

Rd,Rr

Shrnutí bez nošení

Rd,Rr

Shrnutí s přenášením

Rd = Rd + Rr + C

Rd,Rr

Odečítání bez přenášení

Rd,K8

Odečtení konstanty

Rd,Rr

Odečítání s přenášením

Rd = Rd - Rr - C

Rd,K8

Odečtení konstanty s přenosem

Rd = Rd - K8 - C

Rd,Rr

Logické AND

Rd,K8

Logické AND s konstantou

Rd,Rr

Logické NEBO

Rd,K8

Logické OR s konstantou

Rd,Rr

Logické exkluzivní OR

Bitová inverze

Změna znaku (dodatečný kód)

Rd,K8

Nastavte bit(y) v registru

Rd,K8

Vymazat bit(y) v registru

Rd = Rd ($FF – K8)

Zvýšit hodnotu registru

Snižte hodnotu registru

Kontrola nuly nebo negativity

Vymazat registr

Nastavte registr

Rdl,K6

Přidejte konstantu a slovo

Rdh:Rdl = Rdh:Rdl + K6

Rdl,K6

Odečtěte konstantu od slova

Rdh:Rdl = Rdh:Rdl - K 6

Rd,Rr

Násobení čísel bez znaménka

R1:RO = Rd * Rr

Rd,Rr

Násobení čísel se znaménkem

R1:RO = Rd * Rr

Rd,Rr

Násobení podepsaného čísla číslem bez znaménka

R1:RO = Rd * Rr

Rd,Rr

Násobení zlomků bez znaménka

R1:R0 = (Rd * Rr)<< 1

Rd,Rr

Násobení znaménkových zlomků

R1:R0 = (Rd *Rr)<< 1

Rd,Rr

Násobení zlomku se znaménkem číslem bez znaménka

R1:R0 = (Rd * Rr)<< 1

Pokyny pro pobočky

Mnemotechnické pomůcky

Operandy

Popis

Úkon

Vlajky

Cykly

Relativní přechod

Nepřímý přechod na ( Z)

Rozšířený nepřímý přechod na ( Z)

STACK = PC+1, PC(15:0) = Z, PC(21:16) = EIND

Relativní volání podprogramu

STACK = PC+1, PC = PC + k + 1

Nepřímé volání ( Z)

STACK = PC+1, PC = Z

Rozšířené nepřímé volání ( Z)

STACK = PC+1, PC(15:0) = Z, PC(21:16) =EIND

Volání podprogramu

STACK = PC+2, PC = k

Návrat z podprogramu

Návrat z přerušení

Rd,Rr

Porovnat, přeskočit, pokud se rovná

jestliže (Rd ==Rr) PC = PC 2 nebo 3

Rd,Rr

Porovnejte

Rd,Rr

Porovnejte s převodem

Rd,K8

Porovnejte s konstantní

Rr,b

Přeskočte, pokud je bit v registru vymazán

if(Rr(b)==0) PC = PC + 2 nebo 3

Rr,b

Přeskočit, pokud je nastaven bit v registru

if(Rr(b)==1) PC = PC + 2 nebo 3

P,b

Přeskočte, pokud je bit v portu vymazán

if(I/O(P,b)==0) PC = PC + 2 nebo 3

P,b

Přeskočte, pokud je nastaven bit portu

if(I/O(P,b)==1) PC = PC + 2 nebo 3

s,k

Skok, pokud je vlajka v SREG vymazána

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

s,k

Přejít, pokud je nastaven příznak v SREG

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

Jděte, pokud jste rovni

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

Přeskočit, pokud se nerovná

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

Přejít, pokud je nainstalován přenos

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

Jděte, pokud je přenos vymazán

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

Skok, pokud je stejný nebo větší

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

Pokud je méně, přeskočte

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

Jděte do mínusu

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

Jdi, pokud plus

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

Skočit, pokud je větší nebo rovno (se znaménkem)

if(S==0) PC = PC + k + 1

Skočit, pokud je méně (podepsáno)

if(S==1) PC = PC + k + 1

Skočit, pokud je nastaven interní příznak přenosu

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

Skočte, pokud je vymazán vnitřní příznak přenosu

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

Skok, pokud je nastaven příznak T

if(T==1) PC = PC + k + 1

Skok, pokud je T příznak vymazán

if(T==0) PC = PC + k + 1

Skočit, pokud je nastaven příznak přetečení

if(V==1) PC = PC + k + 1

Skočit, pokud je vymazán příznak přetečení

if(V==0) PC = PC + k + 1

Přejít, pokud jsou povolena přerušení

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

Přejít, pokud jsou přerušení zakázána

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

* U operací přístupu k datům je počet cyklů indikován při přístupu k interní datové paměti a není správný při práci s externí RAM. U instrukcí CALL, ICALL, EICALL, RCALL, RET a RETI je nutné přidat tři cykly plus dva cykly pro každé čekání v ovladačích s PC menším než 16 bitů (128KB programové paměti). U zařízení s programovou pamětí větší než 128 kB přidejte pět cyklů plus tři cykly pro každé čekání.

Pokyny pro přenos dat

Mnemotechnické pomůcky

Operandy

Popis

Úkon

Vlajky

Cykly

Rd,Rr

Kopírovat registr

Rd,Rr

Zkopírujte několik registrů

Rd+1:Rd = Rr+1:Rr, r,d sudé

Rd,K8

Konstanta zatížení

Rd,k

Rd,X

Rd,X+

Rd = (X), X = X+1

Rd,-X

X = X-1, Rd = (X)

Rd,Y

Rd,Y+

Rd = (Y), Y = Y+1

Rd,-Y

Y=Y-1, Rd = (Y)

Rd,Y+q

Rd,Z

Rd,Z+

Rd = (Z), Z = Z+l

Rd,-Z

Z=Z-1, Rd = (Z)

Rd,Z+q

Přímé ukládání

X,Rr

Nepřímá konzervace

X+,Rr

(X) = Rr, X = X+1

-X,Rr

Y,Rr

Nepřímá konzervace

Y+,Rr

Nepřímé ukládání s dodatečným přírůstkem

(Y) = Rr, Y=Y+1

-Y,Rr

Nepřímá konzervace s předdekrementací

Y=Y-1, (Y) = Rr

Y+q,Rr

Z,Rr

Nepřímá konzervace

Z+,Rr

Nepřímé ukládání s dodatečným přírůstkem

(Z) = Rr, Z = Z+l

-Z,Rr

Nepřímá konzervace s předdekrementací

Z=Z-l, (Z) = Rr

Z+q,Rr

Nepřímé uložení s výměnou

R0 = ( Z)

Rd,Z

Rd = ( Z)

Rd,Z+

Rd = ( Z), Z=Z+1

R0 = (RAMPZ: Z)

Rd,Z

Rd = (RAMPZ: Z)

Rd,Z+

Rd = (RAMPZ: Z), Z = Z+l

Ukládání do paměti programu

(Z) = R1:RO

Rozšířené úložiště v paměti programu

(RAMPZ: Z) = R1:RO

Rd,P

Číst port

P,Rr

Napište do portu

Nasunutí registru na zásobník

Vytahování registru ze zásobníku

* U operací přístupu k datům je počet cyklů indikován při přístupu k interní datové paměti a není správný při práci s externí RAM. Pro instrukce LD, ST, LDD, STD, LDS, STS, PUSH a POP musíte přidat jeden cyklus plus jeden cyklus pro každé čekání.

Návod na práci s bity

Mnemotechnické pomůcky

Operandy

Popis

Úkon

Vlajky

Cykly

Logický posun doleva

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

Logický posun doprava

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

Otočit doleva přes C

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

Otočit doprava přes C

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

Aritmetický posun doprava

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

Přeuspořádání notebooků

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

Nastavení vlajky

Vymazání vlajky

P,b

Nastavte bit na portu

P,b

Vymazat bit v portu

Rr,b

Rd,b

Načtěte bit z T do registru

Nastavit vlajku nošení

Clear Carry Flag

Nastavit příznak záporného čísla

Vymazat příznak záporného čísla

Nastavit nulový příznak

Vymazat nulový příznak

Nastavit příznak přerušení

Vymazat příznak přerušení

Nastavit příznak podepsaného čísla

Vymažte příznak podepsaného čísla

Nastavit příznak přetečení

Jasný příznak přetečení

Nastavit příznak T

Jasná vlajka T

Nastavit vnitřní příznak přenášení

Jasná vnitřní nosná vlajka

Žádná operace

Spánek (snížení spotřeby energie)

Viz popis návodu

Resetování časovače Watchdog

Viz popis návodu

Assembler nerozlišuje malá a velká písmena.

Operandy mohou být těchto typů.

Dobrý večer všem! Vysílám z útulného světa zvaného „assembler“. Okamžitě objasním, že téma se týká mikrokontrolérů AVR - a zatím nevím, zda bude tento příspěvek užitečný pro ty, kteří chtějí použít assembler pro jakýkoli jiný úkol. Faktem je, že doslova před pár dny jsem se začal učit assembler od nuly - potřebuji vyrobit jedno zařízení - a rozhodl jsem se, že v něm budu dělat všechno sám. Tak jsem si to jednoho krásného dne uvědomil Učit se assembler je naprosto k ničemu! Jazyk symbolických instrukcí lze pouze pochopit! Čili všem, kteří chtějí programovat v jazyce symbolických instrukcí, důrazně doporučuji, aby se podrobně ponořili do toho, jak mikrokontrolér FYZICKY funguje, a poté si prostudovali záludnosti příkazů.
Pravděpodobně tedy začnu malou sérii článků, ve kterých vám to řeknu od úplného začátku jak přesně Určité věci v programování v assembleru jsem pochopil – myslím, že pro ty, kteří vůbec nechápou, co je ASM, budu jen takový „překladatel“ z jazyka těch, kteří jsou v této věci velmi dobří.

Hned řeknu, že jsem se k tomuto tématu víceméně dostal na popud DIHALT - tyto články proto budou jakýmsi překladem z jazyka super-duper assembleru a mikrokontroléru do jazyka srozumitelného většině lidí. Doufám, že mě guruové v průběhu hry opraví, a když najednou něco vysvětlím špatně, opraví mě.
Takže první závěry o assembleru, které jsem před pár dny udělal, mě do morku kostí šokovaly - a od 23:00 do 5:00 jsem seděl a četl články o DI HALT - načež jsem šel spát spokojený a šťastný. Pochopil jsem podstatu programování v assembleru pro mikrokontroléry.
Jak to lze vysvětlit ještě jednodušeji? Myslím, že musíme začít od samé podstaty.
***
Zpočátku nebudeme zabíhat do technických detailů (o těch si povíme v dalším článku) – jen představte si, že jsou tam 3 postavy:
1. Mikrokontrolér - To je Angličan Steve, který přišel k Rusovi. Umí perfektně anglicky, ale vůbec nerozumí rusky - ani slovo. Pouze anglicky. Prohrál argument a zavázal se, že bez otázek udělá vše, oč ho Rus požádá.
2. Assembler - Jedná se o překladatele Vasyu, jehož matka je Angličanka a otec Rus. Umí perfektně anglicky i rusky.
3.My - To je Rus, ke kterému přišel Angličan. Tedy, to jsme my =) Zároveň umíme perfektně rusky a (!!!) trochu anglicky - jen trochu, se slovníkem.
***
Představte si tuto situaci – na židli ve vašem pokoji sedí Angličan. A vy sedíte u počítače a čtete tento příspěvek, když se najednou vaše okno najednou otevřelo! To je smůla! Fouká vítr, záclona se proměnila v plachtu... Bylo by hezké ji zavřít! Ale je příliš líné vstát ze židle, sundat nohy ze systémové jednotky, nacpat je do pantoflí, odložit hrnek kávy (piva) a jít bojovat s živly. A pak si najednou uvědomíte, že máme v místnosti Angličana, který prohrál sázku a je čas ho pronásledovat! A ty mu tak sladce říkáš: „Ty vole! Zavřete prosím okno a pak si můžete znovu sednout na židli!" a on sedí, kouká na tebe zmateně a nic nedělá! Můžete samozřejmě trefit zelňačku - ale stejně vám nebude rozumět! Pak zavoláte svému příteli překladateli Vasiliji – přijde a posadí se vedle Angličana na židli. A ty řekneš - Přelož: "Steve, jdi a zavři okno a pak si sedni zpátky na židli!" Překladatel překládá do angličtiny – Angličan rozumí a jde a zavře okno a pak přijde a posadí se na židli.
V tomto bodě stačí pochopit roli assembleru v tomto řetězci „We-Assembler-Controller“
To znamená, jak by každý pochopil, co je assembler? Pak čtěte dál.
***

Pojďme si tedy tuto situaci představit. Řekneš Vasyovi - "Poslouchej, no, zkrátka je to tak - zapomněl jsem doma kalkulačku, vyděl 56983 2 a řekni Stevovi, ať dělá tolik kliků pěstmi" a Vasja počítá s kalkulačkou a říká Stevovi anglicky „Dělejte kliky pěstmi 28491krát“ Říká se tomu "SMĚRNICE"- jinými slovy, příkaz je úkol pro Vasyu, jehož výsledkem je Steveovo jednání.

Existuje další situace – řeknete Vasyovi „Řekni Stevovi, aby udělal 28491 kliků“ a Vasya vaše slova jednoduše přeloží do angličtiny. To se nazývá OPERÁTOR

Je to jednoduché – existuje směrnice a existuje operátor. Operátor je vaším přímým pokynem Stevovi, co má dělat - Vasya zde pouze překládá váš požadavek do angličtiny. A Směrnice je úkolem pro samotného Vasyu – a Vasja nejprve udělá, co jste mu řekli, a pak podle výsledku něco řekne Stevovi.

Teď budeme Angličana pravidelně mučit! Nejprve ale musíme lépe poznat našeho překladatele Vasyu. Musíte vědět následující - Vasja vás vždy bez pochyby poslechne - co mu bylo řečeno, to dělá. Vasyova kalkulačka nemá desetinná místa - když se podíváte na příklad s kliky, pak 56983 \ 2 = 28491,5 - ale Vasya má vše za desetinnou čárkou odříznutou - a vidí pouze celé číslo - a na tom nezáleží zda bude 28491,000001 nebo 28491,9999999 – pro Vasyu je to jedna velká věc, bude to v obou případech 28491. Nic není zaoblené. Další důležité informace o Vasyi. Vasya je krutý - nezajímá ho skutečnost, že Steve kurva dělá kliky dvacet osm tisíckrát. Řekli mu, že Vasja přeložil. A nejen překládal, ale také mě donutil udělat to, o co jste požádali. Takže pokud Steve zemře na třiadvacet tisíc pětsettřináctém kliku, bude to čistě vaše chyba.

Vlastně to je zatím vše. V příštím příspěvku se ponoříme hlouběji - prozatím to stačí pochopit. Jen si představte tuto situaci a pochopte, co je co, kdo hraje jakou roli a jak se směrnice liší od operátora.
A pak se pokusíme vše nazvat pravým jménem a zhruba odhadnout, jak assembler pracuje s mikrokontrolérem jako dospělý.

Co je potřeba k tomu, abyste se stali profesionálním programátorem pro mikrokontroléry a dosáhli úrovně dovedností, které vám umožní snadno najít a získat práci s vysokým platem (průměrný plat programátora mikrokontrolérů v Rusku na začátku roku 2015 je
80 000 rublů).

PŘIDAT

Syntaxe: ADD reg1, reg2 Tento příkaz přidá obsah registrů reg1 a reg2 a uloží výsledek do registru reg1. Změní stav příznaků H, S, V, N, Z, C.

A

Syntaxe: AND reg1, reg2 Tento příkaz provede logickou operaci AND mezi registry reg1 a reg2, přičemž výsledek uloží do registru reg1. Změní stav příznaků S, V, N, Z.

ANDI

Syntaxe: ANDI hreg, číslo Tento příkaz provede logickou operaci AND mezi obsahem horního registru hreg a konstantním číslem (0...255), přičemž výsledek uloží do registru. Změní stav příznaků S, V, N, Z.

BRBC

Syntaxe: BRBC bit, návěští Tento příkaz zkontroluje stav bitu registru SREG ($3F) a skočí na návěští, pokud je bit prázdný. Návěští musí být v rozmezí 63 příkazů příkazu brbc.

BRBS

Syntaxe: BRBS bit, návěští Tento příkaz kontroluje stav bitu registru SREG ($3F) a skočí na návěští, pokud je bit nastaven. Návěští musí být v rozmezí 63 příkazů od příkazu brbs.

BRCC

Syntaxe: BRCC bit, návěští Tento příkaz zkontroluje příznak přenosu (C) a skočí na návěští, pokud je prázdné.

BRCS

Syntaxe: BRCS bit, návěští Tento příkaz kontroluje příznak přenosu (C) a skočí na návěští, pokud je nastaven.

BREQ

Syntaxe: BREQ bit, návěští Tento příkaz kontroluje nulový (Z) příznak a skočí na návěští, pokud je nastaven.

BRNĚ

Syntaxe: BRNE bit, návěští Tento příkaz zkontroluje nulový (Z) příznak a skočí na návěští, pokud je prázdné.

C.B.I.

Syntaxe: CBI ioreg, bit Tento příkaz resetuje bit I/O registru ioreg ($00...$1F) na 0. Číslo bitu určuje bitový operand.

CLR

Syntaxe: CLR reg Tento příkaz resetuje všechny bity registru reg na 0. Změní stav příznaků S, V, N, Z.

C.P.

Syntaxe: CP reg1, reg2 Tento příkaz porovnává obsah registrů reg1 a reg2 odečtením reg2 od reg1. Obsah registrů se nemění. Změní stav příznaků H, S, V, N, Z, C.

CPI

Syntaxe: CPI hreg, číslo Tento příkaz porovnává obsah registru hreg s číselnou konstantou odečtením konstanty z registru. Obsah registrů se nemění. Mění stav příznaků H, S, V, N, Z, C. Příkaz funguje pouze s registry R16…R31.

DEC

Syntaxe: DEC reg Tento příkaz sníží obsah registru reg o jednu a výsledek zapíše zpět do registru. Změní stav příznaků S, V, N, Z.

V

Syntaxe: IN reg, ioreg Tento příkaz přenese obsah I/O registru ioreg do RON reg.

INC

Syntaxe: INC reg Tento příkaz zvýší obsah registru reg o jednu a výsledek zapíše zpět do registru. Změní stav příznaků S, V, N, Z.

LD

Syntaxe: LD reg, longreg Tento příkaz načte jeden bajt z datové paměti (adresa paměti obsažená v delším registru) do registru reg (pro model 1200).

LDI

Syntaxe: LDI hreg, number Tento příkaz načte okamžitou hodnotu čísla do horního registru hreg (příkaz může pracovat pouze s registry R16...R31). Číslo musí být v rozsahu 0…255.

LSR

Syntaxe: LSR reg Tento příkaz provede logický posun obsahu registru reg doprava. V tomto případě je 0. bit zkopírován do příznaku C, 7. bit je resetován na 0. Změní stav příznaků S, V, N, Z, C.

NEBO JÁ

Syntaxe: ORI hreg, číslo Tento příkaz provede operaci logického OR mezi obsahem horního registru hreg a číselnou konstantou (0...255), přičemž výsledek uloží do registru. Změní stav příznaků S, V, N, Z.

VEN

Syntaxe: OUT ioreg, reg Tento příkaz přenese obsah obecného registru reg do I/O registru ioreg.

ZAVOLAT

Syntaxe: RCALL návěští Tento příkaz volá podprogram identifikovaný návěštím, který musí být v rámci 2048 příkazů příkazu rcall (relativní volání).

RET

Syntaxe: RET Tento příkaz se vrací z podprogramu skokem na příkaz, který následuje po původním příkazu volání.

RETI

Syntaxe: RETI Tento příkaz se vrací z podprogramu a nastavuje obecný příznak povolení přerušení.

RJMP

Syntaxe: RJMP label Relativní skok. Skočí na část programu označenou popiskem, který musí být v rozmezí 2048 od příkazu RJMP.

SBI

Syntaxe: SBI ioreg, bit Tento příkaz nastaví bit ioreg I/O registru ($00...$1F) na 1. Číslo bitu určuje bitový operand.

SBIC

Syntaxe: SBIC ioreg, bit Tento příkaz zkontroluje bit ioreg I/O registru ($00...$1F) a přeskočí následující příkaz, pokud je tento bit prázdný. Číslo bitu určuje bitový operand.

SBIS

Syntaxe: SBIS ioreg, bit Tento příkaz zkontroluje bit ioreg I/O registru ($00...$1F) a přeskočí následující příkaz, pokud je tento bit nastaven. Číslo bitu určuje bitový operand.

SEI

Syntaxe: SEI Tento příkaz nastavuje obecný příznak povolení přerušení.

SER

Syntaxe: SER reg Tento příkaz nastaví všechny bity registru reg na 1. Změní stav příznaků S, V, N, Z. Příkaz může pracovat pouze s registry R16...R31.

SVATÝ

Syntaxe: ST reg, longreg U modelu 1200 tento příkaz ukládá obsah registru reg do datové paměti (paměťové místo je obsaženo v delším registru), tzn. nepřímo přeposílá obsah PON reg na adresu uloženou v delším registru.

SUBI

Syntaxe: SUBI hreg, číslo Odečte konstantní číslo od nejvyššího registru hreg. Výsledek je uložen ve stejném registru. Mění stav příznaků H, S, V, N, Z, C. Příkaz může pracovat pouze s registry R16…R31.

Revich Yu. V.

Praktické programování mikrokontrolérů Atmel AVR v jazyce
assembler - 2. vyd., rev. -

Jsou nastíněny principy provozu, architektonické prvky a techniky

programování mikrokontrolérů Atmel AVR. K dispozici jsou hotové recepty
pro programování základních funkcí moderních mikroelektronických zařízení
rature: od odezvy na stisk tlačítka nebo konstrukci dynamického displeje
na složité protokoly pro záznam dat do externí paměti nebo funkcí
připojení hodin reálného času. Zvláštní pozornost je věnována výměně dat
jsou uvedeny numerické mikroelektronické přístroje s osobním počítačem
ukázky programů. Kniha zohledňuje vlastnosti moderních modelů AVR a ko-
putovní mikroobvody z posledních let výroby. Aplikace obsahují zákl
parametry mikrokontrolérů AVR, seznam příkazů a programových textů pro ně,
a také seznam použitých termínů a zkratek.

Pro studenty, inženýry a radioamatéry

Skupina pro přípravu publikace:

Hlavní editor

Jekatěrina Konduková

Náměstek šéfredaktor

Igor Šišigin

Hlava ze strany redakce

Grigorij Dobin

Editor

Jurij Rožko

Rozložení počítače

Olga Sergienko

Korektor

Zinaida Dmitrievová

Design krytu

Elena Belyaeva

Hlava Výroba

Nikolaj Tverskikh

Mikrokontroléry, jejich původ a použití................................................................ ....... 7

Pozadí mikrokontrolérů ................................................................ .................................................................... ... 8

Elektronika v řeckém stylu ................................................................ ...................................................... ............... 10

Proč AVR? ...................................................... ...................................................... ........................................ 12

ČÁST I. OBECNÉ PRINCIPY ZAŘÍZENÍ
A PROVOZ ATMEL AVR ................................................. ............... 17

Kapitola 1. Přehled mikrokontrolérů Atmel AVR ...................................... ........... 19

Rodiny AVR ................................................ .................................................................... .............................. 21

Vlastnosti praktického použití AVR MK ...................................................... ............................. 23

O spotřebě ................................................ ...................................................... ............................. 23

Některé funkce použití AVR v obvodech................................................ ................................. 25

Kapitola 2. Obecná struktura, organizace paměti, taktování, reset........... 27

Paměť programu ................................................ ...................................................................... .............................. 27

Datová paměť (RAM, SRAM) ...................................................... .................................................................... .............. 29

Energeticky nezávislá datová paměť (EEPROM) ...................................... .............................. 31

Metody hodin ................................................................ ...................................................................... ............................. 32

Resetovat................................................... ...................................................... ...................................................... 34

Kapitola 3: Úvod do periferních zařízení................................................ ....... 37

I/O porty ................................................................ ............................................................. ................................... 38

Časovače-počítadla ............................................................ ............................................................. ...................................... 39

Analogově-digitální převodník............................................ ...................................................................... 41

Sériové porty ................................................ ...................................................... ........... 42

UART................................................. .................................................. ...................................................... 43

Rozhraní SPI ................................................ ...................................................... ............................. 46

Rozhraní TWI (I

C) ................................................................. ............................................................ ..... 50

Univerzální sériové rozhraní USI ................................................. ............................. 50

Kapitola 4. Přerušení a režimy úspory energie................................................ .............. 53

Přerušení ................................................ ....................................................... ............................................. 53

Typy přerušení ................................................ ................................................................. ...................... 57

Režimy úspory energie................................................................ ................................................................. ............................. 58

ČÁST II. PROGRAMOVÁNÍ MIKROCONTROLLERŮ
ATMEL AVR ................................................ ...................................................... ............................. 61

Kapitola 5. Obecné principy programování MCU řady AVR ................................... 63

Montáž nebo C? ...................................................... ...................................................... ............................. 63

Metody a nástroje programování AVR ................................................. ....................................... 67

Editor kódu................................................................ ...................................................... ............................. 67

O AVR Studiu ................................................ ..................................................... .............................. 68

Uspořádání assembleru ................................................................. ............................................................. ................... 70

Programátoři ................................................. ....................................................... ............... 71

O hex souborech ................................................ ............................................................. ............................................... 75

Příkazy, instrukce a zápis assembleru AVR................................................ ............................................. 78

Čísla a výrazy ................................................ ............................................................. ........................ 79

Směrnice a funkce ................................................................ ...................................................................... ........................... 80

Obecná struktura programu AVR............................................ ...................................................................... ......... 84

Obsluha přerušení ................................................ ................................................................... ............................. 85

RESET ................................................ .................................................................... ............................................. 89

Nejjednodušší program ................................................ .................................................................... .............. 90

Zpoždění................................................. ...................................................... ...................................... 92

Počítací program ................................................ ...................................................................... ............................. 94

Použití přerušení ................................................ ...................................................... ...................................... 96

Zpoždění časovače................................................................ ...................................................................... ........................ 97

Čítačový program využívající přerušení ................................................................ ........................ 98

O konfiguračních bitech ................................................ ...................................................................... ........................... 101

Kapitola 6. Příkazový systém AVR ................................................ ...................................................... 105

Ovládejte pokyny k převodu a zaregistrujte se SREG ...................................................................... 105

Příkazy pro kontrolu ................................................................ ................................................................... ............................. 111

Příkazy pro logické operace ................................................................ ...................................................................... ............................. 113

Posunovací instrukce a bitové operace ................................................................ ....................................................... 114

Pokyny pro aritmetické operace ................................................................ ...................................................... 116

Příkazy pro přenos dat ................................................ ...................................................................... ........................... 118

Příkazy pro ovládání systému ................................................ ............................................................. ................... 122

Provádění standardních procedur v assembleru ................................................ ...................................................... 123

O zásobníku, lokálních a globálních proměnných............................................ ............................................. 125

Kapitola 7. Aritmetické operace................................................. ....................................... 127

Standardní aritmetické operace ................................................................ ...................................................................... .....128

Násobení víceciferných čísel ................................................................ ...................................................................... ...... 129

Dělení víceciferných čísel ................................................ ...................................................................... ............... 131

Operace se zlomkovými čísly ................................................................ ...................................................... 134

Generátor náhodných čísel ................................................ ...................................................... ........ 136

Operace s čísly ve formátu BCD ................................................ ...................................................................... .....138

Záporná čísla v MK ................................................................ ..................................................... .............. 143

Kapitola 8. Programování časovačů................................................ ....................... 147

8bitové a 16bitové časovače ................................................ ............................................................. ........................ 147

Vytváření dané hodnoty frekvence................................................................ ...................................... 149

Odpočítávání................................................. ............................................................ ...................................................... 153

Přesná korekce času ................................................ ...................................................................... ...................... 158

Měřič frekvence a měřič period ................................................ ...................................................... ............... 160

Měřič frekvence ................................................ ...................................................... ............................. 160

Měřič období ................................................ ...................................................................... .............................................. 164

Dynamické ovládání displeje ................................................ ...................................................................... ......167

LED indikátory a jejich zapojení ................................................................ ...................................... 168

Programování dynamického zobrazení ................................................ ................................... 171

Časovače v režimu PWM ...................................................... ...................................................... ........................ 174

Kapitola 9. Používání EEPROM ................................................ ....................................... 179

Ještě jednou o bezpečnosti dat v EEPROM ...................................... ...................................... 179

Zápis a čtení EEPROM ................................................... ...................................................... ........................ 181

Ukládání konstant do EEPROM ................................................. ............................................................ ...................... .. 183

Kapitola 10. Analogový komparátor a ADC................................................. ............................. 187

Analogově-digitální operace a jejich chyby ................................................ ............................................. 187

Práce s analogovým komparátorem................................................................ ...................................................................... ............. 190

Integrace ADC na komparátoru................................................ ...................................................... 193

Princip fungování a výpočetní vzorce................................................................ ....................................... 194

Integrace programu ADC ................................................ ...................................................................... ......198

Vestavěný ADC ............................................................ ..................................................... .............................................. 201

Příklad použití ADC ................................................ ...................................................... ...................... .... 204

Program................................................. ...................................................... ...................................... 206

Kapitola 11. Programování SPI ................................................ ....................................... 215

Základní operace přes SPI ................................................. ...................................................................... ............................. 215

Možnost hardwaru ................................................ ...................................................... .......... 216

Softwarová možnost ................................................................ ...................................................... ......... 218

O typech energeticky nezávislých pamětí................................................. ............................................. 219

Zápis a čtení flash paměti přes SPI .................................................. ............................................................. .. 221

Výměnný program s pamětí 45DB011B přes SPI .................................................. ............... 224

Psaní a čtení flash karet ................................................................ ...................................................... ............... 225

Připojení MMS karet ................................................ .................................................................... ........... 225

Odeslání příkazů a inicializace MMC................................................. .......................................... 228

Nahrávání a čtení MMS ...................................................... ..................................................... ........... 232

Kapitola 12. Rozhraní TWI (I

C) a jeho praktické využití................ 237

Základní protokol I

C ............................................................ ............................................................ ......... 237

Softwarová emulace protokolu I

C ............................................................ ........................ 240

Zápis dat do externí energeticky nezávislé paměti................................................ ........... 241

Režimy výměny s pamětí AT24 ................................................... ....................................................... 241

Program................................................. ...................................................... ...................................... 243

Hodiny s rozhraním I

C ............................................................ ............................................................ .... 247

Záznam dat ................................................ ...................................................................... ............................. 255

Čtení dat ................................................ ...................................................................... ............................. 259

Kapitola 13. Programování UART/USART ...................................................... ............... 261

Inicializace UART ................................................ ...................................................... ............... 262

Přenos a příjem dat ................................................................ ..................................................... ........... 263

Příklad nastavení hodin DS1307 pomocí UART ................................................ ...................... 266

Techniky ochrany před komunikačními poruchami................................................ ...................................... 271

Kontrola parity................................................................ ................................................................... ............................. 271

Jak zorganizovat správnou výměnu ................................................ ...................................................................... ....... 273

Další funkce USART ................................................ ...................................... 274

Implementace rozhraní RS-232 a RS-485 ................................... ........................................................ ..... 276

Převodníky úrovní pro RS-232 ............................................ ...................................................... 280

RS-485 ................................................... ..................................................... ............................................. 283

Kapitola 14. Režimy úspory energie a časovač Watchdog................................... 285

Programování režimu úspory energie ................................................ ........................................ 286

Příklad zařízení napájeného baterií ................................................. ............................................ 287

Dokončení programu ................................................................ .............................................................. ....................... 289

Použití časovače hlídacího psa................................................................ ...................................................................... ........... 293

APLIKACE ................................................................ ....................................................... ............... 299

Příloha 1. Základní parametry mikrokontrolérů Atmel AVR .......... 301

Dodatek 2. Příkazy Atmel AVR ................................................ ...................................... 309

Aritmetické a logické příkazy ................................................................ ...................................... 310

Pokyny pro bitové operace ................................................................ ...................................................................... ........................... 311

Porovnávací příkazy ................................................................ ...................................................... ............... 312

Řídící příkazy přenosu ................................................ ............................................................. ............... .313

Příkazy pro nepodmíněný skok a volání podprogramů................................................ ........... 313

Pokyny pro kontrolu-přeskočení a pokyny pro podmíněný skok................................................ ...................... 314

Příkazy pro přenos dat ................................................ ...................................................................... ............................. 315

Příkazy pro ovládání systému ................................................ ............................................................. ................... 316

Příloha 3. Texty programu................................................ ...................................... 317

Flash komunikační ukázkový program 45DB011B
přes rozhraní SPI ................................................ .................................................................... ............................................. 317

Postupy výměny rozhraní I

C ............................................................ ........................ 321

Dodatek 4. Výměna dat s osobním počítačem
a ladění programů přes UART ................................................. ....................................... 329

Práce s COM portem v Delphi ................................................ ...................................................... ......... 329

Instalace linky RTS v systémech DOS a Windows ................................................... ............................................. 335

Program COM2000 ................................................ ...................................................... ............... 337

Ladění programů pomocí emulátoru terminálu................................................ ...................... 339

Příloha 5. Slovník často používaných zkratek a termínů....... 341

Literatura................................................. ...................................................... ............... 347

Předmětový rejstřík ................................................................ ...................................................... 349

ÚVOD

mikrokontroléry,
jejich původ a uplatnění

Říká se, že v 60. letech sledovali účastníky studentských demonstrací
Gordon Moore na protest poznamenal: "Jsme skuteční revolucionáři." Studenti
zaměstnanec jednoho z vynálezců tranzistoru W. Shockley mj.
skrytý zakladatel slavného Silicon Valley, zase založen
tel a vedoucí společností, které byly předurčeny hrát vedoucí roli ve vývoji
mikroelektroniky, Moore věděl, o čem mluví. Paradoxně je
vynálezy Moora a jeho spolupracovníků byly předurčeny stát se základem tohoto světa
do kterého se následně soustředila činnost „odbojné mládeže“.
60. léta 20. století Moderní hackeři (ne počítačoví chuligáni z novin, ale skuteční)
informatici zapálení pro svou práci) - přímí ideologičtí dědici
Studenti Sorbonny a američtí demonstranti, kteří změnili heslo „Make
láska ne válka"

na "Nepište slogany - pište kód." Není náhoda, že mnoho slavných

významné osobnosti elektronického počítačového průmyslu, autoři vynálezů, zakladatelé
kteří utvářeli tvář moderního světa – pocházejí z prostředí blízkého právě té „housky“
chřadnoucí mládí“.
Náš příběh o mikrokontrolérech začal tím, že v roce 1957 Gordon Moore spolupracoval
spolu s Robertem Noycem, který se později stal jedním z vynálezců mikrofonu
roschemy a dalších šest zaměstnanců Shockley Semiconductor Labs (Shockley tzv
jejich „zrádná osmička“), založil společnost Fairchild Semiconductor. K ní my
vděčíme nejen za rozvoj trhu s polovodiči a zavádění mikroobvodů
do strojírenské praxe, ale také proto, že se stala jakousi kovárnou personálních a
generátor nápadů pro mladé odvětví.
Zde jsou jen některá historická fakta. Sám Moore s Noycem koncem 60. let
vytvořila společnost Integrated Electronics, která pod zkráceným názvem Intel
nyní zná každý školák. Jeremy Sanders, zakladatel další slavné
největší společnost - AMD, také opustil Fairchild, kde se vyznamenal otevřením spol.
dočasný ekonomický model pro výrobu a prodej polovodičů
komponent, u nichž náklady na produkt mají tendenci klesat, jak rostou

„Make love, not war“ byl slogan 60. let 20. století protestující proti válce ve Vietnamu.

Úvod

změnit objem dávky. Charlie Spork, jeden z klíčových manažerů Fairchild, v roce 1967
se stal ředitelem společnosti National Semiconductor, kterou později na čtvrtinu vedl
století. Polovina "zrádné osmičky" - Gene Hoerney, Evgeniy Kleiner,
Jay Last a Sheldon Roberts – založili v roce 1961 Amelco, od kterého
následně vyrostl dnes již známý Intersil, Maxim a Ixys. Zaměstnanec
Za vynález operačních zesilovačů vděčíme Fairchildu Robertu Widlarovi –
různé druhy mikroobvodů a dodnes jsou pouze na druhém místě v popularitě
mikroprocesory. Kromě toho je historie Fairchild spojena se vznikem slavných
nový venture (tj. „rizikový“) model financování, který hrál rozhodující roli
důležitou roli v rozvoji všech odvětví souvisejících s elektronikou, počítači a
telekomunikace. Ne nadarmo je Fairchild často nazýván „předchůdcem veškeré elektřiny“.
tronic“.

Pozadí mikrokontrolérů

Z celého toho hurikánu událostí je pro naše vyprávění důležité to mezi
další inovace, zaměstnanci Fairchild byli první, kdo propagoval polovodiče
pamětní pamětí. Nyní, ve věku CD a DVD, pevných disků a flash karet, my
Je těžké si představit, že na počátku 60. let 20. století počítačové programy
byly uloženy převážně na kartonových arších (děrných štítcích), šrotu konstruktérů
zda je vaše hlava přes drahé moduly RAM na rtuťových zpožďovacích linkách, osciloskop
grafické trubice a feritové kroužky, kde každý bit byl „přišit“ ručně
Ne. Nejkompaktnější elektronické zařízení těch let pro ukládání dat
magnetické disky s názvem RAMAC 305 s kapacitou 5 MB byly velikosti
s průmyslovou lednicí a byl pronajat za 5 tisíc dolarů měsíčně.
Jediným „paprskem světla“ v temném království těchto monster byl vynález
Americký zaměstnanec Bosch Arma Corporation Yen Chow, který v roce 1956 obdržel
patent na zařízení nyní známé jako „jednorázová programovatelná ROM“
(OTP ROM

). V tomto patentu byl mimochodem tento termín použit poprvé

"hořet" - mikromodul se skládal z matice s tavnými propojkami, které
které byly při programování spáleny přivedením vysokého napětí na ně.
OTP ROM po dlouhou dobu zůstaly jedinými zařízeními pro kompaktní
úložiště dat a neztratilo svůj význam až donedávna -
minimálně čtvrtina mikrokontrolérů na světě, zejména těch jednodušších, až
se stále vyrábí právě s takovým jednorázově programovatelným vestavěným programem
vrásčitý, kvůli jeho extrémní lacinosti. A teprve v posledních letech došlo k „propálenému“ pa-
paměti začaly být postupně nahrazovány pohodlnějšími flash pamětmi, když posledně jmenované
zlevnil natolik, že nemá téměř smysl používat OTP ROM.
Ale vraťme se do 60. let minulého století. Kompaktní polovodičová paměť byla absolutně potřebná
všichni to milují – od armády a NASA až po výrobce domácích spotřebičů. Nejprve
Fairchild představil to, čemu se dnes říká DRAM, zejména na takových mikro-
ruské obvody (32 768 čipů s kapacitou 256 bitů každý) byla vybudována paměť banneru

Vysvětlení některých zkratek viz Dodatek 5.

vláknový superpočítač ILLIAC-IV, konkurent tuzemského BESM-6. Vycítil
odkud vítr vane, v roce 1968 Moore a Noyce opustili Fairchild a založili Intel, as
specializovaná firma na vývoj a výrobu pamětí. Ještě ne
věděl, že nejoblíbenějším produktem Intelu vůbec nebude paměť, ale malá
zařízení (obr. B1), zvané mikroprocesor, jehož vývoj spočíval především
byl původně koncipován jako pomocná fáze při návrhu konvenčního kalkulu
Tóra.

Rýže. V 1. Mikroprocesor

A

VYNÁLEZ MIKROPROCESORU

V roce 1969 se v Intelu objevilo několik lidí z Busicom, mladé japonské společnosti.
výzkumný ústav zabývající se výrobou kalkulaček. Potřebovali sadu 12 inte-
gral schémata jako hlavní prvek nové levné stolní kalkulačky -
Tóra. Projekt vyvinul Masatoshi Shima, který zastupoval japonskou společnost
Rone. Ted Hoff (Marcian E. Ted Hoff, nar. 1937), vedoucí oddělení zabývající se
vývoj aplikací pro produkty Intel, když jsem se seznámil s projektem, uvědomil jsem si to
místo vytvoření kalkulačky s některými programovacími schopnostmi
programování, můžete udělat opak, počítač naprogramovaný tak, aby fungoval jako
kalkulačka. Na podzim roku 1969 se Hoff rozhodl pro toto umění
architektura budoucího mikroprocesoru. Na jaře přišel na oddělení Hoffa (všichni ze stejného
Fairchild, nám již známý), nový zaměstnanec Frederico Faggin, který
ry a vymysleli název pro celý systém: „rodina 4000“. Rodina se skládala
ze čtyř 16pinových čipů: 4001 obsahovalo 2 KB ROM; 4002 - RAM s
4-

bit výstupní port pro stahování programů; 4003 byl 10bitový

I/O expandér se sériovým vstupem a paralelním výstupem
domov pro komunikaci s klávesnicí, indikátorem a dalšími externími zařízeními; nicméně-
4004 byl 4bitový CPU (centrální procesorová jednotka). Toto je CPU
obsahoval 2300 tranzistorů a pracoval na hodinové frekvenci 108 kHz. 15. listopadu
1971

Bylo oznámeno vytvoření prvního mikroprocesoru. Busicom získal

vývoj, zaplatí Intelu 60 000 USD. Intel se však rozhodl tyto peníze vrátit společnosti Busicom,
znovu získat práva k mikroprocesoru.
i4004 měl výpočetní výkon srovnatelný s prvním elektronickým počítačem.
Yuter ENIAC (1946). 4004 našel své první praktické uplatnění v systému
ovládání semaforů a analyzátorů krve. Tento mikroproces
sor byl použit v palubním vybavení meziplanetární sondy Pioneer-10, která
ry vytvořil rekord v životnosti mezi podobnými zařízeními: byl uveden na trh v r
1972

a do září 2001 se Pioneer-10 vzdálil 11,78 miliardy km od Země a stále byl

fungovala a dost pravděpodobně funguje dodnes, i když v únoru 2003 NASA oficiálně
společensky se s ním rozloučil.

Úvod

Tak začalo vítězné tažení mikroprocesorů, které se později rozštěpily
do několika odrůd, které patří hlavně do dvou hlavních skupin:
mikroprocesory (MP) a samotné mikrokontroléry (MC). První
jsou určeny pro použití jako součást výpočetních systémů, nejběžnějších
většina z nich jsou osobní počítače (PC), takže se stále často používají
se nazývají „PC procesory“ (i když tato skupina obvykle zahrnuje také vyrobené
ovladač MP pro servery a některé další). V tom se MK od MP liší
že jsou primárně určeny k ovládání různých systémů,
tedy s relativně slabším výpočetním jádrem zahrnují
existuje mnoho dalších uzlů. Skutečnost, že pro konvenční MP se předpokládá
náhradní v externích čipsetech nebo přídavných modulech (paměť, vstupní porty)
výstup, časovače, řadiče přerušení, uzly pro zpracování analogového signálu
rybaření atd.), v MK se nachází přímo na čipu, proto byly kdysi v módě
říkejme tomu "mikropočítač".
Opravdu, v nejjednodušším případě postavit plně funkční
pro počítač jeden čip MK s připojeným
k němu připojená vstupní/výstupní zařízení. Moderní modely obyčejného monokrystalu
ocelové MK překračují výpočetní možnosti IBM PC AT na 286. pro-
procesor druhé poloviny 80. let. Jsou oblasti, kde je hranice mezi MP a
MK je obtížné provést: takové jsou například procesory pro mobilní zařízení, od
telefony a kapesní počítače až po digitální fotoaparáty, ve kterých je procesor
uzel musí mít pokročilé výpočetní funkce a musí spravovat více
četné externí komponenty.

Elektronika v řeckém stylu

V roce 1962 rodina Perlegos, řečtí emigranti nar
obyvatelé města Tripolis. Rodiče se jako ve své vlasti věnovali vinařství a synové
Novya, George a Gust Perlegos si vybrali módní specialitu strojírenství
inženýr elektroniky: oba vystudovali nejprve University of San Jose a poté Stanford
univerzita. V roce 1974, ve věku 24 let, nejmladší z bratrů, George Perlegos,
Začal pracovat v Intelu, kde se ocitl v jedné z nejpokročilejších oblastí:
vývoj elektricky mazatelné paměti, která nahradí vypálenou OTP ROM.
Ještě před Perlegos, téměř současně s vynálezem mikroprocesoru v roce 1971,
Zaměstnanec Intelu Don Frohman vynalezl plovoucí závěrku a vytvořil první UV
2K vymazatelná EPROM (256 8).

Z

POZNÁMKY NA OKRAJ

V „běžném“ životě používejte zkratky pro jednotky informací skládající se z jednoho písmene
"K" (stejně jako "M") se nedoporučuje: někdy je velmi obtížné pochopit, zda ano
o kilobitech, kilobajtech, „kiloslovech“ nebo obecně kilobitech za sekundu. Nicméně
takové zkratky se často vyskytují, a to i v technické dokumentaci, a my přijdeme
Někdy se snažím následovat tento příklad. Pro jistotu akceptujeme následující pravidla:
la: jediné velké písmeno „K“ znamená binární kilobity (1024 bitů), „M“ znamená binární kilobity
binární megabity (1024 kbitů). I když v literatuře je často stále přijímáno, že kilobajty jsou
zkracujte jako "KB" a kilobity jako "KB", pokusíme se tomuto zmatku vyhnout a v

Mikrokontroléry, jejich původ a použití

Ve všech ostatních případech zapište celé: kbyte a MB, kbit/s, MB/s. Až na-
bude označení velikosti paměti programů mikrokontroléru, pokud se vyrábí
měřeno ve dvoubajtových slovech: například 4K slova budou znamenat 4096 buněk -
slov (8 kbajtů).

George Perlegos se do tohoto procesu aktivně zapojil, nejprve svou účastí a
poté a pod jeho přímým vedením byly vytvořeny dvě technologie,
které se staly růstovým bodem pro celý průmysl flash pamětí – jedním z nich
hlavní pilíře moderní „digitální revoluce“. To bylo poprvé vynalezeno
čip 2716 - 16K (2048 8) EPROM s jedním napájecím napětím +5 V, a pak
2816 - první EEPROM, elektricky vymazatelná ROM, která se stala prototypem
flash paměti.
V roce 1981, Perlegos opustil Intel a s několika zaměstnanci (včetně
byl Gordon Campbell, budoucí tvůrce další slavné společnosti Chips &
Technologies) vytváří společnost Seeq. Byla to doba úpadku elektronického průmyslu.
industrializace ao tři roky později musela společnost kvůli reklamaci opustit
mi investoři. George a jeho bratr Gust a několik dalších už jim nevěří
V roce 1984 jsme se zaměstnanci Seeq vytvořili společnost s osobními prostředky,
jehož celé jméno zní jako Advanced Technology MEmory and Logic nebo
zkráceně Atmel.
Zpočátku byly produkty Atmel energeticky nezávislé paměťové čipy všech typů
nové funkce - jako OTP EPROM a EEPROM se sériovým a paralelním připojením
přístup a Flash. V roce 1985 Atmel vydal první na světě domácí EEPROM.
dnes vznikající technologie CMOS a v roce 1989 první napájená flash paměť
z jednoho napětí +5 V. Koncem 80. let se Intel rozhodl potrestat řadu společností
Společnosti vyrábějící EPROM, včetně Atmelu, za údajné porušení patentů,
ale nakonec se podařilo dohodnout výměnu licencí. A nakonec-
Nakonec Atmel získal licenci na výrobu klasických mikrokontrolérů.
ler 8051, od jehož podpory již Intel v té době postupně ustupoval, se soustředil
hon na PC procesory.

P

PODROBNOSTI

Připomeňme, že EEPROM se od flash paměti liší tím, že první umožňuje
samostatný přístup k libovolné buňce a druhý - pouze k celým blokům. Podle-
tato EEPROM má menší objem (typický objem specializovaných mikro-
EEPROM obvody - od jednotek kilobitů po jednotky megabitů) a dražší, aktuálně
používá se především pro ukládání dat, mimo jiné jako součást mikrokontrolérů
Lerov. Flash paměť je jednodušší a levnější a také poskytuje výrazné zvýšení rychlosti.
růst s velkými objemy informací, zejména se streamováním čtení/zápisu,
typické pro mediální zařízení (jako jsou digitální fotoaparáty nebo MP3 přehrávače). Zahrnuta
K ukládání programů slouží flash paměť mikrokontrolérů. Nějaké detaily
Další informace o různých typech paměti a jejich fungování viz Kapitola 11.

Atmel se tak ocitl „vtažen“ do množství výrobců mikrokontrolérů, ve kterých
rum se velmi rychle ocitl na prvních pozicích: výroba začala v roce 1993
první MCU AT89C51 v oboru s vestavěnou pamětí flash programu. To znamená
začala revoluce ve veškeré strojírenské praxi, protože stávající
Dříve měly MK buď jednorázovou programovatelnou OTP paměť, popř

Úvod

UV omyvatelný, který je mnohem dražší na výrobu a práce s ním vede
vede k velké ztrátě času vývojáře. Počet přepisovacích cyklů pro UV
PROM nepřesahuje několik desítek a dopadá přímé denní světlo
takový krystal může vést k vymazání informací. Proto i malé
ry přístroje musely být vyráběny především pomocí
jíst OTP ROM, což je mnohem riskantnější: vyměňte v případě i sebemenších
chyby v nahraném programu již nebyly možné. Vznik flash pamětí z
změnila celou „krajinu“ v této oblasti: byla to v důsledku jejího zavedení ta ocel
možné věci, jako je aktualizace softwaru systému BIOS počítače nebo „re-
řídicí programy pro řešení spotřební elektroniky.
V roce 1995 dva studenti z Norské univerzity vědy a technologie v Tron-
Heime, Alf Bogen a Vegard Wollen přišli s myšlenkou 8bitového RISC jádra, které
která byla navržena vedení Atmelu. Jména vývojářů jsou zahrnuta v názvu umění.
Architektury AVR: Alf + Vergard + RISC. Nápad se mi zalíbil natolik, že v roce 1996
Výzkumné centrum Atmel bylo založeno v Trondheimu a již na konci téhož roku
První experimentální mikrokontrolér nové řady AVR tzv
AT90S1200. Ve druhé polovině roku 1997 začala společnost Atmel Corporation sériově
produkce rodiny AVR.

Proč AVR?

Regulátory AVR „od narození“ mají dvě vlastnosti, které je odlišují
rodina ze zbytku MK. Nejprve instrukční sada a architektura jádra AVR
byly vyvinuty ve spolupráci se společností, která vyvíjí kompilátory pro pro-jazyky
vysokoúrovňové programování systémů IAR. V důsledku toho se to stalo možným
psát AVR programy v C bez velké ztráty výkonu
ve srovnání s programy napsanými v jazyce symbolických instrukcí. Další podrobnosti o tom
probereme to v Kapitola 5.
Za druhé, jednou z významných výhod AVR bylo použití dopravníku
ra. V důsledku toho neexistuje žádný koncept strojového cyklu pro AVR: většina
příkazy se provádějí v jednom hodinovém cyklu. Pro srovnání podotýkáme, že ti, kteří používají
MK z rodiny PIC jsou velmi oblíbené, provádějí příkaz ve 4 hodinových cyklech a třídu
sical 8051 - obecně ve 12 cyklech (i když existují i ​​moderní modely X 51 s ma-
autobusový cyklus v jednom cyklu).
Pravda, zároveň jsme museli trochu obětovat jednoduchost příkazového systému,
zvláště patrné ve srovnání s X 51, kde jsou například veškeré spediční operace
data uvnitř správce, bez ohledu na způsob adresování, se provádějí stejným způsobem
národní tým

v různých variantách, zatímco v AVR téměř pro

Každá metoda má svůj vlastní příkaz a někdy s omezeným rozsahem činnosti.
viya. V oblasti operací s bity jsou určité potíže. To však není
vede k znatelným potížím při učení AVR assembleru: naopak texty
programy jsou kratší a více připomínají program ve vysokém jazyce
úroveň. Je třeba také vzít v úvahu, že z celkového počtu týmů od 90 do 130, v závislosti
v závislosti na modelu je pouze 50–60 jedinečných, zbytek je zaměnitelný.

Mikrokontroléry, jejich původ a použití

A konečně tato nevýhoda je zcela odstraněna při použití jazyka C,
ve skutečnosti vyrovnává různé architektury z hlediska pro-
programování
Obrovskou výhodou architektury AVR je přítomnost 32 operačních registrů,
ne zcela rovnocenné, ale dovolující v některých případech se neobrátit
RAM a nepoužívat zásobník (což je v podstatě nemožné ve stejném
rodina X 51), navíc u nižších modelů AVR není zásobník obecně dostupný
programátor Proto se struktura assemblerových programů pro AVR stala podezřelou.
se velmi podobají jazykovým programům na vysoké úrovni, kde fungují příkazy
ne s paměťovými buňkami a registry, ale s abstraktními proměnnými a konstantami.
Další vlastností AVR z hlediska návrhu obvodu je, že všechny piny jsou in
mohou být ve třech stavech (vstup - vypnuto - výstup) a elektricky
lyže jsou struktury CMOS (tj. existuje symetrie výstupu
signály a vysoký odpor pro vstup). Obecně je to významné
pohodlnější než porty X 51 (bistabilní a kompatibilní s TTL) a navrhuje lepší
odolnost proti rušení (alespoň od rušení na zemní sběrnici).
Po shrnutí názorů z různých zdrojů a na základě vlastních zkušeností
autor došel přibližně k následujícímu rozdělení oblastí použití tří nejvíce
běžné rodiny ovladačů.

Ovladače klasické architektury X 51 (první mikroobvody rodiny
8051 byly vydány na začátku 80. let) jsou nejlepší pro obecné
studium předmětu. Všimněte si, že kromě Atmel, X 51 kompatibilních produktů,
zahajuje asi tucet dalších společností, včetně takových gigantů jako Philips a
Siemens, existují také domácí analogy (řada 1816, 1830 atd.), díky čemuž
architektura je nejuniverzálnější.

Řada AVR je doporučena pro začínající elektrotechnické praktiky,
díky jednoduchosti a všestrannosti zařízení je kontinuita struktury pro
různé typy regulátorů, jednoduchost návrhu obvodu a programování
(v tomto případě „programování“ znamená proces nahrávání programu
gram na čip).

Microchip PIC jsou ideální pro navrhování jednoduchých zařízení.
roje, zejména ty určené k replikaci.

Tato klasifikace je do značné míry subjektivní a autor nebude zpochybňovat ostatní
úhel pohledu: různé rodiny MK se postupně parametry přibližují,
se stávají zcela zaměnitelnými a jako ve všech moderních elektroinstalacích
Nicku, volba té či oné rodiny má často „náboženský“ charakter.
Navíc tři zmíněné čeledi MK jsou jen nejčastější
mezi univerzálními ovladači, ale zdaleka ne nejoblíbenějšími obecně. Všeobecné
počet existujících rodin mikrokontrolérů se odhaduje na cca.
Ve skutečnosti je jich více než 100 a každým rokem se objevují další a další. Každý z
tyto rodiny mohou zahrnovat desítky různých modelů. Zároveň první místo
mezi výrobce 8bitových MK tradičně patří Motorola,
hlavně kvůli ovladačům pro mobilní zařízení. Společnost zabývající se mikročipy

Úvod

Se svou rodinou PIC je na třetím místě a Atmel je až šestý. přičemž
Kromě 8bitových AVR MCU vyrábí Atmel několik dalších typů MCU,
mezi které patří nejen zmínění nástupci 8051, ale také ARM-
procesory a specializované mikrokontroléry pro různé aplikace. Nicméně
tato formální statistika zatím nic neznamená - např. mezi MK s vestav
Flash paměti Atmel již vlastní třetinu celosvětového trhu.
Ještě v letech 2002–2003 se na světě ročně vyrobilo 3,2 miliardy kusů mikronádob.
trollové. Všimněte si, že objem výroby PC procesorů lze odhadnout na
200 milionů kusů ročně, tj. je to jen asi 6 % trhu (ve finančním vyjádření)
Obecně je ale poměr jiný, protože typická cena běžného MK
je 2–5 dolarů a procesor PC je minimálně o řád vyšší a
někdy dosahuje stovek dolarů). Proto by nebylo přehnané říci
že specialita elektronického inženýra specializujícího se na mikro-
řadiče, je neméně důležitý a vzácný než počítačový programátor -
systémový inženýr nebo tvůrce vlastních aplikací.

Tato kniha je určena čtenářům, kteří chtějí studovat strukturu a návrh obvodů
speciální funkce AVR MK a naučte se správně používat jejich hlavní funkce
možnosti. Proto se autor omezuje na jazyk symbolických instrukcí (přečtěte si další otázku
Podíváme se na výběr programovacího prostředí v Kapitola 5). Důraz v knize je
poskytnout čtenáři praktické rady, popsat hotové algoritmy pro
typické úkoly, které pro vývojáře vznikají při implementaci určitých
Funkce MK. Autor spolu se čtenáři podrobně zkoumá řadu otázek, které
ry obvykle přesahují rámec programovacích příruček MK: práce s po-
praktická rozhraní, aritmetické operace, rozhraní s PC, praktické
technická implementace režimů úspory energie.
Autor si přitom nekladl za cíl podrobně rozebrat úplně všechno možné -
STI MK AVR: na to by nestačilo ani pár svazků. Jsme nuceni jít kolem
problémy, jako je ladění a programování pomocí rozhraní JTAG, jsou slibné
vy, kteří objevujete samoprogramování ovladačů, jen zběžně
Těšíme se na nejzajímavější problém syntézy zvuku a další aplikace PWM režimů
časovače.
V této knize je většina příkladů zaměřena na použití moll
(s kapacitou paměti 8 MB) modely podrodiny Mega, protože jsou nejvíce
Všestrannější a vhodný pro širokou škálu úkolů bez zbytečné složitosti
systém. V jednodušších případech se autor zaměřil na to nejuniverzálnější
z mladších modelů ATtiny2313 (o jeho kompatibilitě s „klasickou“ verzí
AT90S2313 cm. sekce kapitola "Počítací program používající přerušení".
ty 5
). Většinu uvedených příkladů lze provést prakticky bez úprav.
přizpůsobené jiným modelům AVR s příslušnou konfigurací
ní.

ČÁST

Obecné principy zařízení

a fungování Atmel AVR

Kapitola 1. Recenze mikrokontrolérů Atmel AVR

Kapitola 2. Obecná struktura, organizace paměti,

taktování, reset

Kapitola 3.Úvod do periferií

Kapitola 4. Přerušení a úsporné režimy

K A P T E R

Recenze mikrokontroléru
Atmel AVR

Atmel AVR je rodina všestranných 8bitových mikrokonektorů
troleje založené na společném jádru s různými vestavěnými periferiemi
roje. Možnosti AVR MK umožňují řešit mnoho typických problémů,
vznikající před vývojáři radioelektronických zařízení.
Vlastnosti mikrokontrolérů Atmel AVR.

Výkon je asi 1 MIPS/MHz. MIPS (Miliony instrukcí za
Za druhé, milion příkazů za sekundu) je jedním z nejstarších av mnoha ohledech
špatná charakteristika výkonu procesoru, protože instrukční sady
pro různé procesory jsou různé, a tedy stejný počet
instrukce v různých systémech poskytnou různé užitečné výsledky. Nicméně
pro jednoduché 8bitové výpočetní systémy, které neobsahují instrukce, provozní
zabývající se velkými čísly, čísly s pohyblivou řádovou čárkou a poli
údaje, je to dobrý ukazatel pro srovnání jejich výkonnosti. Vypočítat
Výkonnostní jádro AVR u řady úkolů přesahuje 16krát
řadový procesor 80286.

Pokročilá architektura RISC. Koncept RISC (Reduced).
Instrukční sada Computing, výpočty s redukovanou sadou instrukcí).
vyžaduje přítomnost sady příkazů skládající se z minima kompaktních a rychlých
provádění pokynů; přitom takové těžkopádnější operace jako
výpočty s plovoucí desetinnou čárkou nebo vícebitová aritmetika
v reálných číslech se předpokládá implementace na úrovni podprogramů. Pojem
RISC zjednodušuje strukturu jádra (typické jádro AVR obsahuje pouze 32 tisíc jednotek).
tranzistory, na rozdíl od desítek milionů v PC procesorech) a zrychlil
demonstruje jeho činnost: typická instrukce se provádí v jednom hodinovém cyklu (kromě příkazů
větvení programu, přístup do paměti a některé další operace
dlouhá data). AVR má jednoduché dvoustupňové ovládání
Weir, když je příkaz vykonán v jednom hodinovém cyklu, zatímco je vyzvednut další.
Na rozdíl od architektur Intel nemá „klasický“ AVR hardwarový násobič
dělení/dělení, nicméně podrodina Mega obsahuje operace násobení.

Oddělené příkazové a datové paměťové sběrnice. AVR (jako většina ostatních
mikrokontroléry) má tzv. Harvardská architektura, kde paměťové oblasti