Podobné dokumenty






Komerèní využití stavebních návodù je povoleno jen s písemným souhlasem autora a nakladatelství. Soubory na CD ROM mající pøímo vztah ke knize, které





APLIKACE MIKROKONTROLÉRŮ PIC32MX


PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

ALGORITMY ČÍSLICOVÉHO ZPRACOVÁNÍ SIGNÁLŮ

Roman Neruda a Tomáš Holan C++ BUILDER V PØÍKLADECH Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo rozmnožo

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy






MIKROPROCESOROVÁ TECHNIKA 9 Událostní systém 9.1 Události Síť ERN Časování událostí Filtrace




APLIKACE ALGORITMŮ ČÍSLICOVÉHO ZPRACOVÁNÍ SIGNÁLŮ 1. DÍL



Jan Humlhans NÁBOJOVÉ PUMPY funkce, pøehled a použití Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo rozmno


Autor by chtìl podìkovat všem svým spolupracovníkùm a kolegùm, kteøí mu pomohli s pøípravou textu. K vydání knihy pøispìla firma Newport Electronics s



4 DIELEKTRICKÉ OBVODY ZÁKLADNÍ POJMY DIELEKTRICKÝCH OBVODŮ Základní veličiny a zákony Sériový a paralelní






David Matoušek ÈÍSLICOVÁ TECHNIKA základy konstruktérské praxe Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována ne




Monografie poskytuje v pøehledné a praktické formì znalosti a výpoèetní nástroje pro modelování šíøení rádiových vln v zástavbì, tedy vnì i uvnitø bud

Jan Hájek ELEKTRONICKÉ HLEDAÈE Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo rozmnožována jakoukoli formou


Podìkování: Výsledkù publikovaných v této knize bylo dosaženo také za podpory projektù GAÈR 101/06/P108 Výzkum simulaèního a experimentálního modelová




Publikace prezentuje nìkteré poznatky z obsáhlé oblasti analogových soustav, které v poslední dobì prodìlávají rozvoj. Z toho dùvodu ani nemùže podat


Kniha je urèena všem zájemcùm o teorii elektrických obvodù Poslouží jako pøíruèka pro praxi, ale i jako uèebnice pro studenty støedních a vysokých ško


MIKROKONTROLÉRY PIC BEZ PŘEDCHOZÍCH ZNALOSTÍ




MIKROKONTROLÉRY PIC PRO POKROČILÉ


Gergelitsová, Holan: Zlatý řez pravítkem a kružítkem





ELEKTRONICKÉ PRVKY 7 Výkonové a spínací aplikace tranzistorů 7.1 Ztrátový výkon a chlazení součástky První a druhý průraz bipolárního




Tato kniha popisuje výchozí stanoviska psychotroniky jako potenciální vìdní disciplíny Tvoøí ucelenou pracovní hypotézu pro realizaci základního výzku








Translation from the English language edition: Passing the marker Understanding the New Millennium Energy Copyright 2000 Lee Carroll All Rights Reserv



NOiYHVQLFH SVDFtKR VWURMH Í (Q Ï Á. (VF ) )SURJUDPRYDWHOQpNOiYHV\) ) 3VF 6F/ 3DX NRQWURON\ ,QV +RPH 3J8S 7DE 'HO (QG 3J'Q &DSV/ (QWHU Í 6KLIW

Základy ultrazvuku A. ZÁKLADY ULTRAZVUKU 10


1.2 Realizace èekání pomocí jednoduché programové smyèky Pøíklad 3: Chceme-li, aby dítì blikalo baterkou v co nejpøesnìjším intervalu, øekneme mu: Roz




3/ %,1'(& 83'1 &( &3 )XQNFH. + ; ; ; ; / ; ; + ; EH]H]PuQ\






Karel Zaplatílek a Bohuslav Doòar MATLAB zaèínáme se signály Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo

Úøad prùmyslového vlastnictví. s e ž á d o s t í o z á p i s d o r e j s ø í k u. Údaje o ochranné známce - oznaète køížkem

