Mikrokontroléry MCS-51: softwarový model, struktura, příkazy. Mikrokontroléry MCS-51

Příkazový systém OMEVM poskytuje skvělé možnosti zpracování dat, poskytuje implementaci logických, aritmetických operací a také řízení v reálném čase. Implementováno bitové, tetradové (4 bity), byte (8 bitů) a 16bitové zpracování dat.

Rodina LSI MCS-51 - 8bitový OMEVM: ROM, RAM, speciální registry, ALU a externí sběrnice mají bajtovou organizaci. Dvoubajtová data jsou využívána pouze registrem ukazatelů (DPTR) a programovým čítačem (PC). Je třeba poznamenat, že registr datových ukazatelů lze použít jako dvoubajtový registr DPTR nebo jako dva jednobajtové speciální registry DPH a DPL. Programový čítač se vždy používá jako dvoubajtový registr.

Sada příkazů OMEVM má 42 mnemotechnických symbolů příkazů pro specifikaci 33 funkcí tohoto systému.

Syntaxe většiny instrukcí v jazyce symbolických instrukcí sestává z mnemotechnické zkratky funkce následované operandy určujícími metody adresování a datové typy. Různé datové typy nebo režimy adresování jsou určeny nastavenými operandy, nikoli změnami v mnemotechnickém zápisu.

Příkazový systém lze podmíněně rozdělit do pěti skupin:

Existují následující typy adresování zdrojového operandu:

  • Nepřímé adresování registrů součtem základních a indexových registrů

Tabulka označení a symbolů používaných v systému velení

Označení, symbol Účel
A baterie
Rn Registry aktuálně vybrané banky registrů
r Číslo načteného registru zadané v příkazu
Přímo Přímo adresovatelná 8bitová adresa interního umístění dat, což může být umístění interní datové paměti RAM (0-127) nebo SFR (128-255)
@rr Nepřímo adresovatelné umístění 8bitové interní datové paměti RAM
údaje8 8bitová okamžitá data zahrnutá v CPC
dataH MSB (15-8) okamžitých 16bitových dat
dataL Nízké bity (7-0) okamžitých 16bitových dat
adr11 11bitová cílová adresa
addrL Nejméně významné bity cílové adresy
disp8 8bitový offsetový bajt se znaménkem
bit Přímo adresovatelný bit, jehož adresa obsahuje CPC umístěný v interní datové paměti RAM nebo SFR
a15, a14...a0 Bity cílové adresy
(X) Obsah prvku X
((X)) Obsah na adrese uložené v prvku X
(X)[M] Výboj M prvek X

+
-
*
A
NEBO
XOR
/X
Operace:
dodatky
odčítání
násobení
divize
logické násobení (operace AND)
logické sčítání (operace OR)
přídavný modul 2 (XOR)
inverze prvku X

Funkční mnemotechnické pomůcky jsou jednoznačně spojeny se specifickými kombinacemi metod adresování a datových typů. Celkem je v systému velení možných 111 takových kombinací. V tabulce je uveden abecedně seřazený seznam příkazů.

Mnemotechnické pomůcky Funkce Vlajky
tým ACALL Volání absolutního podprogramu
Přidání AC, C, OV
Přidání s nošením AC, C, OV
tým AJMP Absolutní přechod
Logika "A"
Logické "AND" pro proměnné bity C
Porovnejte a skočte, pokud se nerovná C
Tým CLR A Reset baterie
tým CLR Reset bit C, bit
CPL tým A Inverze baterie
tým CPL Bitová inverze C, bit
Tým DA A Akumulátorová desetinná oprava pro sčítání AC, C
Tým DEC<байт> Dekrementovat
Tým DIV AB Divize C, OV
Tým DJNZ<байт>, <смещение> Dekrementujte a skočte, pokud není nula
Tým I.N.C.<байт> Přírůstek
Tým INC DPTR Přírůstek datového ukazatele
Tým J.B. , Skok, pokud je bit nastaven
Tým JBC , Větev, pokud je bit nastaven, a resetujte tento bit
Tým J.C. Skok, pokud je nastaven přenos
Příkaz JMP @A+DPTR Nepřímý přechod
tým JNB , Skok, pokud bit není nastaven
Tým JNC Skok, pokud není nastaven žádný přenos
Tým JNZ Skočit, pokud je obsah akumulátoru nenulový
Tým JZ Skočit, pokud je obsah akumulátoru 0
Tým LCALL dlouhý hovor
Tým LJMP dlouhý přechod
Dopředný proměnný bajt
Odeslání datového bitu C
Příkaz MOV DPTR,#data16 Načíst datový ukazatel s 16bitovou konstantou
MOVC instrukce A,@A+( ) Přesunout byte z paměti programu
Odeslání dat do externí paměti (z externí paměti).

PLÁN PŘEDNÁŠEK

1. Úvod

2. Aritmetické a logické instrukce

3. Příkazy pro přenos dat

4. Booleovské operace

5. Pokyny ke skoku

1. Úvod

Příkazový systém MCS-51 podporuje jedinou sadu instrukcí, která je navržena tak, aby spouštěla ​​8bitové algoritmy pro řízení aktuátorů. Je možné použít rychlé metody adresování vnitřní paměti RAM, provádění bitových operací na malých datových strukturách. Existuje rozsáhlý systém pro adresování jednobitových proměnných jako nezávislý datový typ, který umožňuje použití jednotlivých bitů v logických a řídicích příkazech Booleovy algebry.

Režimy adresování : instrukční sada MCS-51 podporuje následující režimy adresování. Přímé adresování: Operand je určen 8bitovou adresou v instrukci. Přímé adresování se používá pouze pro spodní polovinu interní datové paměti a registrů SFR. nepřímé adresování: Instrukce oslovuje registr obsahující adresu operandu. Tento typ adresování se používá pro externí a interní RAM. Registry lze použít k určení 8bitových adres R0 A R1 vybraná banka registru nebo ukazatel zásobníku SP. Pro 16bitové adresování se používá pouze registr datových ukazatelů. DPTR.

Pokyny k registraci : registry R0–R7 aktuální banka registrů může být adresována prostřednictvím specifických instrukcí obsahujících 3bitové pole označující číslo registru v samotné instrukci. V tomto případě není v příkazu žádné odpovídající pole adresy. Operace pomocí speciálních registrů: některé instrukce používají jednotlivé registry (například operace s akumulátorem, DPTR, atd.). V tomto případě není adresa operandu v instrukci vůbec uvedena. Je předem určen operačním kódem.

Okamžité konstanty : konstanta může být přímo v příkazu za operačním kódem.

Indexové adresování : Indexované adresování lze použít pouze pro přístup do paměti programu a pouze v režimu čtení. V tomto režimu jsou prohlíženy tabulky v paměti programu. 16bitový registr ( DPTR nebo programové počítadlo) označuje základní adresu požadované tabulky a akumulátor označuje vstupní bod do ní.

