Registry speciálních funkcí (dále jen SFR) jsou určité paměťové místo, kde se soustřeďují důležité informace o stavu mikroprocesoru a jeho periferních obvodů, ale zároveň i informace ovlivňující jeho další činnost. Jsou umístěny v paměti dat na adresách 80H až FFH, tedy nad oblastí vnitřní paměti (00H až 7FH, kde se nacházejí registrové banky,bitová oblast a zbývající RAM k volnému použití). Základní verze mikroprocesoru 8051 obsahuje 21 spec.funk.registrů, z nichž jsou některé bitově adresovatelné.
Registry speciálních funkcí (SFR)

Obr. 1  Umístění registrů speciálních funkcí (SFR) v paměti dat
Jedno políčko tabulky představuje 1 byte. Po stranách tabulky jsou uvedeny hexadecimální adresy. Registry v prvním sloupci tabulky jsou bitově adresovatelné (toto je ale také do určité míry závislé na použitém překladači, některý překladač podporuje bitové adresování např. i u PCON pomocí symbolického označení - SMOD, PD, IDL), ostatní jsou adresovatelné pouze po bytech (tedy jako celý registr). Některá políčka (= registry) v této paměťové oblasti, jak je vidět z obrázku č.1, jsou prázdná, jsou buď používány interně nebo byly původně určeny k budoucí inovaci mikroprocesoru.


     Registry speciálních funkcí lze rozdělit na registry řídící a datové. Příkladem řídících SFR je TCON, SCON, PCON, TMOD, IE, IP a další. Mezi datové patří ACC, B, SBUF, DPH, DPL a další. Samotné rozdělení ale pro nás nemí moc důležité, pro nás bude důležitý jejich samotný význam.
     Práce se SFR je obdobná práci s ostatnímy registry CPU. Assemblerový překladač obecně umožňuje specifikovat bitové adresy různými způsoby, a to zadáním symbolického jména konkrétního bitu (pokud jeho symbol překladač zná), zadáním přímé bitové adresy a zadáním pozice bitu v daném registru. Uvedeme si to na příkladu instrukce SETB (nastavení bitu) a SFR registru TCON (řízení čítačů/časovačů). Budeme chtít spustit čítač/časovač 0, tzn. musíme nastavit bit TR0 v registru TCON.
SETB TR0		;zadání symbolickým jménem bitu
SETB 8CH		;zadání přímou adresou bitu
SETB TCON.4		;zadání pozicí bitu v daném registru


Nyní si popíšeme jednotlivé registry speciálních funkcí:

A nebo ACC - akumulátor nebo také střadač.
     Záleží na vás, na které označení si zvyknete. Jako symbol se někdy používá jen A, jindy ACC. Pro samotný zápis symbolu v programu záleží na použitém překladači, který z těchto symbolů podporuje. V literatuře se většinou setkáte se symbolem ACC. Jde o registr, ve kterém je uložen druhý operand při aritmeticko-logických operacích a kam se po provedení této operace uloží výsledek. Umožnuje tak i postupné přičítání zpracovávaných čísel (zdrojový byte), což si lze představit jako funkci M+ na kapesním kalkulátoru.

B - B registr.
     Je užíván jako druhý registr pro násobení, nebo dělení. Instrukce MUL AB vynásobí A*B a výsledek násobení dvou osmibitových čísel (zde bez znaménka), může být větší než 255. Proto se výsledek uloží do A nižší byte výsledku a do B vyšší byte. Při dělení DIV AB zase vydělí A/B a výsledek uloží do A a zbytek po dělení do B. Jinak se dá uchovávat v registru B cokoli Vás napadne, tedy jej volně využívat.

DPTR - Data pointer, tedy ukazatel.
     Skládá se ze dvou bajtů. DPH pro vyšších 8 bitů a DPL pro nižších 8 bitů. Využívá se jako ukazatel do paměti. Takže například MOV DPTR,#1000H a MOVX A,@DPTR naplní registr DPTR hodnotou 1000h a druhou instrukcí přeneseme obsah externí datové paměti na adrese dle DPTR (zde 1000h) do registru A. Jelikož existuje i instrukce INC DPTR, která zvýší hodnotu celého 16-ti bitového DPTR o 1, můžeme se velice pohodlně pohybovat s ukazatelem po paměti a vybírat její obsah třeba ve smyčce. Registr DPTR se dá využít i jako normální interní datová paměť. Lze jím třeba počítat počet smyček, nechávat si v něm hodnoty apod. - zkrátka jako u jakéhokoli volně použitelného registru.

IE - Interrupt enable.
Registr povolení přerušení. K tomuto registru se vztahuje samostatná stránka.


PSW - Stavové slovo mikroprocesoru
Skládá se ze 7 bitů, jejichž umístění je zobrazeno na obrázku a jejich význam je následující:


C - Přenos (Carry) je nastaven při aritmetické operaci, při které dochází k přenosu z osmého (b7) do devátého (b8) bitu a při některých instrukcích porovnání.

AC - Vnitřní přenos (Auxiliary carry) je nastaven dojde-li při sčítání k přenosu mezi čtvrtým (b3) a pátým (b4) bitem střadače. Příznak se využívá pouze v instrukci dekadické korekce DAA, kterou aplikujeme na výsledek součtu dvou dekadických čísel vyjádřených v BCD kódu.

F0 - Uživatelský příznak F0 může být libovolně využíván programátorem k indikaci nějaké události (např. přetečení při výpočtu v aritmetice, identifikace vnější události, atd.). Příznak je pozůstatkem po vývojově předcházejícím procesoru (8048), který nebyl vybaven takovou škálou příznaků.

RS1, RS0 - volba banky registrů R0 až R7. Určují banku, jejíž registry R0 až R7 budou používány obr.4 (například k nepřímému adresování atd.). Jednotlivé bity RS1 a RS0 lze ovládat programově pomocí logických, přesunových nebo bitových operací. Procesor není vybaven instrukcí pro přepínání bank a po jeho vynulování je aktivní bankou banka 0 (RS1= RS0=0).
RS1 RS0 Banka Adresy registrů R0 až R7
0 0 0 00H až 07H
0 1 1 08H až 0FH
1 0 2 10H až 17H
1 1 3 18H až 1FH

OV - Příznak přetečení (Overflow) indikuje přetečení při aritmetické operaci sčítání nebo odečítání, jestliže zpracovávaná čísla považujeme za čísla se znaménkem. Jedná se o případ, kdy součet dvou záporných čísel je kladný (došlo k přenosu mezi bity b8 a b7, a nedošlo k přenosu mezi bity b7 a b6) nebo součet dvou kladných čísel je záporný (nedošlo k přenosu mezi bity b8 a b7 a došlo k přenosu mezi bity b7 a b6), kde bit představuje znaménko. Příznak je též využíván při operaci dělení k identifikaci dělení nulou a při instrukci násobení.

P - Příznak parity (Parity flag) indikuje lichou paritu střadače. Je-li ve střadači lichý počet jedniček, potom příznak parity je nastaven (P=1). Příznak je aktualizován po každé instrukci a závisí výhradně na obsahu střadače, nikoliv na typu instrukce.

Více o příznacích týkajících se výpočtů naleznete na stránce číselných soustav.

SP - Ukazatel zásobníku (Stack pointer) je osmibitový a na rozdíl od většiny procesorů je při plnění zásobníku inkrementován (hodnota ukazatele je zvětšována o jedničku). Vlastní zásobník je umístěn ve vnitřní datové paměti RAM a může být umístěn kdekoliv v této paměti tj. i v rozšířené části vnitřní datové paměti (adresy 128H až 255H u následovníků 8051), která je přístupná pouze pomocí nepřímého adresování. Po vynulování je nastaven na hodnotu SP=07H a ve většině aplikací musí být pomocí odpovídající instrukce přestaven na jinou hodnotu.

DPL, DPH - Registry DPL a DPH tvoří nižší a vyšší 8 bitovou slabiku 16-bitového ukazatele DPTR, který slouží k 16-bitovému nepřímému adresování vnější datové paměti RAM nebo paměti programu.

PC - Čítač instrukcí (Program counter) je 16-bitový čítač instrukcí, který není přímo programově přístupný.

Symbolické
označení
registru
Angl. jméno registru, z kterého bylo
symbolické označení odvozeno
 Adresa  Obsah registru
 po resetu (binárně) 
ACC Accumulator E0H 00000000
B B Register F0H 00000000
PSW Program Status Word D0H 00000000
SP Stack Pointer 81H 00000111
DPTR Data Pointer (2 byty)
  DPL   Low Byte 82H 00000000
  DPH   High Byte 83H 00000000
P0 Port 0 80H 11111111
P1 Port 1 90H 11111111
P2 Port 2 A0H 11111111
P3 Port 3 B0H 11111111
IP Interrupt Priority Control B8H XXX00000
IE Interrupt Enable Control A8H 0XX00000
TMOD Timer/Counter Mode Control 89H 00000000
TCON Timer/Counter Control 88H 00000000
TH0 Timer/Counter 0 High Byte 8CH 00000000
TL0 Timer/Counter 0 Low Byte 8AH 00000000
TH1 Timer/Counter 1 High Byte 8DH 00000000
TL1 Timer/Counter 1 Low Byte 8BH 00000000
SCON Serial Control 98H 00000000
SBUF Serial Data Buffer 99H XXXXXXXX
PCON Power Control 87H 0XXX0000 (CMOS verze)
0XXXXXXX (HMOS verze)
X - neurčitý stav


Vytisknout stránku

Zpátky Zpátky
© DH servis 2002 -