Urèeno uživatelùm CB pásma, kteøí si chtìjí rozšíøit okruh vìdomostí, rádiovým posluchaèùm a všem, kteøí se pøipravují ke zkouškám pro povolení provoz

Øízený pøeklad - make



Transkript:

Mikrokontoléry Atmel AVR ASSEMBLER Vladimír Váòa Praha 2003

Publikace poskytuje základní informace dùležité pro aplikaci jednoèipových mikrokontrolérù AVR firmy ATMEL Klade si za cíl seznámit pøedevším zaèáteèníky s tvorbou programového vybavení pro mikrokontroléry AVR Volnì navazuje na knihu "Mikrokontroléry Atmel AVR popis procesoru a instrukèní soubor" V této knize se budeme vìnovat pouze jednomu assembleru a to ATMEL AVR assembleru pro mikrokontroléry øady AT90S Tento assembler poskytuje zdarma firma ATMEL Nejprve se seznámíme se strukturou AVR programù v assembleru, práci s registry, porty, použitím SRAM, øízením chodu programù a provádìním výpoètù v assemblerech AVR Rovnìž je uveden popis ATMEL assembleru AVR tak, jak ho uveøejnil výrobce v helpu k tomuto assembleru Tyto kapitoly obsahují jen fragmenty kódù Proto je na konci knihy uvedeno pro zaèáteèníky nìkolik jednoduchých, avšak úplných programù, odzkoušených s AT90S8515 ve startkitu uvedeném v pøíloze Na doprovodném CD jsou kromì výpisù programù a softwarových balíkù umístìna i klišé plošných spojù všech ètyø pøípravkù (programátoru ISP a tøí startkitù) Vladimír Váòa Mikrokontroléry Atmel AVR assembler Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo rozmnožována jakoukoli formou (tisk, fotokopie, mikrofilm nebo jiný postup), zadána do informaèního systému nebo pøenášena v jiné formì èi jinými prostøedky Autor a nakladatelství nepøejímají záruku za správnost tištìných materiálù Pøedkládané informace jsou zveøejnìny bez ohledu na pøípadné patenty tøetích osob Nároky na odškodnìní na základì zmìn, chyb nebo vynechání jsou zásadnì vylouèeny Všechny registrované nebo jiné obchodní známky použité v této knize jsou majetkem jejich vlastníkù Uvedením nejsou zpochybnìna z toho vyplývající vlastnická práva Veškerá práva vyhrazena Vladimír Váòa, Praha 2003 Nakladatelství BEN technická literatura, Vìšínova 5, Praha 10 Vladimír Váòa: Mikrokontroléry Atmel AVR assembler BEN technická literatura, Praha 2003 1 vydání ISBN 80-7300-093-8

OBSAH Co najdete na doprovodném CD-ROM 7 Ještì než se zaètete 8 Assemblery 9 1 Struktura AVR programù v assembleru 11 Komentáøe 11 Zaèátek programu 12 Struktura programového kódu 13 2 Registry 17 Rozdílné registry 18 Registry ukazatele 19 Shrnutí o používání registrù 22 3 Porty procesorù AVR 23 Nìkteré dùležité porty u AVR 25 Stavový registr 26 Vstupní/výstupní brány AVR 27 4 Použití SRAM v AVR assembleru 29 SRAM 29 Dùvody používání SRAM 30 Ukázky používání SRAM 30 A MIKROKONTROLÉRY ATMEL AVR ASSEMBLER 3

Použití SRAM jako zásobníku 32 Definice SRAM jako zásobníku 32 Použití zásobníku 33 Chyby pøi zásobníkových operacích 34 5 Øízení chodu programu 35 Reset 35 Lineární provádìní programu a skoky 37 Èasování pøi bìhu programu 38 Makra a bìh programu 39 Podprogramy 40 Pøerušení a bìh programu 42 6 Výpoèty v AVR assembleru 47 Základní datové typy v assembleru 47 BCD (Binary Coded Digits) 48 Zhuštìná BCD 49 Èísla v ASCII formátu 49 Bitové operace 50 Posuv a rotace 51 Sèítání, odèítání a porovnávání 53 Konverze èíselných formátù 56 7 AVR assembler 59 Obecné informace 59 Zdrojový kód assembleru 59 Mnemonické instrukce 60 4 VLADIMÍR VÁÒA A