Sada příkazůmá 42 mnemotechnických povelů pro specifikaci 33 funkcí tohoto systému. Syntaxe většiny instrukcí v jazyce symbolických instrukcí sestává z mnemotechnické zkratky funkce následované operandy určujícími metody adresování a datové typy. Různé datové typy nebo režimy adresování jsou určeny nastavenými operandy, nikoli změnami v mnemotechnickém zápisu.

Příkazový systém lze podmíněně rozdělit do pěti skupin: aritmetické příkazy; logické příkazy; příkazy pro přenos dat; instrukce bitového procesoru; příkazy větvení a přenosu. Označení a symboly používané v systému příkazů jsou uvedeny níže.

Stůl. Notace a symboly používané v příkazovém systému

Označení, symbol

Účel

baterie

Registry aktuálně vybrané banky registrů

Číslo načteného registru zadané v příkazu

Přímo

Přímo adresovatelná 8bitová adresa interního umístění dat, což může být umístění interní datové paměti RAM (0-127) nebo speciální funkční registr SFR (128-255)

Nepřímo adresovatelné umístění 8bitové interní datové paměti RAM

8bitový bezprostředníúdaje zahrnuté v kódu operace (COP)

dataH

MSB (15-8) okamžitých 16bitových dat

dataL

Nízké bity (7-0) okamžitých 16bitových dat

11bitová cílová adresa

addrL

Nejméně významné bity cílové adresy

8bitový offsetový bajt se znaménkem

Přímo adresovatelný bit, jehož adresa obsahuje CPC umístěný v interní datové paměti RAM nebo speciálním funkčním registru SFR

a15, a14...a0

Bity cílové adresy

Obsah prvku X

Obsah na adrese uložené v prvku X

Výboj M prvek X


+

*
A
NEBO
XOR
/X

Operace:
dodatky
odčítání
násobení
divize
logické násobení (operace AND)
logické sčítání (operace OR)
přídavný modul 2 (XOR)
inverze prvku X

Funkční mnemotechnické pomůcky jsou jednoznačně spojeny se specifickými kombinacemi metod adresování a datových typů. Celkem je v systému velení možných 111 takových kombinací.

2. Aritmetické a logické instrukce

Jak příklad aritmetický příkaz, operaci sčítání lze provést jedním z následujících příkazů.

PŘIDATA,7 F 16 - přidejte k obsahu registru A číslo 7 F 16 a uložit výsledek do registru A;

PŘIDATA,@ R0 - přidat do obsahu registru A číslo, jehož adresa (@ – komerční na ) je uložen v registru R 0 (nepřímé adresování) a uložit výsledek do registru A;

PŘIDAT A,R7- přidat k obsahu registru A obsah registru R 7 a výsledek uložte do registru A;

PŘIDAT A,#127- přidat k obsahu registru A číslo, jehož adresa buňky úložiště je 127 ( # - číselný symbol) a výsledek uložte do registru T- znovu A.

Všechny aritmetické instrukce jsou vykonávány v jednom strojovém cyklu kromě instrukce INC DPTR(posun datového ukazatele DPTR na další bajt), vyžadující dva strojové cykly a také operace násobení a dělení prováděné ve 4 strojových cyklech. Libovolný bajt v interní datové paměti lze inkrementovat a dekrementovat bez použití akumulátoru.

Návod MUL AB provede násobení (násobení) dat v akumulátoru s daty v registru B, přičemž produkt umístí do registrů A (dolní polovina) a B (vyšší polovina).

Návod DIV AB vydělí (rozdělí) obsah akumulátoru hodnotou v registru B, zbytek ponechá v B a podíl v akumulátoru.

Návod DA A určený pro binárně-decimální aritmetické operace (aritmetické operace s čísly reprezentovanými v binárně-decimálním kódu). Nepřevádí binární na binární desítkové, ale poskytuje správný výsledek pouze při sčítání dvou čísel BCD.

Příklad logický příkaz: logickou operaci AND lze provést jedním z následujících příkazů:

ANLA,7 F 16 - logické vynásobení obsahu registru A číslem 7 F 16 a výsledek je uložen v registru A;

ANLA,@ R1 - logické vynásobení obsahu registru A číslem, jehož adresa je v registru uložena R 1 (nepřímé adresování) a uložte výsledek do registru A;

ANL A,R6- logické násobení obsahu registru A obsahem registru R 6 a uložte výsledek do registru A;

ANL A,#53 - logické vynásobení obsahu registru A číslem, jehož adresa buňky úložiště je 53 16, a uložení výsledku do registru A.

Všechny logické operace s obsahem akumulátoru se provádějí v jednom strojovém cyklu, zbytek - ve dvou. Booleovské operace lze provádět na kterémkoli z nižších 128 bajtů vnitřní datové paměti nebo na libovolném registru SFR (registry speciálních funkcí) v režimu přímého adresování bez použití baterie.

Rotační operace RL A, RLC A atd. posouvají obsah akumulátoru o jeden bit doprava nebo doleva. V případě cyklického posunu doleva se nejméně významný bit přesune na nejvýznamnější pozici. V případě pravého cyklického posunu se stane opak.

Úkon SWAP A provádí výměnu mladších a starších tetrád v akumulátoru.

3. Příkazy pro přenos dat

tým MOV dest,src umožňuje přenos dat mezi vnitřními buňkami RAM nebo oblastí speciálních funkčních registrů SFR bez použití baterie. V tomto případě lze práci s horní polovinou vnitřní paměti RAM provádět pouze v režimu nepřímého adresování a přístup k registrům SFR– pouze v režimu přímého adresování.

Ve všech mikroobvodech MCS-51 zásobník je umístěn přímo v datové rezidentní paměti a roste směrem nahoru. Návod TAM nejprve zvýší hodnotu v registru ukazatelů zásobníku SP a poté vloží datové bajty do zásobníku. Týmy TAM A POP se používají pouze v režimu přímého adresování (při zápisu nebo obnově bajtu), ale zásobník je vždy dostupný při nepřímém adresování prostřednictvím registru SP. Zásobník tedy může také využívat horních 128 bajtů datové paměti. Stejné úvahy vylučují použití instrukcí zásobníku pro adresování registrů. SFR.

Instrukce pro přenos dat zahrnují 16bitovou přenosovou operaci MOV DPTR,#data16, který se používá k inicializaci registru datových ukazatelů DPTR při prohlížení tabulek v paměti programu nebo pro přístup k externí datové paměti.

Úkon XCH A,byte slouží k výměně dat mezi akumulátorem a adresovaným byte. tým XCHD A,@Ri podobný předchozímu, ale pouze pro nižší tetrády zapojené do výměny operandů.

Pro přístup k externí datové paměti se používá pouze nepřímé adresování. V případě jednobajtových adres se používají registry R0 nebo R1 aktuální banka registrů a pro 16bitové registr datových ukazatelů DPTR. Při jakémkoli způsobu přístupu k externí datové paměti hraje baterie roli zdroje nebo přijímače informací.

Pro přístup k tabulkám umístěným v paměti programu se používají následující příkazy:

MOVC A,@A+ DPTR ;

MOVC A,@A+ PC .

Obsah odpovídajícího registru datových ukazatelů se používá jako základní adresa tabulky. DPTR nebo PC(softwarové počítadlo) a ofset je převzat z A. Tyto instrukce slouží výhradně ke čtení dat z paměti programu, nikoliv k zápisu do ní.

