Programování 8051

Pro programování jednočipových mikropočítačů řady 8051 používáme jazyk symbolických adres (JSA) - nesprávně assembler, strojově orientovaný jazyk, který umožňuje pružně a beze zbytku využívat technické prostředky mikrořadiče. Zdrojový text programu, zapsaný v tomto jazyce je nutné zpracovat překladačem (kompilátorem, assemblerem). Ten generuje strojový kód mikroprocesoru ve formátu vhodném k zavedení prostřednictvím programátoru do paměti ROM mikropočítače. Nejčastěji se jedná o formáty Intel HEX a BIN jenž se ukládají do souborů s adekvátními příponami HEX nebo BIN. Program (posloupnost příkazů JSA) můžeme psát v jednoduchém textovém editoru. Ukládáme jej jako prostý text bez formátovacích kódů - přípona souboru musí být ASM.

Instrukční soubor mikropočítačů 8051 má celkem 111 instrukcí, z nichž 49 je jednobajtových, 45 dvoubajtových a 17 tříbajtových. Každá instrukce má pole operačního kódu (zkratka anglického vyjádření činnosti instrukce), za kterým následuje pole operandů, zpravidla ve tvaru "cílový operand, zdrojový operand"). Pole operandů určuje použitý typ dat a způsob (nebo způsoby) adresování.


 OPERAND 1,  OPERAND 2


Soubor instrukcí obvodů 8051 se rozděluje do čtyř funkčních skupin:


Mikrořadič 8051 má ještě speciální instrukce pro práci s jednotlivými bity.


Přesuny dat a zápis konstant do paměti

Přesuny dat v paměti procesoru provádí instrukce přesunu MOV (anglicky move):


MOV oper1, oper2


OPER1 udává cílovou adresu (kam se přesouvá) a OPER2 udává zdrojovou adresu (odkud se přesouvá). Hodnota na zdrojové adrese se nemění, ale hodnota v cílové adrese se přepíše hodnotou ze zdrojové adresy. Dochází ta spíše ke kopírování hodnot a ne k přesunu!

Začněme od nejjednoduššího příkladu, a to je zápis hodnoty z adresy např. 20H do registru A ( akumulátoru - střadače):


MOV A, 20H


Po provedení této instrukce se naplní obsah registru A hodnotou, která je uložena na adrese 20H (20 hexadecjmálně - tj. 32 desítkově) v paměti pro data.


Jiný příklad:


MOV R0, #10   ;zápis čísla 10 do registru R0


Zde je nutno upozornit na znak # (dvojitý křížek - hashtag), který je uveden před číslem 10. Tento znak je v JSA 8051 velmi důležitý, protože odlišuje zápis konstanty (přímých dat) od zápisu hodnoty na přímé adrese (adresa v oblasti vnitřní paměti RAM nebo oblasti registrů speciálních funkcí SFR). Špatné použití znaku # (ať už jeho vynechání či nadbytečnost) má za následek vznik těžko zjistitelných chyb a způsobuje "záhadné" chování programu.


Příklad:


MOV A, #0   ;zápis 0 do A


MOV A, 0   ;zápis hodnoty z adresy 0 do A !!!


V druhém řádku příkladu nedojde k vynulování registru A, ale k přesunu hodnoty uložené na přímé adrese 0 do registru A. Protože na adrese 0 ve vnitřní paměti RAM leží registr R0, dojde k zápisu hodnoty, která je v něm uložena do registru A.

Instrukce MOV má široké spektrum parametrů a je možno ji použít ve všech adresovacích modech obvodu 8051. Mikropočítač 8051 užívá pět způsobů adresování:


Na základě výše uvedeného rozdělení metod adresování uvedu stručný přehled paměťových oblastí, využívaných jednotlivými adresovacími metodami.

Adresování s registrem:

Adresování přímé:
Adresování nepřímé s registrem:
Adresování s přímým operandem:
Adresování nepřímé s bázovým a indexovým registrem:

Zde si všimněte znaku @ (zavináč), který předznamenává nepřímé adresování. Znak @ před registrem znamená, že se hodnota nepřesune do registru, nýbrž na adresu, jenž je v něm obsažena!!!


Aritmetické instrukce

8051 má instrukce pro přičítání do akumulátoru, pro odčítání z akumulátoru, pro násobení obsahů registrů A a B, pro celočíselné dělení obsahu akumulátoru registrem B, pro inkrementaci a dekrementaci obsahu registrů.


© 2005  Bureš    Střední školy EDUCHEM, a. s.