Direktivy assembleru 65 Výrazy 74 Funkce 79 Obecné použití 79 8 První program Støídavé rozsvìcení LED programované pomocí èasových smyèek 85 Pøíklad 2 Støídavé rozsvìcení LED programované pomocí maker 93 Pøíklad 3 Støídavé rozsvìcení LED programované pomocí podprogramu 95 Pøíklad 4 Ovládání rozsvìcení LED pomocí tlaèítek 97 Pøíklad 5 Ovládání rozsvìcení LED pomocí tlaèítek s použitím rùzných programátorských obratù 99 Pøíklad 6 Programování hardwarového èítaèe v poling módu 104 Pøíklad 7 Programování hardwarového èítaèe s použitím pøerušení 107 Pøíklad 8 Využití hardwarového èítaèe ke generování sekundových tikù a jejich èítání s pøevodem výsledku do BCD kódu 110 Pøíklad 9 Programování s využitím tabulky pevných hodnot 116 A MIKROKONTROLÉRY ATMEL AVR ASSEMBLER 5

Pøíklad 10 Ukázka programátorských fint, volání podprogramu pomocí zásobníku 119 Pøíklad 11 Vysílání a pøíjem sériových znakù pomocí UARTu 121 Pøíloha Pøíloha 1 Popisek zapojení tlaèítek a LED pøipojených k portùm 125 Pøíloha 2 Pøíklady zapojení s MCU AVR konstrukce startkitù 126 Programovací jazyky pro AVR 126 Pøíloha 3 AVR ISP programátor 135 Literatura 137 Pøehled pøípravkù ATMEL a plošné spoje 138 Knihy nakladatelství BEN technická literatura 139 Kontaktní adresy na firmu BEN technická literatura 143 Pár slov o nakladatelství BEN technická literatura 144 6 VLADIMÍR VÁÒA A