4. Booleovské operace

Mikroobvody MCS-51 obsahují booleovský procesor. Interní RAM má 128 přímo adresovatelných bitů. Prostor registru speciálních funkcí SFR může také podporovat až 128bitová pole. Bitové instrukce provádějí podmíněné skoky, přenosy, resety, inverze a operace AND a OR. Všechny specifikované bity jsou dostupné v režimu přímého adresování.

Nosit bit CF ve speciálním funkčním registru "slovo stavu programu PSW' se používá jako jednobitový booleovský akumulátor procesoru.

5. Pokyny ke skoku

Adresy skokových operací jsou v jazyce symbolických instrukcí označeny štítkem nebo skutečnou hodnotou v paměti programu. Adresy podmíněných větví jsou sestaveny do relativního offsetu - znaménkového bajtu přidaného do programového čítače PC pokud je splněna podmínka přechodu. Hranice takových skoků leží mezi mínus 128 a 127 vzhledem k prvnímu bytu následujícího po instrukci. Ve speciálním funkčním registru "program status word PSW» není nulový příznak, takže pokyny JZ A JNZ zkontrolujte podmínku "rovná se nule" jako testování dat v akumulátoru.

Existují tři typy nepodmíněné větvené instrukce: SJMP, LJMP A AJMP– cílové adresy, které se liší formátem. Návod SJMP zakóduje adresu jako relativní offset a zabírá dva bajty. Vzdálenost skoku je omezena na rozsah mínus 128 až 127 bajtů vzhledem k následující instrukci SJMP.

V návodu LJMP cílová adresa se používá jako 16bitová konstanta. Příkaz je dlouhý tři bajty. Cílová adresa může být umístěna kdekoli v paměti programu.

tým AJMP používá 11bitovou adresovou konstantu. Příkaz se skládá ze dvou bajtů. Když je tato instrukce provedena, spodních 11 bitů čítače adres je nahrazeno 11bitovou adresou z instrukce. Pět nejvýznamnějších bitů programového čítače PC zůstat beze změny. Skok lze tedy provést uvnitř 2K-bytového bloku, který obsahuje instrukci následující po instrukci AJMP.

Existují dva typy instrukcí pro volání podprogramů: LCALL A HOVOR. Návod LCALL používá 16bitovou adresu volaného podprogramu. V tomto případě může být podprogram umístěn kdekoli v paměti programu. Návod HOVOR používá 11bitovou adresu podprogramu. V tomto případě musí být volaný podprogram umístěn ve stejném 2kbajtovém bloku jako následující instrukce HOVOR. Obě verze instrukce vytlačí adresu další instrukce do zásobníku a načtou ji do programového čítače. PC odpovídající novou hodnotu.

Podprogram končí instrukcí RET, což vám umožní vrátit se k instrukci následující po příkazu VOLÁNÍ. Tato instrukce vyjme návratovou adresu ze zásobníku a načte ji do programového čítače. PC . Návod RETI slouží k návratu z rutin přerušení. Jediný rozdíl RETI z RET je to? RETI Informuje systém, že zpracování přerušení bylo dokončeno. Pokud v době provedení RETI neexistují žádná další přerušení, je to stejné RET.

Návod DJNZ určený pro řízení cyklu. Chcete-li spustit smyčku N jakmile potřebujete načíst do čítače bajty s hodnotou N a zavřete tělo smyčky příkazem DJNZ označující začátek cyklu.

tým CJNE porovná své dva operandy jako celá čísla bez znaménka a přeskočí na adresu v něm zadanou, pokud se porovnávané operandy neshodují. Pokud je první operand menší než druhý, pak bit přenosu CF nastavte na "1".

Všechny instrukce v sestavené podobě zabírají 1, 2 nebo 3 bajty.

Intel je původcem architektury rodiny MCS-51, která je pojmenována podle prvního zástupce této rodiny – mikrokontroléru 8051, vydaného v roce 1980 na základě technologie n-MOS. Dobrá sada periferií, flexibilní výběr externí nebo interní programové paměti a přijatelná cena zajistily tomuto mikrokontroléru úspěch na trhu. Z hlediska technologie byl mikrokontrolér 8051 na svou dobu velmi komplexním produktem - v krystalu bylo použito 128 tisíc tranzistorů, což byl 4násobek počtu tranzistorů v 16bitovém mikroprocesoru 8086. Tento mikrokontrolér zůstává jádrem z rodiny MCS-51 dodnes.

Hlavní prvky základní architektury rodiny (architektura mikrokontroléru 8051) jsou:

8bitová ALU;

4 banky registrů, 8 v každé;

Vnitřní (rezidentní) programová paměť 4 KB typu ROM nebo EPROM (8751);

Vnitřní (rezidentní) datová paměť 128 bajtů;

21 registrů speciálních funkcí;

Booleovský procesor;

Dva 16bitové časovače/čítače;

řadič sériového portu (UART);

Řadič přerušení se dvěma úrovněmi priority;

Čtyři 8bitové I/O porty, z nichž dva se používají jako adresová/datová sběrnice pro přístup k externí programové a datové paměti;

Vestavěný generátor hodin.

Poté byl uvolněn mikrokontrolér 8052, který se vyznačoval zvýšeným množstvím rezidentní programové a datové paměti zavedené třetím časovačem a odpovídajícím způsobem rozšířeným řadičem přerušení.

Dalším zásadním krokem ve vývoji MCS-51 byl převod výrobní technologie na CMOS (modifikace 8xC51). To umožnilo implementovat režimy Idl (idle) a Power Down (nízká spotřeba), které poskytují výrazné snížení spotřeby energie krystalu a otevřely cestu pro použití mikrokontroléru v těkavých aplikacích, např. autonomní bateriově napájená zařízení.

A poslední důležitou etapou ve vývoji MK 8051 od Intelu bylo vydání mikrokontrolérů 8xC51FA / FB / FC a 8xC51RA / RB / RC, které jsou pro stručnost často označovány jako 8xC51Fx a 8xC51Rx. Hlavním rozlišovacím znakem této skupiny krystalů je přítomnost specializovaného časovače / čítače (PCA). Mikrokontroléry 8xC51Rx navíc navíc obsahují hlídací časovač (WDT). Zvažte architekturu a funkčnost PCA podrobněji.

RSA zahrnuje:

16bitový časovač/počítač;

Pět 16bitových vzorových a porovnávacích modulů, každý připojený k jinému I/O portu mikrokontroléru.

Časovač/počítač obsluhuje všech pět vzorkovacích a porovnávacích modulů, které lze naprogramovat tak, aby vykonávaly jednu z následujících funkcí:

16bitové vzorkování hodnoty časovače na kladné hraně externího signálu;

16bitové vzorkování hodnoty časovače na záporné hraně externího signálu;

16bitové vzorkování hodnoty časovače na libovolné hraně externího signálu;

16bitový programovatelný časovač;

16bitové vysokorychlostní výstupní zařízení;

8bitové PWM.

