Mikrokontoléry Atmel AVR
ASSEMBLER Vladimír Váòa
Praha 2003
Publikace poskytuje základní informace dùleité 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, pouití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, avak úplných programù, odzkouený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é ploných spojù vech è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 rozmnoová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 titì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 odkodnìní na základì zmìn, chyb nebo vynechání jsou zásadnì vylouèeny. Vechny registrované nebo jiné obchodní známky pouité v této knize jsou majetkem jejich vlastníkù. Uvedením nejsou zpochybnìna z toho vyplývající vlastnická práva. Vekerá 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 Jetì 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ùleité porty u AVR ......................................................................... 25 Stavový registr ............................................................................................... 26 Vstupní/výstupní brány AVR .......................................................................... 27
4
Pouití 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
Pouití SRAM jako zásobníku ....................................................................... 32 Definice SRAM jako zásobníku ..................................................................... 32 Pouití 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øeruení 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 Zhutì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é pouití ............................................................................................... 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 pouití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 pouitím pøeruení .......................... 107
Pøíklad 8 Vyuití 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 vyuití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 ploné 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 vechny 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 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 titìného katalogu Edièního plánu jaro a léto 2003 a samostatného pøehledu naí produkce BEN 2003. n 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ù, n adresáø PRIKLADY obsahuje zdrojové i pøeloené formy vech programù realizovaných v knize, n adresáø SPOJE obsahuje klié ploných spojù vech pøípravkù popsaných v knize ve formátu TIF, aby si ètenáøi pøípadnì mohli ploné spoje upravit podle vlastních pøedstav. Nìkteré spoje jsme jetì v redakci dodateènì upravovali (tvar úchytných ploek pro souèástky,
), take finální verze je uloena pouze ve formátu TIF (je shodná s klié otitìnými v knize). n adresáø SW obsahuje samostatné sloky 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 Vechny verze pracují pod operaèním systémem Windows. Starí verze (3.xx) jsme uvedli proto, e pracují témìø na kadé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 uiteèný ovládací program pro programátor ATMEL AVR ISP 3.30, který je rovnì ve sloce 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 I2C, 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 uití je pouze nutné dodret 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ìtinu 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ì sloventiny. 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
JETÌ NE SE ZAÈTETE Publikace poskytuje základní informace dùleité 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øedstien 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ùleitost WWW a monosti vyuít Javu pro programování aplikací pro WWW. Proto si vìtinou spojujeme Javu právì s Internetem. Rozíøenost Javy a její výhody vedly v poslední dobì k tomu, e si ji vimli 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 pouití 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 vak 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øísluné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á poslouit tato kniha. Programování AVR aplikací ve vyích programovacích jazycích budou pøedmìtem dalích publikací.
Assembler y 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ìtinou v binární, oktalové nebo hexadecimální reprezentaci instrukcí poèítaèe. Vechny 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 vak 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ø. zaloen na monosti pojmenovat posloupnost instrukcí, bez makrojazyka bylo moné pojmenovávat pouze objekty v instrukcích. Brzy se ukázalo, e programátorovi lze práci jetì 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
JETÌ NE SE ZAÈTETE
9
vreny tak, aby programátor instrukèní èást poèítaèe vùbec nemusel znát. Jazyky symbolických adres vak nebyly zcela nahrazeny, nebo stále existují úlohy, které ve vyích programovacích jazycích nelze vyøeit. 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 øeitelné pomocí vyích programovacích jazykù, jednoèipové mikropoèítaèe a mikrokontroléry naopak úlohy, øeitelné 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 vak è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 pouitelné 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. Vdy je nutné prostudovat dokumentaci k pøísluné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 odliný 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, take 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, pouití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ù, odzkouených s AT90S8515 v startkitu uvedeném v pøíloze této publikace.
10
VLADIMÍR VÁÒA
A