CO NAJDETE NA DOPROVODNÉM CD-ROM Doprovodné CD-ROM obsahuje všechny informace potøebné pro snadnou práci s knihou Tyto informace lze rozdìlit do logických celkù, které se nacházejí v oddìlených adresáøích: n n n n n adresáø BEN obsahuje off-line verzi www stránek nakladatelství BEN technická literatura (aktualizováno k poèátku léta 2003), jejichž souèástí je poèítaèová verze tištìného katalogu Edièního plánu jaro a léto 2003 a samostatného pøehledu naší produkce BEN 2003 adresáø DATASHEET obsahuje dokumentaci ve formátu PDF vybraných integrovaných obvodù ATMEL, které jsou v knize používány Najdete zde též samorozbalitelný archiv programu Adobe Acrobat Reader verze 5 0, který slouží k prohlížení PDF souborù, adresáø PRIKLADY obsahuje zdrojové i pøeložené formy všech programù realizovaných v knize, adresáø SPOJE obsahuje klišé plošných spojù všech pøípravkù popsaných v knize ve formátu TIF, aby si ètenáøi pøípadnì mohli plošné spoje upravit podle vlastních pøedstav Nìkteré spoje jsme ještì v redakci dodateènì upravovali (tvar úchytných plošek pro souèástky, ), takže finální verze je uložena pouze ve formátu TIF (je shodná s klišé otištìnými v knize) adresáø SW obsahuje samostatné složky s volnì šíøitelnými verzemi nebo demoverzemi vývojového prostøedí urèeného pro procesory ATMEL AVR ATMEL obsahuje pøedevším více verzí vývojového prostøedí AVR Studio v3 20, v3 56 a v4 07 Všechny verze pracují pod operaèním systémem Windows Starší verze (3 xx) jsme uvedli proto, že pracují témìø na každém PC s prostøedím alespoò Windows 95 Navíc je na CD program WAVRASM v1 30, který rovnìž umožòuje kompletní vývoj programù pro ATMEL AVR v assembleru Pro ètenáøe bude jistì i užiteèný ovládací program pro programátor ATMEL AVR ISP 3 30, který je rovnìž ve složce ATMEL BASCOM vývojové prostøedí vèetnì pøekladaèe z jazyka, který se podobá známému Visual Basicu 6 0 Je produktem firmy MCS Electronics Omezení je na maximálnì 2 kb výsledného kódu (HEX) Výhodou jsou speciální pøíkazy podporující práci s LCD displeji, komunikaci I 2 C, 1WIRE atd CVAVR výborným kompilátorem C pro AVR, vèetnì vývojového prostøedí, je CodeVision AVR Rovnìž tento pøekladaè C lze nainstalovat jako souèást AVR Studia Zdarma je jeho školní verze (CodeVisionAVR C Compiler v1 23 5 Evaluation), jejímž jediným omezením je velikost výsledného kódu do 2 kb GNU_C Kompilátor C, který lze nainstalovat jako souèást AVR Studia Na tento pøekladaè není žádné èasové omezení nebo omezení velikosti kódu Je k dispozici zcela zdarma Pro jeho užití je pouze nutné dodržet licenci GNU IAR obsahuje èasovì omezená vývojová prostøedí firmy IAR Jedná se pøedevším o assembler a pøekladaè z jazyka C/C++ Konkrétnì se jedná o IAR Embedded Workbench Evaluation version for Atmel AVR v2 27B a IAR Embedded Workbench Assembler Edition for Atmel AVR v1 50B Navíc je zde umístìn i produkt IAR MakeApp for Atmel AVR v3 01 JAVA klasická Java, ke které jsou pøidány knihovny JEPES dánské firmy Mjolner Informatics Demoverze umožòuje programovat pouze AT90S8515 PASCAL ideální prostøedek pro programování, jedná se o školní verzi produktu (demo) nìmecké firmy E-LAB Computers Omezení je na maximálnì 4 kb výsledného kódu (HEX), což pro vìtšinu aplikací staèí V assembleru to pøedstavuje cca 6000 øádkù kódu PONYPROG volnì šíøitelný ovládací program firmy LancOS, který je urèen pro programátory mnoha typù vèetnì mikrokontrolérù ATMEL AVR Program je lokalizován do mnoha svìtových jazykù vèetnì slovenštiny PROG910 ovládací sw pro programátor s AT90S1200 Autor knihy jej upravil i pro mikrokontrolér AT90S8535 A MIKROKONTROLÉRY ATMEL AVR ASSEMBLER 7