Implementace všech uvedených funkcí probíhá v PCA na hardwarové úrovni a nezatěžuje centrální procesor. To umožňuje zvýšit celkovou propustnost, zlepšit přesnost měření a zpracování signálu a zkrátit dobu odezvy mikrokontroléru na vnější události, což je důležité zejména pro systémy pracující v reálném čase. PCA implementovaný v 8xC51Fx (8xC51Rx) se ukázal být takový

Označení

Max. frekvence (MHz)

ROM/EPROM (bajt)

počítadla

Je štěstí, že architektura těchto mikrokontrolérů se stala průmyslovým standardem a samotný PCA byl opakovaně reprodukován v různých modifikacích MK 8051.

Některé charakteristiky řady mikrokontrolérů MCS-51 vyrobených společností Intel jsou uvedeny v tabulce 1.1.

Zpočátku byla úzká hrdla architektury MCS-51 8bitová ALU založená na bateriích a relativně pomalé provádění instrukcí (k provedení nejrychlejších instrukcí je zapotřebí 12 smyček).

Tabulka 1.1

I/O

ADC vstupy x číslic

obvod,

zvláštnosti

U mazlíčka. (V)

Možnost nízkého napětí

4 úrovně IRQ, hodiny mimo

4 úrovně IRQ, hodiny mimo

Nízkonapěťová verze 8xC51Fx

4 úrovně IRQ, hodiny mimo

4 úrovně IRQ, hodiny mimo

4 úrovně IRQ, hodiny mimo

hodinová frekvence riods (MC synchronizační frekvence)). To omezilo použití řady mikrokontrolérů v aplikacích vyžadujících zvýšený výkon a složité výpočty (16- a 32bitové). Otázka zásadní modernizace architektury MCS-51 se stala naléhavou. Problém modernizace byl komplikován skutečností, že na začátku 90. let již bylo vytvořeno mnoho vývoje v oblasti softwaru a hardwaru rodiny MCS-51, v souvislosti s nímž byl jedním z hlavních úkolů návrhu nová architektura měla implementovat hardwarovou a softwarovou kompatibilitu s vývojem založeným na MCS -51.

K vyřešení tohoto problému byla vytvořena společná skupina specialistů Intel a Philips, později se však cesty těchto dvou společností rozešly. V důsledku toho se v roce 1995 objevily dvě výrazně odlišné rodiny: Intel MCS-251/151 a Philips MCS-51XA (viz podsekce 1.2).

Klíčové vlastnosti architektury MCS-251:

24bitový lineární adresní prostor, adresování až 16 MB paměti;

Architektura registrů, která umožňuje, aby byly registry označovány jako bajty, slova a dvojitá slova;

Režim adresování stránek pro rychlejší načítání příkazů z externí programové paměti;

fronta pokynů;

Rozšířená instrukční sada, včetně 16bitových aritmetických a logických operací;

Rozšířený adresní prostor zásobníku (až 64 KB);

Provedení nejrychlejšího příkazu ve 2 cyklech.

Instrukční sada MCS-251 obsahuje dvě instrukční sady – první sada je kopií instrukční sady MCS-51 a druhá se skládá z rozšířených instrukcí, které využívají výhod architektury MCS-251. Před použitím mikrokontroléru je nutné jej nakonfigurovat, tzn. pomocí programátoru "vypálit" konfigurační bity, které určují, která z instrukčních sad se stane aktivní po zapnutí napájení. Pokud nainstalujete první sadu instrukcí, pak v tomto případě bude MK řady MCS-251 kompatibilní s MCS-51 na úrovni binárního kódu. Tento režim se nazývá binární režim. Pokud zpočátku nainstalujete sadu rozšířených instrukcí (Source Mode), pak programy napsané pro MCS-51 budou vyžadovat rekompilaci na křížových nástrojích pro MCS-251. Source Mode umožňuje používat architekturu MCS-251 s maximální efektivitou a dosahovat nejvyššího výkonu.

Pro uživatele zaměřené na použití mikrokontrolérů MCS-251 jako mechanické náhrady za MCS-51 Intel vydává mikrokontroléry MCS-151 již naprogramované ve stavu Binary Mode.

Některé charakteristiky řady mikrokontrolérů MCS-251/151 jsou uvedeny v tabulce 1.1.

V současnosti Intel, zaměřený na trh s procesory Pentium, omezuje výrobu krystalů MCS-51. Obecně to pro konkrétního vývojáře může zůstat bez povšimnutí, pokud ovšem nepoužívá mikrokontroléry 8xC51GB a 80C152Jx, které nemají mezi produkty jiných firem své přesné obdoby. Stejně jako všechny ostatní mikrokontroléry řady MCS-51 jsou všechny mnohokrát replikovány jinými společnostmi.

Základem mikrokontroléru (viz obr. 1) je 8bitová aritmetická logická jednotka (ALU). Paměť MK má harvardskou architekturu, tzn. logicky rozdělena: na programovou paměť - PP (interní nebo externí), adresovanou 16bitovým čítačem příkazů (SC) a datovou paměť - interní (Rezidentní datová paměť - RPD) 128 (nebo 256) bytů, a také externí (External datová paměť – VPD) až 64 KB. Fyzicky je paměť programu implementována na ROM (pouze pro čtení) a datová paměť je implementována na RAM (data lze zapisovat a číst).

Příjem a dodávka externích signálů se provádí přes 4 osmibitové porty Р0..Р3. Při přístupu k externí programové paměti (EPM) nebo datové paměti (VPD) se porty P0 a P2 používají jako multiplexní externí adresová/datová sběrnice. Linky portu P3 mohou také provádět alternativní funkce (viz Tabulka 1).

16bitový registr DPTR tvoří adresu VPD nebo základní adresu paměti programu v instrukci převodu Accumulator. Registr DPTR lze také použít jako dva nezávislé 8bitové registry (DPL a DPH) pro ukládání operandů.

8bitový interní registr příkazů (RK) přijímá kód prováděného příkazu; tento kód je dekódován řídicím obvodem, který generuje řídicí signály (viz obr. 1).

Přístup do speciálních funkčních registrů - RSF (SFR - na obr. 1 jsou zakroužkované tečkovanou čarou) je možný pouze pomocí přímého bytového adresování v rozsahu adres od 128 (80h) a více.


Rezidentní datová paměť (RDD) v prvních modelech mikrokontrolérů rodiny MCS-51 měla kapacitu 128 bytů. Dolních 32 bajtů RPD jsou také univerzální registry - RON (4 banky po 8 RON). Program lze uplatnit na jedno z 8 RON aktivní banky. Výběr aktivní banky RON se provádí naprogramováním dvou bitů ve stavovém registru procesoru - PSW.


Tabulka 1 - Přiřazení pinů MCS-51

PIN č. Označení Účel
1..8 P1 8bitový kvazi-obousměrný I/O port
9 RST

Resetovací signál (aktivní úroveň - vysoká);

Signál RST se resetuje: PC a většina registrů speciálních funkcí (SFR), čímž se zablokují všechna přerušení a časovače; vybere RON Bank 0; zapíše "všechny" na porty P0_P3 a připraví je pro vstup; zapíše kód 07H do ukazatele zásobníku (SP);

