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ý.
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