JEŠTÌ NEŽ SE ZAÈTETE Publikace poskytuje základní informace dùležité pro aplikaci jednoèipových mikrokontrolérù AVR firmy ATMEL Navazuje na knihu Mikrokontroléry Atmel AVR, popis procesoru a instrukèní soubor, která seznamuje ètenáøe pøedevším s RISCovou architekturou mikrokontrolérù ATMEL øady AT90 a se souborem instrukcí popisuje tedy pøedevším hardware a instrukèní soubor Jeho znalost se nám bude hodit v této další publikaci, jež si klade za cíl seznámit pøedevším zaèáteèníky s tvorbou programového vybavení pro mikrokontroléry AVR K tvorbì programového vybavení je potøeba mít vhodné nástroje a znalosti, jak tyto nástroje používat Mají vývojáøùm co nejvíce usnadnit práci, zlevnit a zrychlit vývoj konkrétních aplikací Tìmito nástroji jsou pøekladaèe z kódu nìjakého programovacího jazyka do strojového kódu MCU AVR, simulátory, emulátory a vlastní vývojové prostøedí Pokud jde o programovací jazyky pro mikrokontroléry AVR, máme k dispozici jednak rùzné jazyky symbolických adres, jednak vyšší programovací jazyky C/C++, Pascal a Basic U velkých poèítaèù (mezi nì mùžeme poèítat i poèítaèe PC, pokud je budeme srovnávat s jednoèipáky ) byl dlouhou dobu nejrozšíøenìjším a nejžádanìjším programovacím jazykem C++ a C Podle nìkterých studií byl v poslední dobì pøedstižen jazykem Java Jde o objektový jazyk odvozený od C a C++, pùvodnì vyvíjený pro vestavìné (Embedded) systémy, což je odborný termín pro bìžná elektronická zaøízení (typu praèky, mikrovlnné trouby atd ) ovládaná zabudovaným mikroprocesorem Firma SUN, která tento jazyk vyvíjela, si brzy uvìdomila vzrùstající dùležitost WWW a možnosti využít Javu pro programování aplikací pro WWW Proto si vìtšinou spojujeme Javu právì s Internetem Rozšíøenost Javy a její výhody vedly v poslední dobì k tomu, že si ji všimli ti, kterým byla pùvodnì urèena vývojáøi embedded zaøízení Jako pøíklad si mùžeme uvést programování mobilních telefonù v Javì Ze vzrùstající oblíbenosti Javy i pøi vývoji programového vybavení pro embedded zaøízení lze usuzovat, že zasáhne i vývoj pro MCU AVR (viz napø projekt/knihovna Javy JEPES dánské firmy Mjolner Informatics z jejichž www stránek si lze zdarma stáhnout funkèní demo verzi umožòující programovat AT90S8515 v Javì) Kromì ulehèení práce vývojáøe je další výhodou použití vyšších programovacích jazykù pøi tvorbì programového vybavení pro MCU, èi jednoèipové mikropoèítaèe i to, že zdrojový kód programu urèeného pùvodnì pro urèitý typ MCU se dá snadnìji pøepsat na zdrojový kód jiného typu MCU, jiného výrobce než pøepisovat kód, který je více závislý na hardware (assembler) Jako pøíklad mohu uvést napø IAR Embedded Workbench, což je jednotné vývojové prostøedí s velkým poètem pøekladaèù z jazyka C++ do strojových kódù rùzných jednoèipových mikropoèítaèù a mikrokontrolérù, samozøejmì vèetnì ATMEL AVR, x51, PIC atd Stále však existuje jistá tøída úloh, kterou ve vyšších programovacích jazycích nelze realizovat, nebo 8 VLADIMÍR VÁÒA A

k nimž nemáme v pøíslušném vyšším jazyce zabudovanou podporu V tom pøípadì musíme použít jazyk symbolických adres assembler Nejefektnìjší v takovém pøípadì je napsat aplikaci ve vyšším programovacím jazyce a jen její èást v assembleru Proto i v pøípadì, že používáme vyšší programovací jazyky, je dobré mít alespoò základní znalosti programování v assembleru K jejich získání má posloužit tato kniha Programování AVR aplikací ve vyšších programovacích jazycích budou pøedmìtem dalších publikací Assemblery Jazyky symbolických adres patøí mezi nejstarší programovací jazyky, se kterými se setkáváme již u poèítaèù první generace, tedy již pøed nìkolika desítkami let Døíve, než se u poèítaèù objevily, programovalo se pøímo ve strojovém kódu, tj vìtšinou v binární, oktalové nebo hexadecimální reprezentaci instrukcí poèítaèe Všechny objekty, s nimiž poèítaè pracoval, byly pochopitelnì oznaèovány pouze èíselnì Napø naplnìní registru 16 konstantou má ve strojovém jazyce mikrokontroléru ATMEL AVR tvar: 1100 1111 0000 0110 Poznámka: Že jde o binární reprezentaci, budeme zapisovat 0b1100111100000110 Je zøejmé, že programování ve strojovém jazyce je obtížné a nepøehledné a mohlo vyhovovat jen v úplných zaèátcích, kdy programy byly krátké a jednoduché Se zdokonalováním technického vybavení rostly nároky na programy a programování ve strojovém jazyce zaèalo být neúnosné Brzo se však zjistilo, že pracnost programování lze znaènì snížit, zrušíme-li nutnost oznaèovat objekty v instrukcích èíselnì (vyhovuje stroji) a zavedeme-li symbolické oznaèování objektù (vyhovuje èlovìku) s tím, že vazbu symbolù na jejich èíselné vyjádøení nebude provádìt programátor, ale zajistí ji specializovaný program pøekladaè Tak vznikly jazyky symbolických adres, v nichž se mohly operaèní znaky instrukcí a jejich operandy oznaèovat symboly, a pøekladaèe jazykù symbolických adres (assemblery), které pøekládaly symbolický jazyk do strojového jazyka V dalším vývoji byly do jazykù symbolických adres doplòovány nové prostøedky (napø makrojazyk, makra), pøièemž vývoj byl obvykle spjat s rozšíøením symbolických objektù Makrojazyk je napø založen na možnosti pojmenovat posloupnost instrukcí, bez makrojazyka bylo možné pojmenovávat pouze objekty v instrukcích Brzy se ukázalo, že programátorovi lze práci ještì více usnadnit, zbavíme-li ho závislosti na instrukèní síti poèítaèe, se kterou byl spjat i pøi programování v jazyce symbolických adres Objevily se proto jazyky nezávislé na poèítaèi, které jsou na- A JEŠTÌ NEŽ SE ZAÈTETE 9