10..17

8bitový kvazi-obousměrný I/O port; po zápisu do odpovídajícího bitu "1" - provádí další (alternativní) funkce:

Vstup sériového portu - RxD;

Výstup sériového portu - TxD;

Vstup externího přerušení 0 - ~INT0;

Vstup externího přerušení 1 - ~INT1;

Vstup časovače/čítače 0 - T0;

Vstup časovače/čítače 1 - T1;

Stroboskopický výstup. signál při zápisu do VPD - ~ WR;

Stroboskopický výstup. signál při čtení z VPD - ~ RD;

18, 19 X1, X2 Závěry pro připojení křemenného rezonátoru nebo LC obvodu;
20 GND Obecný závěr;
21..28 P2 8bitový kvazi-obousměrný I/O port; nebo výstupní adresa A v režimu externí paměti (VPP nebo VPD);
29 PME Záblesk čtení z externí programové paměti, vydává se pouze při přístupu k externí paměti ROM;
30 ALE Stroboskop adresy externí paměti (VPP nebo VPD);
31 EA Po deaktivaci RPP úroveň "0" na tomto vstupu přepne MK na výběr příkazů pouze z dráhy ;
39..32 P0 8bitový obousměrný I/O port; při přístupu k externí paměti vydá adresy A (které jsou zapsány do externího registru signálem ALE) a poté vymění bajt synchronně se signálem ~PME (pro příkazy) nebo ~WR,~RD (pro data ve VPD) , při přístupu k externí paměti jsou všechny jednotky zapsány do registru portu P0, čímž se zničí informace tam uložené;
40 Ucc Výstup napájecího napětí

Přepínání bank RON zjednodušuje provádění podprogramů a manipulaci s přerušeními, protože. není nutné při volání podprogramu přenášet obsah RON hlavního programu do zásobníku (stačí přejít do jiné aktivní banky RON v podprogramu).

Přístup k RPD je možný pomocí nepřímého nebo přímého bytového adresování (přímé bytové adresování umožňuje přístup pouze k prvním 128 bytům RPD).

Rozšířenou oblast RPD (pro mikrokontroléry řady MCS-52 a následné rodiny) od adresy 128 (80h) do 255 (FFh) lze adresovat pouze pomocí metody nepřímého adresování.

Tabulka 2 - Blokové registry speciálních funkcí (s f r)

Mnemo kód název
0E0h *ACC baterie
0F0h *B Zaregistrujte expandér baterie
0D0h *PSW Stavové slovo procesoru
0B0h *P3 Port 3
0A0h * P2 Port 2
90h *P1 Port 1
80h *P0 Port 0
0B8h * IP Přerušit registr priorit
0A8h *TJ Registr masky přerušení
99h SBUF Vyrovnávací paměť sériového transceiveru
98h * SCON Kontrola/stavový registr sériového portu
89h TMOD Registrace režimu časovače/počítadla
88h * TCON Časovač/Ovládání počitadla/Registr stavu
8Dh ČT1 Časovač 1 (vysoký bajt)
8bh TL1 Časovač 1 (nízký bajt)
8 kanálů TH0 Časovač 0 (vysoký bajt)
8ah TL0 Časovač 0 (nízký bajt)
83h DPH Registr datových ukazatelů (DPTR) (vysoký bajt)
82h DPL Registr datových ukazatelů (DPTR) (nízký bajt)
81h SP Registr ukazatelů zásobníku
87h PCON Registr řízení poptávky

2. SOFTWAROVÝ MODEL MCS–51


TYPY PŘÍKAZŮ MCS–51

Téměř polovina příkazů se provádí v 1 strojovém cyklu (MC). Při frekvenci krystalového oscilátoru 12 MHz je doba provedení takového příkazu 1 μs. Zbývající příkazy se provádějí ve 2 strojových cyklech, tzn. po dobu 2 ms. Ve 4 strojových cyklech se provádějí pouze instrukce násobení (MUL) a dělení (DIV).

Během jednoho strojového cyklu existují dva přístupy do paměti programu (interní nebo externí) pro čtení dvou bajtů instrukce nebo jeden přístup do paměti externích dat (EDM).

3. ZPŮSOBY (METODY) ŘEŠENÍ MCS–51

1. ADRESA REGISTRŮ - 8bitový operand je umístěn v RON zvolené (aktivní) banky registrů;

