David Matouek
C pro mikrokontroléry ATMEL AT89S52 Pøíklady a aplikace pro C51 ve vývojovém prostøedí KEIL µVision3
6. díl Praha 2007
V dnení dobì stále více programátorù postupnì pøechází z klasického psaní kódu v assembleru na integrovaná vývojová prostøedí na bázi jazyka C. Není se co divit, nebo produktivita vytváøení aplikací je nìkolikrát vyí a pøechod na jiný typ procesoru je snadnìjí. Tato kniha vznikla proto, aby ukázala jak snadná je cesta programování v jazyce C. Na pøíkladu procesoru ATMEL AT89S52 (s jádrem C51) jsou ukázány základní operace, které budete pøi vývoji vlastních aplikací potøebovat. Ve si okamitì mùete vyzkouet na vývojovém kitu a na jednotlivých modulech. Jste-li zaèáteèník, v èetinì doposud neexistovala didaktiètìjí pøíruèka, ne je tato, podle které byste se efektivnìji dostali do celé problematiky vývoje aplikací v jazyce C. Pro ty, kteøí rutinnì pracují v assembleru, bude pøechod na programování C hraèkou.
***
Komerèní vyuití stavebních návodù je povoleno jen s písemným souhlasem autora a nakladatelství. Soubory na doprovodném CD ROM mající pøímo vztah ke knize, které vytvoøil sám autor (tj. obsah adresáøù FOTO, PROGRAMY, SDK51, SPOJE a USB51KITv1.1), nejsou volnì iøitelné a vztahují se na nì autorská práva. Dalí íøení, napø. umísování na jiné webové stránky nebo na jiné datové nosièe, je zakázáno.
David Matouek
C pro mikrokontroléry ATMEL AT89S52 Pøíklady a aplikace pro C51 ve vývojovém prostøedí KEIL µVision 3 6. díl 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á zapojení a 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.
Vekerá práva vyhrazena. © Ing. David Matouek, 2007 © Nakladatelství BEN technická literatura, Vìínova 5, Praha 10 David Matouek: C pro mikrokontroléry Atmel AT89S52 BEN technická literatura, Praha 2007 1. vydání
ISBN 978-80-7300-215-2
OBSAH O KNIZE ............................................................................. 9 1
ZÁKLADNÍ POJMY TERMINOLOGIE .................. 11
1.1
Standardní registry a jejich význam .............................................. 15
2
ZÁKLADNÍ VLASTNOSTI MIKROKONTROLÉRU AT89S52 ............................ 17
2.1
Popis vývodù ................................................................................... 19
2.2
Mikrokontrolér AT89S8253 ............................................................. 24
3
SDK51 PROGRAMÁTOR A VÝVOJOVÝ KIT PRO AT89S52 ....................................................... 25
3.1
Schéma zapojení ............................................................................. 26
3.2
Výkres desky ploných spojù ........................................................ 26
3.3
Úprava konstrukce SDK8252 na SDK51 ....................................... 30
3.4
Propojovací kabely .......................................................................... 31
3.5
Oivení vývojového kitu SDK51 ..................................................... 31
3.6
Ovládací program SDK51.EXE ....................................................... 32
3.7
Poèáteèní nastavení vývojového kitu ........................................... 33
3.8
Ovládání vývojového kitu z pøíkazového øádku ........................... 33
3.9
Nová verze ovládacího programu pro USB51KIT ........................ 33
4
PROGRAMÁTORSKÝ MODEL AT89S52 ................ 35
4.1
Rozdìlení pamìového prostoru ................................................... 36
4.2
Základní registry .............................................................................. 41
4.3
Banky registrù R0 a R7 ................................................................. 43
5
ÚVOD DO PROGRAMOVÁNÍ V JAZYCE C51 ......... 45
5.1
Základní pojmy algoritmizace a programování ............................ 46
5.2
Základní pojmy programování v jazyce C ..................................... 47
5.3
Základní datové typy jazyka C51 ................................................... 49
A
C pro mikrokontoléry Atmel AT89S52
3
6
OPERÁTORY JAZYKA C ....................................... 53
6.1
Aritmetické operátory ..................................................................... 54
6.2
Logické operátory ........................................................................... 56
6.3
Relaèní operátory ............................................................................ 56
6.4
Bitové operátory .............................................................................. 57
6.5
Pøiøazovací operátory ...................................................................... 59
6.6
Zvlátní operátory ........................................................................... 60
6.7
Priority vech operátorù ................................................................. 61
7
ZAÈÍNÁME PROGRAMOVAT ................................. 63
7.1
Vnitøní zapojení portù ..................................................................... 64
7.2
Pøípravek AT8LED osmice LED ................................................... 65
7.3
Instalace vývojového prostøedí C51 .............................................. 66
7.4
Pøíklad PROG_01 rozsvícení LED ............................................... 72
7.5
Obsah souboru REGX52.H ............................................................. 74
7.6
Direktiva #define a její pouití ........................................................ 75
8
POKROÈILEJÍ PØÍKLADY ................................... 77
8.1
Podmínìný pøíkaz (if) ...................................................................... 78
8.2
Pøíkazy cyklù .................................................................................... 79
8.3
Pøípravek ATDIPSW2 osmice spínaèù ....................................... 81
8.4
Pøíklad PROG_02 øízení LED pomocí spínaèù .......................... 82
8.5
Pøíklad PROG_03 blikání LED ..................................................... 83
8.6
Pøepínaè (switch) ............................................................................. 85
8.7
Pøípravek AT7SEG 7segmentovka .............................................. 85
8.8
Pøíklad PROG_04 zobrazení hexaèíslice na pøípravku AT7LED ...................................................................... 87
9
STRUKTUROVANÉ DATOVÉ TYPY A FUNKCE ..... 89
9.1
Datové typy ...................................................................................... 90
9.2
Pole ................................................................................................... 91
9.3
Pøíklad PROG_05 ovládání AT7SEG (upravená verze PROG_04) ............................................................ 93
9.4
Funkce .............................................................................................. 95
9.5
Pøíklad PROG_06 ovládání AT7SEG (upravená verze PROG_05) ............................................................ 96
4
C pro mikrokontoléry Atmel AT89S52
A
9.6
Pøípravek ATSW pìtice tlaèítek ................................................... 98
9.7
Výètový typ (enum) ....................................................................... 100
9.8
Pøíklad PROG_07 oetøení zákmitù od ATSW ......................... 101
9.9
Struktura, sjednocení, bitové pole .............................................. 104
9.10
Pøíklad PROG_08 pouití struktury, sjednocení a bitového pole .............................................................................. 107
10
PØERUENÍ A PØERUOVACÍ SYSTÉM.............. 109
10.1
Pøeruení (interrupt) ...................................................................... 110
10.2
Pøípravek ATIKBD .......................................................................... 114
10.3
Pøíklad PROG_09 pøíjem znaku z ATIKBD pomocí pøeruení ........................................................................................ 117
11
ÈÍTAÈE/ÈASOVAÈE 0 A 1 A JEJICH POUITÍ .... 121
11.1
Popis èítaèù/èasovaèù 0 a 1 ......................................................... 122
11.2
Pøíklad ATREPRO piezomìniè .................................................. 125
11.3
Pøíklad PROG_10 generování tónu na pøípravku ATREPRO ... 127
11.4
Pøíklad PROG_11 blikání LED pomocí èasovaèe .................... 128
11.5
Pøípravek AT4SDYNR displej s èasovým multiplexem ........... 130
11.6
Pøíklad PROG_12 øízení pøípravku AT4SDYNR ........................ 133
11.7
Pøíklad PROG_13 editace údaje AT4SDYNR pomocí ATIKBD ............................................... 135
12
SÉRIOVÝ KANÁL A JEHO POUITÍ .................... 139
12.1
Reimy sériového kanálu (portu) ................................................. 140
12.2
Pøíklad PROG_14 pøíjem znaku pomocí jednotky UART ..................................................... 142
12.3
Pøípravek ATRS232+ ..................................................................... 144
12.4
Pøíklad PROG_15 jednoduchá komunikace s PC ................... 146
13
LCD DISPLEJ A JEHO POUITÍ .......................... 151
13.1
Øadiè HD44780 .............................................................................. 152
13.2
Pøípravek ATLCDTX2 LCD displej (4bitová komunikace) ....................................................... 157
13.3
Soubor ATLCDTX2.H Rutiny pro øízení displeje ...................... 159
13.4
Pøíklad PROG_16 zobrazení textu na displeji .......................... 159
A
C pro mikrokontoléry Atmel AT89S52
5
14
UKAZATELE A ØETÌZCE .................................... 161
14.1
Ukazatel (pointer) .......................................................................... 162
14.2
Øetìzec ........................................................................................... 165
15
FUNKCE PRINTF ................................................. 169
15.1
Formátovaný výstup ..................................................................... 170
15.2
Pravidla pro zápis konverze ......................................................... 170
15.3
Pøíznaky .......................................................................................... 170
15.4
íøka ................................................................................................ 171
15.5
Pøesnost ......................................................................................... 171
15.6
Modifikátor ..................................................................................... 172
15.7
Konverze ........................................................................................ 173
15.8
Návratová hodnota ........................................................................ 173
15.9
Implementace funkce printf v C51 ............................................... 173
15.10
Pøíklad PROG_17 ukázka pouití funkce printf ....................... 174
15.11
Pøípravek ATSVORKY+ ................................................................. 175
15.12
Pøíklad PROG_18 mìøení kmitoètu èítaèem ............................ 176
16
TØÍDRÁTOVÁ SÉRIOVÁ SBÌRNICE .................... 181
16.1
Zmnoení vstupù a výstupù ......................................................... 182
16.2
Pøípravek ATSPITST ...................................................................... 183
16.3
Pøíklad PROG_19 ukázka pouití pøípravku ATSPITST .......... 184
16.4
Pøípravek ATUSIDSP 3místný displej øízený 3drátovou sbìrnicí .................................. 186
16.5
Pøíklad PROG_20 ukázka pouití pøípravku ATUSIDSP ........................................................ 189
17
ÈÍTAÈ/ÈASOVAÈ 2 .............................................. 193
17.1
Registry èítaèe/èasovaèe 2 ........................................................... 194
17.2
Reimy èítaèe/èasovaèe 2 ............................................................ 196
17.3
Pøíklad PROG_21 ukázka pouití èítaèe/èasovaèe 2 ............................................................. 201
17.4
Pøíklad PROG_22 generátor ...................................................... 202
6
C pro mikrokontoléry Atmel AT89S52
A
18
DALÍ RYSY AT89S52 ........................................ 207
18.1
PCON registr øízení spotøeby .................................................... 208
18.2
WDT obvod Watchdog ............................................................... 209
18.3
Registry AUXR a AUXR1 ............................................................... 210
PØÍLOHY A. Logické systémy, èíselné soustavy ......................... 213 B. Struèný popis vývojového prostøedí µVision 3 ........ 219 B.1
Struèný popis jednotlivých poloek nabídky ............................. 220
B.2
Ukázka moností ladìní ................................................................ 226
B.3
Konfigurace prostøedí pro pøímé øízení vývojového kitu SDK51/USB51KIT .................. 229
LITERATURA ................................................................. 230 PØEHLED PØÍPRAVKÙ ATMEL ...................................... 231 PLONÉ SPOJE ............................................................. 231
Knihy na problematiku procesorù ATMEL .................... 232 Prodejny technické literatury ....................................... 239
A
C pro mikrokontoléry Atmel AT89S52
7
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 pøehled vydaných knih a CD nakladatelství BEN technická literatura (aktualizováno k polovinì bøezna 2007), jejich souèástí je poèítaèová verze titìného Katalogu Edièního plánu 2007 ve formátu PDF.
n
adresáø DATASHEET obsahuje nezbytnou originální dokumentaci ve formátu PDF. Najdete zde té samorozbalitelný archiv programu Adobe Acrobat Reader v nìkolika verzích, který slouí k prohlíení PDF souborù.
n
adresáø FOTO obsahuje, jak sám název napovídá, fotografie hotových pøípravkù. Kadý byl nafocen z nìkolika pohledù, aby byla lépe dokumentována jejich moná stavba, Do shodného adresáøe jsme umístili trial verzi prohlíeèe ACDSee staenou z Internetu (http://www.acdsystems.com): ACDSee Classic (velikost instalaèního souboru cca 1,6 MB, minimální poadavky Windows 95/98/Me/NT4/2000/XP, PC 486DX s 32 MB RAM, reim grafického adaptéru s 256 barvami, 4 MB volného místa na pevném disku, vhodný Internet Explorer 4.0 nebo pozdìjí). Tip: pokud se vám fotografie zdají pøíli tmavé, aktivujte ve vaem prohlíeèi Gamma korekci na hodnotu napø. 1.50 (optimální hodnota závisí na nastavení vaeho grafického subsystému).
n
v adresáøi KEIL je vývojové prostøedí Keil µVision3 Release 7/2006 Keil C51 verze 8.05. Pro rychlou orientaci je zde také pøímý odkaz na výrobce a wordovský dokument, kde je pøehled podporovaných procesorù.
n
adresáø PROGRAMY obsahuje zdrojové i pøeloené formy vech programù realizovaných v knize. Programy nejsou volnì iøitelné.
n
adresáø SDK51 obsahuje oivovací a ovládací aplikaci vývojového kitu SDK51. Ovládací program je koncipován jako jednoduchá aplikace pro Windows, která si neklade extrémní nároky na monosti poèítaèe nebo procesoru. Programy nejsou volnì iøitelné.
n
adresáø USB51KITv1.1 obsahuje novou verzi ovládacího programu pro vývojový kit USB51KIT, který byl pøed nedávnem zvìøejnìn jako stavební návod [7]. Nová verze poskytuje monost vypnutí verifikace a dále podporuje ovládání z pøíkazového øádku (podobnì jako v kapitole 3.7). Rovnì podporuje procesor AT89S8253.
n
adresáø SPOJE obsahuje klié ploných spojù vech pøípravkù popsaných v knize ve formátu TIF a navíc ve zdrojových formátech BRD a SCH programu EAGLE v. 2.61, 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 (úprava kritických vzdáleností,
), take finální verze je uloena pouze ve formátu TIF (je shodná s klié otitìnými v knize), Klié nejsou volnì iøitelná.
8
C pro mikrokontoléry Atmel AT89S52
A
O KNIZE Tato kniha je vìnována programování mikrokontroléru AT89S52 pomocí programovacího jazyka C. Programovací jazyk C poskytuje rychlý vývoj programù a nevyaduje znalost instrukèního souboru. Kniha je urèena hlavnì zaèáteèníkùm. To znamená, e v ní najdete nezbytný výklad jazyka C a vlastností mikrokontroléru AT89S52. Prakticky je pouíváno vývojové prostøedí µVision3 od firmy KEIL. Vechny probírané partie, jak z programování v jazyce C tak z vlastností mikrokontroléru AT89S52, jsou prokládány pøíklady. První kapitola vykládá základní pojmy mikroprocesorové techniky jako je: pamì, bit, bajt, adresa, sbìrnice, mikroprocesor, registr, instrukce, zásobník. Druhá kapitola uvádí základní vlastnosti mikrokontroléru AT89S52. Jedná se pøedevím o popis vývodù. Tøetí kapitola popisuje stavbu levného vývojového kitu SDK51, který je urèen pro sériový port. Ètvrtá kapitola je vìnována programátorskému modelu. Popisuje rozdìlení pamìového prostoru, pøipojení vnìjí pamìti, základní registry. Pátá kapitola pøedstavuje úvod do programovacího jazyka C51. Kapitola je urèena pøedevím tìm, kteøí dosud neprogramovali. Proto vykládá základní pojmy jako je: algoritmus, program, programovací jazyk, pøekladaè, syntax, sémantika, vývojový diagram. Dále se vìnuje základním datovým typùm (celá èísla, reálná èísla, znaky). está kapitola vysvìtluje operátory jazyka C. V sedmé kapitole je pøedveden první pøíklad. Nejdøíve je popsána vnitøní stavba portu, dále je uveden pøípravek AT8LED (osmice LED), je pøedvedena instalace vývojového prostøedí. V pøíkladu je ukázáno rozsvícení LED. Osmá kapitola vysvìtluje øídicí pøíkazy jazyka C (podmínìný pøíkaz, pøíkazy cyklù, pøepínaè). S jejich pomocí lze ji vytváøet sloitìjí programy. Jsou uvedeny pøípravky ATDIPSW2 (osmice spínaèù) a AT7SEG (7segmentovka). Pøíklady ukazují øízení LED pomocí spínaèù, blikání LED, pouití 7segmentovky. Devátá kapitola popisuje sloitìjí datové typy a funkce. Po výkladu polí je ukázána dokonalejí varianta øízení 7segmentovky. Tento pøíklad je jetì zdokonalen po seznámením s monostmi funkcí. Dále je uveden pøípravek ATSW (pìtice tlaèítek), který je ukázán v pøíkladu oetøení zákmitù tlaèítek. Dalí pøíklad ukazuje monost zápisu údaje v dvojkové soustavì v jazyce C. Desátá kapitola je vìnována pøeruení a pøeruovacímu systému. Po výkladu pojmu pøeruení a vyloení funkce jednotlivých registrù je uveden pøípravek ATIKBD (maticová klávesnice s odesíláním znaku pøes pøeruení a sériovou linku). Následující pøíklad pak ukazuje pøíjem znaku z ATIKBD pøes pøeruení. Jedenáctá kapitola je ukazuje monosti èítaèù/èasovaèù 0 a 1. V této kapitole je uveden pøípravek ATREPRO (piezomìniè), který je následnì pouit v pøíkladu generování tónu. Dále je ukázáno blikání pomocí èasovaèe a obsluha displeje
A
C pro mikrokontoléry Atmel AT89S52
9
AT4SDYNR (4místný LED displej) s èasovým multiplexem. Dalí pøíklad pouívá klávesnici ATIKBD pro editaci údaje na displeji AT4SDYNR. Dvanáctá kapitola se zabývá sériovým kanálem (UART). V kapitole je uveden pøípravek ATRS232+ (umoòuje pøipojení sériového kanálu k poèítaèi). První pøíklad ukazuje pøíjem znaku z klávesnice ATIKBD pøes sériový kanál. Druhý pøíklad ukazuje ovládání mikrokontroléru pomocí poèítaèe. Tøináctá kapitola ukazuje pøipojení LCD displeje, jedná se o pøípravek ATLCDTX2. Po popisu funkcí, pro ovládání displeje je ukázán krátký pøíklad pro zobrazení textu na LCD. Ètrnáctá kapitola vysvìtluje sloitìjí pojmy programování, jedná se o ukazatel a øetìzec. Patnáctá kapitola popisuje funkci printf, která umoòuje formátovaný výpis promìnných rùzných typù. V této kapitole je uveden pøípravek ATSVORKY+ (svorkovnice). Pøíklady ukazují výpis textu na LCD pomocí funkce printf a mìøení kmitoètu pomocí èítaèe. estnáctá kapitola je vìnována zmnoení poètu vstupù resp. výstupù pomocí posuvných registrù. V této kapitole jsou uvedeny pøípravky ATSPITST (8bitové rozíøení sbìrnice) a ATUSIDSP (3místný LED displej ovládaný sériovou sbìrnicí). Pøíklady ukazují práci s tìmito pøípravky. Sedmnáctá kapitola uvádí monosti èítaèe/èasovaèe 2. Pøíklady ukazují pouití reimu programovatelného hodinového výstupu. Osmnáctá kapitola popisuje zbývající monosti a registry mikrokontroléru AT89S52. Jedná se o reimy sníené spotøeby a WDT. První pøíloha vysvìtluje vzájemné pøevody èísel mezi dvojkovou, desítkovou a estnáctkovou soustavou. Druhá pøíloha podrobnìji popisuje monosti vývojového prostøedí µVision3. Ukazuje pøedevím monosti ladìní.
10
C pro mikrokontoléry Atmel AT89S52
A