vrženy tak, aby programátor instrukèní èást poèítaèe vùbec nemusel znát Jazyky symbolických adres však nebyly zcela nahrazeny, nebo stále existují úlohy, které ve vyšších programovacích jazycích nelze vyøešit Pøi programování v jazyce symbolických adres se totiž dostáváme do nejužšího styku se systémem, s hardware Velké poèítaèe obvykle øeší úlohy, snadno øešitelné pomocí vyšších programovacích jazykù, jednoèipové mikropoèítaèe a mikrokontroléry naopak úlohy, øešitelné assemblery Vyšší programovací jazyky jsou implementovány øadou výrobcù a pro mnoho rùzných procesorù pracujících pod rùznými operaèními systémy, èasto pro urèitý operaèní systém a procesor existuje i dosti velký poèet rùzných pøekladaèù z téhož jazyka Rùzné verze pøekladaèù téhož jazyka se liší rychlostí pøekladu, velikostí a rychlostí výsledného kódu, komfortem vývojového prostøedí, knihovnami atd Definice vlastního vyššího programovacího jazyka, jeho lexikální symboly, syntaxe, sémantika, je však èasto dána nìjakou normou, a mezinárodní (napø ANSI C, ANSI C++) nebo podnikovou (Java u SUNu) Proto rùzné pøíruèky èi uèebnice napø jazyka C, C++, Javy jsou použitelné pøi práci s rùznými pøekladaèi Mùžeme øíci: programuji v C++, Javì, Pascalu, SQL, C# Prohlásit programuji v assembleru již není tak jednoznaèné Z toho, co jsme o assemblerech zatím uvedli je zøejmé, že máme mnoho rùzných assemblerù Jednak rùzné procesory mají rùzné instrukèní soubory, jednak jsou rozdíly i mezi assemblery pro urèitý konkrétní typ procesoru Vždy je nutné prostudovat dokumentaci k pøíslušnému assembleru My se v této knize budeme vìnovat pouze jednomu assembleru a to ATMEL AVR assembleru pro mikrokontroléry øady AT90S Tento assembler poskytuje zdarma firma ATMEL Je naprosto odlišný od assemblerù napø pro 8086 èi x51 nebo PIC Na druhé stranì bude mít hodnì spoleèného s jinými assemblery pro MCU øady AT90S, napø s IAR AVR assemblerem, takže informace z této knížky mùžeme s urèitou dávkou opatrnosti použít i pøi práci s jinými assemblery pro AVR V následujících kapitolách se nejprve seznámíme se strukturou AVR programù v assembleru, práci s registry, porty, použitím SRAM, øízením chodu programù a provádìním výpoètù v AVR assembleru Rovnìž je uveden popis ATMEL AVR assembleru tak, jak ho uveøejnil výrobce v helpu k tomuto assembleru Tyto kapitoly obsahují jen fragmenty kódù Proto na konci knihy je pro zaèáteèníky uvedeno nìkolik jednoduchých, ale úplných programù, odzkoušených s AT90S8515 v startkitu uvedeném v pøíloze této publikace 10 VLADIMÍR VÁÒA A