2 PŘÍMÉ ADRESOVÁNÍ (označeno znaménkem - #) - operand je umístěn ve druhém (a pro 16bitový operand i ve třetím) bytu příkazu;

3 NEPŘÍMÉ ADRESOVÁNÍ (označeno znakem - @) - operand se nachází v paměti dat (RPD nebo VPD) a adresa paměťové buňky je obsažena v jednom z RON nepřímého adresování (R0 nebo R1); v příkazech PUSH a POP je adresa obsažena v ukazateli zásobníku SP; registr DPTR může obsahovat adresu VPD až do 64K;

4 DIRECT BYTE ADDRESSING – (dir) – používá se pro přístup k buňkám RPD (adresy 00h…7Fh) a speciálním funkčním registrům SFR (adresy 80h…0FFh);

5 DIRECT BIT ADDRESSING - (bit) - slouží k přístupu samostatně adresovatelných 128 bitů umístěných v buňkách RPD na adresách 20H ... 2FH a k samostatně adresovatelným bitům speciálních funkčních registrů (viz tabulka 3 a model programu);

6 NEPŘÍMÁ INDEXOVÁ ADRESA (označeno znakem @) - zjednodušuje prohlížení tabulek v paměti programu, adresa PP je určena součtem základního registru (PC nebo DPTR) a indexového registru (Baterie);

7 IMPLICITNÍ (VESTAVĚNÁ) ADRESA - kód instrukce obsahuje implicitní (implicitně) odkaz na jeden z operandů (nejčastěji na Akumulátor).

4. FORMÁT SLOVA STAVU PROCESORU (PSW).

C - Příznak Carry (CARY) nebo výpůjčka, také funguje jako "booleovský akumulátor" v bitově řízených instrukcích;

AC – pomocný (přídavný) příznak přenosu – nastaven na „1“, pokud příkaz sčítání (ADD, ADDC) měl přenos z tetrády nízkého řádu do vyššího řádu (tj. z 3. bitu na 4. bit);

F0 - uživatelský příznak - nastavení, reset a kontrola pomocí softwaru;

RS1 RS0 banka adresa (adresář)
0 0 0 00h..07h
0 1 1 08h..0Fh
1 0 2 10h..17h
1 1 3 18h..1Fh

RS1,RS0 – Výběr banky registrace:

OV - Aritmetický příznak přetečení; jeho hodnota je určena operací XOR vstupních a výstupních přenosových signálů nejvýznamnějšího bitu ALU; jediná hodnota tohoto příznaku označuje, že výsledek aritmetické operace v kódu doplňku dvou je mimo rozsah: –128…+127; při provádění operace dělení se vynuluje příznak OV a v případě dělení nulou se nastaví; při násobení se nastaví příznak OV, pokud je výsledek větší než 255 (0FFH);

Bit PSW - Reserved, obsahuje trigger, dostupný pro zápis nebo čtení;

P - paritní příznak - je přičtení počtu jednotlivých bitů v akumulátoru k sudému číslu; je tvořena kombinačním obvodem (programově dostupný pouze pro čtení).

Mikrokontroléry MCS-51 nemají příznak "Z". Ale v instrukcích podmíněného skoku (JZ, JNZ) kombinační obvod kontroluje aktuální (nulový nebo nenulový) obsah akumulátoru.

Veškeré příkazy k přenosům a výměně operandů lze provádět přes Akumulátor (viz obr. 3). Kromě toho lze přenosy z/do externí paměti (paměť programů nebo datová paměť) provádět pouze prostřednictvím baterie.

Většinu převodů lze také provést přes dopředný bajt (dir). Existují dokonce přenosy dir-to-dir (viz obrázek 3).

Chybějící přenosy z RON do RON lze realizovat jako přenosy z RON do dopředného bajtového adresáře (vzhledem k tomu, že RON jsou umístěny v počáteční oblasti Resident Data Memory, jejíž buňky lze adresovat jako dir).

XCH výměnné příkazy umožňují posílat bajty bez zničení obou operandů.

Aritmetické příkazy se provádějí pouze v akumulátoru. Proto musí být první operand nejprve umístěn do Akumulátoru a poté přidat nebo odečíst druhý operand. Výsledek je umístěn do Akumulátoru.


Příkaz SUBB odčítání se provádí pouze s výpůjčkou (tj. příznak Cary se také odečítá od výsledku). Proto, aby bylo možné provést instrukci odečítání bez půjčování, je nutné nejprve provést instrukci Clear Flag C (CLRC).

Instrukce pro násobení jednobajtových operandů - MULAB - umístí dvoubajtový (16bitový) výsledek: dolní bajt je v Akumulátoru, vysoký bajt je v registru B.

Výsledek provedení instrukce pro dělení jednobajtových operandů - DIVAB - je umístěn: podíl - akumulátor, zbytek - do registru B.

Aritmetická instrukce INC přidá jedničku k vybranému operandu. Aritmetická instrukce DEC odečte jedničku od zvoleného operandu. Instrukce Accumulator Decimal Correction (DAA) vám pomůže přidat binárně kódovaná desítková (BCD) čísla bez jejich převodu do hexadecimálního (hexadecimálního) formátu. Zdrojové operandy musí být ve formátu BCD, tzn. v každé tetrádě o jednom bajtu jsou pouze čísla od 0 do 9 (nemohou být hexadecimální čísla: A, B, C, D, E, F). Jeden bajt tedy může obsahovat čísla od 00 do 99 pro sbalená BCD čísla nebo čísla od 0 do 9 pro rozbalená BCD čísla.

Příkaz DA A - decimální oprava provádí akce s obsahem akumulátoru po přidání čísel BCD v procesoru (čísla byla přidána podle zákonů hexadecimální aritmetiky) následovně (viz příklad):

· pokud je obsah tetrády nízkého řádu Akumulátoru větší než 9 nebo je nastaven příznak pomocného přenášení (AC = 1), pak se k obsahu Akumulátoru přidá 6 (tj. chybějících šest číslic v hex. formát);

· pokud je poté obsah vysokého řádu Akumulátoru větší než 9 nebo je nastaven příznak C, pak se k vyššímu řádu Akumulátoru přidá číslo 6.

Instrukce dekadické korekce DA A není použita po instrukci inkrementace (INC), protože instrukce inkrementace neovlivňuje (nemění) příznaky C a AC.

Logické příkazy:

Logické "AND" - ANL,

Logické "OR" - ORL,

Logický příkaz XOR - XRL - se provádí v Akumulátoru (stejně jako aritmetika), ale je možné provádět logické příkazy i v byte přímé adresy (dir). V tomto případě může být druhý operand:

v baterii popř

Okamžitý operand v instrukci.

Rotační instrukce (RR A, RL A) a rotační instrukce přes příznak CARY (RRC A, RLC A) otočí obsah akumulátoru o 1 bit. Bitové operandy jsou odesílány pouze přes příznak C.

Stav systému přerušení je dotazován na konci každého strojového cyklu ve fázi S5P2, s výjimkou instrukcí RETI a jakýchkoli instrukcí, které přistupují k registrům IE a IP. Trvá 38 až 86 period frekvence fOSC od okamžiku, kdy je požadavek na přerušení přijat k obsluze přerušení, v závislosti na fázi požadavku a počtu strojových cyklů instrukce, během kterých byl požadavek přijat.

Při hardwarové implementaci přerušení se provede instrukce LCALL addr16, která zajistí uložení aktuálního stavu programového čítače do zásobníku (zapamatuje si návratovou adresu) a skok na počáteční adresu addr16 příslušné servisní procedury. Každý zdroj požadavku na přerušení má svůj vlastní přidružený zdroj

počáteční adresa (vektor přerušení):

Externí přerušení INT0.

Přerušení časovače/počítadla TC0.

Externí přerušení INT1.

Přerušení časovače/čítače TC1.

Přerušení sériového portu.

2.7. Způsoby adresování a příkazový systém rodiny MCS-51

Řídící systém rodiny MCS-51 je zaměřen na organizaci flexibilního vstupu/výstupu dat přes univerzální porty P0...P3 a primární zpracování informací. Zvláštní pozornost je věnována operacím s bity a převodu řízení jejich hodnotou. Instrukce, které takové operace provádějí, tvoří velkou skupinu a spolu s odpovídajícím hardwarem tvoří tzv. „Booleovský procesor“ jako součást architektury MCS-51.

Příkazový systém poskytuje programátorovi možnost používat většinu operací s úplnou sadou metod adresování a softwarově přístupných hardwarových prostředků.

2.7.1. Metody adresování

Každá instrukce říká procesoru operaci, která má být provedena, a metody přístupu k operandům. Kód příkazu má několik polí, která mají specifický funkční účel. Nejdůležitějšími poli každého příkazu jsou operační kód (COP), který určuje akci příkazu, a část adresy. Pole adresové části obsahují informace o adresách operandů a výsledku operace a v některých případech informace o adrese další instrukce.

Pokud adresa ukazuje na číslo paměťové buňky, ve které se operand nachází nebo kde je zadán, pak se nazývá přímá adresa.

Metody adresování jsou sadou mechanismů pro přístup k operandům. Některé z nich jsou jednoduché, výsledkem je kompaktní formát instrukce a rychlý přístup k operandu, ale mají omezené množství dostupných zdrojů. Jiné vám umožňují pracovat se všemi prostředky dostupnými v systému, ale příkaz se ukáže být dlouhý,

vstup a provedení stráví spoustu času. Sada metod adresování v každé sadě instrukcí je kompromisní kombinací známých mechanismů adresování zvolených návrháři architektury na základě sady úloh, které mají být řešeny.

Níže jsou uvedeny hlavní metody adresování používané v systému příkazů rodiny MCS-51.

Implicitní adresování. Příkaz neobsahuje explicitní údaje o adrese operandu účastnícího se operace nebo adrese, na které je umístěn výsledek operace, ale tato adresa je implikovaná. V příkazech je akumulátor nejčastěji implicitně adresován jako cíl výsledku operace. Například výsledek sečtení obsahu akumulátoru (A) a registru R1 aktuální databanky instrukcí ADD A,R1 je zapsán do implicitně adresovaného akumulátoru. Celá zadaná instrukce zabírá v paměti jeden bajt, přičemž adresa pouze akumulátoru (8Eh oblasti SFR) obsahuje jeden bajt.

Přímé adresování. V poli adresy příkazu, obsahovat

Nežije adresa operandu, ale operand samotný. Přímé adresování je označeno speciálním znakem # před číslem. Například příkaz MOV A,#15h načte do akumulátoru šestnáctkové číslo 15 (druhý bajt příkazu). V příkazovém systému se přímé adresování označuje jako #data, kde data jsou číslo

(data = 00h...FFh).

Přímé adresování. Pole adresy instrukce udává přímou adresu umístění datové paměti, ve kterém je operand umístěn nebo kde je zapsán. Například instrukce MOV A,15h načte obsah buňky DSEG na adrese 15h do akumulátoru. Paměťová buňka je adresovatelná přímo, zatímco akumulátor je adresován implicitně. V závislosti na umístění adresovaného operandu se přímé adresování dělí na přímé adresování registru a absolutní adresování.

Přímé adresování registru. Pole adresy příkazu obsahuje přímou adresu registru aktuální banky registrů. V každé bance je osm registrů a k jejich adresování je potřeba tříbitová přímá adresa. V mnemotechnických povelech je adresovatelný registr označen Rn, kde n=0...7. Všechna pole příkazu se vejdou do jednoho bajtu. Takové adresování se nazývá krátké. Například MOV R4,R1.

Přímé absolutní adresování umožňuje přístup k libovolné buňce DSEG a oblasti SFR. Přímá adresa v tomto případě trvá jeden bajt a příkaz dva bajty. V příkazovém systému je bajt přímé adresy označen slovem direct (přímý) (přímý = 00h ... FFh). Například instrukce MOV 80h,R2 (nebo MOV P0,R2) načte obsah registru R2 aktuální databanky do portu P0 (umístění 80h SFR). Pokud jsou oba operandy přímo absolutně adresovatelné, pak se instrukce stane tříbajtovou instrukcí (např. MOV 80h,15h).

nepřímé adresování. Pole adresy obsahuje adresu paměťového místa, kde se nachází přímá adresa operandu. V příkazovém systému je nepřímé adresování označeno speciálním znakem @. vlastnictví

registry R0 a R1 (@Ri, i = 0,1) každé banky registrů musí uložit přímou adresu. Pokud je například obsah registru R1 aktuální banky registrů 15h, pak instrukce MOV A,@R1 provede stejnou akci jako výše uvedená instrukce MOV A,15h – načte obsah paměťového místa DSEG. s adresou 15h do akumulátoru. Příkaz MOV A, @ R1 je však jednobajtový, ale hlavně je možné programově změnit adresu změnou obsahu registru R1.

Relativní adresování. Při relativním adresování se přímá adresa vytvoří přidáním základní adresy do pole adresy příkazu. Obsah programového čítače se používá jako základní adresa a adresové pole instrukce je osmibitový rel (relativní) offset. Číslo rel je příkazem interpretováno jako celé číslo se znaménkem reprezentované dvojkovým doplňkem. Jeho prezentační rozsah je (-128...+127). Při určování čísla rel mějte na paměti, že počítadlo programu ukazuje na další instrukci, která má být provedena. Relativní adresování je široce používáno v příkazech pro přenos řízení, což umožňuje vytváření přemístitelných programových modulů. Řídící přenosové povely s relativním adresováním umožňují větvení vzhledem k aktuální pozici PC programu v obou směrech o (-128...+127) bytů.

V programech v assembleru lze pole offset použít k určení štítku, na který se má přejít. Výsledkem překladu je, že assembler vypočítá hodnotu offsetu, pokud nepřekročí (-128…+127). V opačném případě se zobrazí chybové hlášení.

Základní adresování představuje určitý druh relativního adresování. Přímá adresa je v tomto případě tvořena přidáním adresy uvedené v příkazu k obsahu základního registru, ve kterém je uložena základní adresa. Funkci základního registru v rodině MCS-51 plní registr datových ukazatelů DPTR nebo počítač programu PC. Tento typ adresování je užitečný zejména při zpracování tabulek a datových polí. V instrukcích MOVC A,@A+DPTR a MOVC A,@A+PC je 16bitová přímá adresa tvořena součtem obsahů registrů DPTR a A nebo PC a A.

Adresování stránek. Při použití adresování stránek je paměť rozdělena na několik stránek stejné délky. Adresování stránek se provádí samostatným registrem stránek a paměťové buňky v rámci stránky jsou adresovány adresou obsaženou v instrukci. Přímá adresa je tvořena zřetězením (připojením) adresy stránek a adresy paměťové buňky v rámci stránky. V instrukci MOVX A,@Ri plní port P2 (vysoký bajt adresy) funkci registru stránky a obsah registru Ri (nízký bajt adresy) udává adresu v rámci stránky. V tomto případě je paměť rozdělena na 256 stránek po 256 buňkách v každé z nich.

Adresování zásobníku používá se v bezadresných příkazech a je kombinací metod auto-inkrementace a auto-dekrementace, pracující na principu LIFO (Last I nput - First O output) - „poslední dovnitř - první ven“. Zásobník je umístěn v DSEG a roste ve směru rostoucí adresy. Adresa vrcholu zásobníku je obsažena v ukazateli zásobníku SP. Když je bajt vložen do zásobníku, obsah SP se nejprve zvýší a poté se zapíše adresa. Při čtení bajtu ze zásobníku nejprve čtěte na adrese, na kterou ukazuje SP, a poté SP snižujte. Při použití zásobníku mějte na paměti, že hloubka zásobníku (maximální počet paměťových buněk obsazených zásobníkem) není řízena hardwarem. Při nadměrném nárůstu zásobníku mohou být paměťové buňky, které k tomu nejsou určeny, zaměstnány ztrátou informací v nich. Hardwarový zásobník se používá k uložení návratové adresy při obsluze přerušení.

2.7.2. Velitelský systém rodiny MCS-51

Příkazový systém je uveden v tabulkách A2.1...A2.6 v Dodatku 2. V tabulkách je uveden název příkazu, jeho mnemotechnická pomůcka, binární operační kód, vliv provedeného příkazu na příznaky C, OV, AC a P, délka příkazu v bajtech (B) a doba provádění ve strojových cyklech (C), jakož i obsah převodu prováděného instrukcí. Čárka se používá jako oddělovač adresních polí v příkazech. Pro zlepšení čitelnosti lze za čárku přidat mezery, pokud to používaný assembler podporuje.

Celou sadu příkazů lze rozdělit do 5 skupin: operace přenosu dat, aritmetické operace, logické operace, operace s bity a operace přenosu řízení.

Skupina příkazů operace přenosu dat(Tabulka A2.1) co-

obsahuje MOV (přenos dat mezi DSEG a RSEG), MOVC (mezi CSEG a A), MOVX (mezi XSEG a A), PUSH a POP stack přístupové příkazy a dva XCH a XCHD výměnné příkazy. Všechny instrukce přenosu dat, jejichž cílem je akumulátor, nastavují paritní příznak P obsahu akumulátoru a instrukce přímého adresování, jejichž cílem je registr PSW, mění všechny příznaky. Nejprostornější je instrukce MOV, která využívá čtyři způsoby adresování: přímý registr (A, Rn, DPTR), přímý (přímý), nepřímý (@Ri), přímý (#data, #data16). Druhý operand příkazu je zdroj, první operand je cíl. Existují tři způsoby adresování (kromě přímého) pro určení cíle a všechny čtyři pro určení zdroje. Tříbajtová přímá, přímá instrukce MOV zajišťuje přenos mezi libovolnými dvěma paměťovými buňkami (DSEG a SFR), včetně RSEG. Pro výměnu s RSEG jsou k dispozici speciální dvou- a jednobajtové formáty:

Speciální instrukce MOV DPTR,#data16 načte 16bitový ukazatel DPTR s hodnotou data16.

Instrukce MOVC umožňuje číst informace z paměti programu CSEG nikoli do příkazového registru řídicího zařízení, ale do akumulátoru ovládacího zařízení. Příkaz používá dva způsoby adresování: založené na DPTR a relativně k PC. V obou případech je celočíselný offset (index) bez znaménka uložen v akumulátoru. Akumulátor slouží také jako přijímač výsledku. Příkaz umožňuje provádět rychlé překódování podle tabulek.

K externí paměti se přistupuje pomocí instrukce MOVX. Výměna probíhá po bytech mezi akumulátorem a externím XSEG. Buňku XSEG lze adresovat dvěma způsoby: nepřímo prostřednictvím 16bitového ukazatele DPTR a po stránce nepřímo prostřednictvím 8bitového ukazatele Ri, i=0,1. V druhém případě je registr stránek P2.

Přenos dat zajišťují neadresné příkazy PUSH a POP

mezi DSEG, RSEG a SFR.

Příkaz XCH exchange poskytuje obousměrnou výměnu bajtů a příkaz XCHD poskytuje nižší tetrády bajtových operandů.

Skupina instrukcí pro aritmetické operace(Tabulka A2.2) co-

obsahuje instrukce pro přidání ADD, přenesení přidání ADDC, vypůjčení odečtení SUBB, zvýšení a snížení o jeden INC a DEC, dekadickou korekci komprimovaného formátu binárně kódovaného dekadického (BCD) sčítání, MUL násobení a dělení DIV. Operace se provádějí na celých číslech bez znaménka. V operacích sčítání a odčítání je akumulátor prvním operandem a cílem výsledku. K definici druhého operandu se používá přímý registr, přímé absolutní, přímé a nepřímé adresování. Operace INC a DEC se vztahují na akumulátor, přímo adresovatelný registr, přímo nebo nepřímo adresovatelné místo v paměti. Kromě toho se operace INC vztahuje na obsah 16bitového registru ukazatele DPTR.

Operace násobení celého čísla a dělení bez znaménka zahrnují akumulátor a registr B. Při násobení se 8bitová hodnota A vynásobí 8bitovou hodnotou B a 16bitový výsledek se zapíše do páru BA. V tomto případě registr B ukládá nejvyšší část produktu. Příznak OV je nastaven, pokud je součin větší než 255. Když je 8bitová hodnota A dělena 8bitovou hodnotou B, podíl se zapíše do A a zbytek do B. Pokus o dělení 0 nastaví příznak přetečení OV.

Příkaz DA dekadické korekce akumulátoru je umístěn za příkazem sčítání. Termíny musí být uvedeny v kódu BCD. Korekce se provádí standardním způsobem.

Skupina logických instrukcí(Tabulka A2.3 ) obsahuje tři typické operace: ANL - logické AND, ORL - logické OR, XRL - logické výlučné OR. Zdroj prvního operandu

je buď akumulátor A nebo přímo adresovatelná paměťová buňka. Druhý operand je specifikován jednou ze čtyř základních metod adresování. Do skupiny patří také jednotlivé operace nad obsahem akumulátoru: CLR - maže, CPL - inverze, dále RL, RLC, RR a RRC - operace cyklických a prodloužených posunů vpravo a vlevo. Patří sem i operace výměny tetrád ve SWAP akumulátoru, kterou lze interpretovat jako cyklický posun bajtu o čtyři bity.

Skupina instrukcí bitové operace(tabulka A2.6) obsahuje ko-

příkazy SETB - nastavit bit na 1, CLR - bit resetovat na 0, CPL - bit invertovat, ANL a ORL - logické AND a logické OR obsahu příznaku C a přímo adresovaného bitu, MOV - přesměrování bitů.

V V bitových operacích hraje příznak C roli logického akumulátoru. Jako operandy se používá obsah příznaku C nebo přímo adresovatelný bit oblasti BSEG. V operacích ANL a ORL můžete použít obsah přímo adresovaného bitu (bit) nebo inverzi obsahu (/bit).

V tato skupina také zahrnuje instrukce podmíněného skoku s relativní 8bitový offset rel. Podmíněná větev může být provedena buď když je bit nastaven (příkaz JB), nebo vymazán (příkaz JNB). Za zmínku stojí zejména instrukce JBC, která po nastavení bitu implementuje větev a zároveň bit resetuje na 0.

Skupina příkazů pro přenos řízení(Tabulky A2.4 a A2.5)

drží pokyny pro nepodmíněné skoky AJMP, LJMP, SJMP, JMP, podmíněný skok JZ, JNZ, CJNE, volání ACALL, LCALL, návrat RET, RETI a aktualizace podmíněným skokem DJNZ. Je zde také zahrnut prázdný příkaz NOP.

V Relativní adresování je široce používáno v příkazech pro přenos řízení, aby se umožnilo vytvoření přemístitelných programových modulů. Relativní adresa je 8bitový offset rel je bajt se znaménkem, který poskytuje přechod na (-128… +127) bajtů vzhledem k aktuální poloze počítače. Přímou adresu addr16 nebo nepřímou adresu @A+DPTR lze použít k přeskočení na jakýkoli jiný bod v adresním prostoru o velikosti 64 kB. V druhém případě je obsah A interpretován jako celé číslo bez znaménka. Pro kompatibilitu s rodinou MCS-48 je představena varianta krátkého přímého adresování addr11 v rámci aktuální stránky 2K.

Všechny tyto typy adresování se používají v instrukcích skoku. Příkazy volání používají pouze přímé metody adresování addr16 a in-page addr11. Všechny podmíněné příkazy používají pouze relativní adresování.

Když mikrokontrolér rozpozná požadavek na přerušení, vydá instrukci LCALL addr16, která automaticky uloží návratovou adresu do zásobníku. Informace o stavu programu (obsah registru PSW) se automaticky neukládají. V čem



Související články: