Mikrokontroléry rodiny mcs51. Mikrokontroléry MCS – 51. Bloková schéma, ALU, dátová pamäť Programovanie mcs 51

  • 06.11.2021

MDT 681,5, 681,325,5 (075,8)

BBK 32.973.202-018.2 i 73

A. N. ŠčerbinaVýpočtové stroje, systémy a siete. Mikrokontroléry a mikroprocesory v riadiacich systémoch: cheb. príspevok / A.N. Shcherbina, P.A. Nechaev- SPb .: Z polytechniky. Univerzita, 2012.-226 s.

Zodpovedá obsahu štátneho vzdelávacieho štandardu pre učebné odbory a odbornosti v oblasti manažmentu v technických systémoch, elektroenergetike a elektrotechnike a obsahu vzorového učebného plánu pre disciplínu „Výpočtové stroje, systémy a siete“.

Základné otázky logickej organizácie mikroprocesorových systémov sú zvažované na príklade základnej architektúry mikrokontrolérov rodiny MCS-51 od Intelu. Je popísaná technológia programovania mikrokontrolérov v jazykoch Assembler a SI.

Môže byť užitočný pre študentov a pedagógov vysokých technických škôl, špecialistov na automatizáciu technologických procesov a výrobných zariadení, ako aj pre konštruktérov mikroprocesorových systémov.

Zodpovedá aj obsahu štátneho vzdelávacieho štandardu odborov „Mikrokontroléry a mikroprocesory v riadiacich systémoch“ a „Elektronické zariadenia automatizácie“ bakalárskeho, inžinierskeho a magisterského štúdia v smere 140400 „Elektrotechnika a elektrotechnika“.

Pretlačené rozhodnutím redakčnej a vydavateľskej rady

Štátna polytechnická univerzita v Petrohrade.

© Shcherbina A. N., Nechaev P. A., 2012

© Štát Petrohrad

Polytechnická univerzita, 2012

ISBN 978-5-7422-3553-8


Úvod .. 7

Kapitola 1. Architektúra rodiny MCS51. desať

1.1 Všeobecné charakteristiky 10

1.2 Bloková schéma 11



1.3 Účel záverov mikrokontroléra 8051 15

1.4 Organizácia pamäte 17

1.4.1 Programová pamäť (ROM) 18

1.4.2 Dátová pamäť (RAM) 19

1.4.3 Registre špeciálnych funkcií. dvadsať

1.4.4 Register vlajok (PSW) 23

1.5 Ovládacie a synchronizačné zariadenie 26

1.6 Usporiadanie I/O portov 27

1.6.1 Všeobecné informácie. 27

1.6.2 Alternatívne funkcie. 27

1.7. Časovače / počítadlá pre mikrokontroléry 8051.28

1.7.1. Štruktúra časovača-počítadla. 28

1.7.2 Režimy činnosti časovačov-počítačov. tridsať

1.8. Sériový port 32

1.8.1. Štruktúra sériového portu. 32

1.8.2. Riadiaci/stavový register transceivera SCON .. 34

1.8.3. Register riadenia výkonu PCON .. 36

1.9. Systém prerušenia 37

1.9.1. Štruktúra systému prerušenia. 37

1.9.2 Vykonávanie rutín prerušenia. 40

Kapitola 2. Vlastnosti mikrokontroléra 80C51GB .. 42

2.1 Vlastnosti 42

2.2 I/O porty P0-P5 43

2.2.1 Fungovanie vstupno-výstupných portov. 43

2.2.2 Zápis do portu .. 46

2.3 Funkcie systému prerušenia 8XC51GB .. 49

Povoliť / zakázať prerušenia. 50

Prerušiť správu priorít. 51

Vonkajšie prerušenia. 54

2.3. Uzol ADC 56

2.4. Hardvérový strážny pes 61

2.5. Detekcia zlyhania hodín 63

2.6. Matica programovateľných počítadiel RSA 64

2.6.1. Štruktúra PCA .. 64

2.6.2. Register režimu počítadla PCA (CMOD) 66

2.6.3. Riadiaci register počítadla PCA (CON) 67

2.6.4. Porovnanie / odovzdanie modulov. 68

2.7. Rozšírený sériový port 76

2.8. Časovače / počítadlá 79

Pinout skupiny mikrokontrolérov 8XC51GB .. 86

Kapitola 3. Programovanie MK 8051GB .. 89

3.1. Model programovania 89

3.2 Typy údajov 93

3.3 Spôsoby adresovania údajov 93

3.4 Systém príkazov 95

3.4.1 Všeobecné charakteristiky. 95

3.4.2 Typy príkazov. 96

3.4.3 Typy operandov. 97

3.4.4 Príkazy na prenos údajov mikrokontroléra. 98

3.4.5 Príkazy pre aritmetické operácie 8051.101

3.4.6 Príkazy logických operácií mikrokontroléra 8051.104

3.4.7 Príkazy pre operácie s bitmi mikrokontroléra 8051.106

3.5 Ladenie programov 111

Kapitola 4. Programovací jazyk ASM-51. 112

4.2 Písanie textu programu 113

4.3 Abeceda jazyka. 114

4.4 Identifikátory. 115

4.5 Čísla 117

4.6 Smernice 118

4.7 Implementácia podprogramov v jazyku ASM51 122

4.7.1 Štruktúra procedúry podprogramu v jazyku ASM51. 122

4.7.2 Odovzdávanie premenných parametrov do podprogramu. 123

4.7.3 Implementácia funkcií podprogramu v jazyku ASM51. 123

4.7.4 Implementácia rutín spracovania prerušení v jazyku ASM51. 124

4.8 Štruktúrované programovanie v assembleri. 125

4.9 Vlastnosti vysielania viacmodulových programov 126

4.10 Používanie segmentov 128

4.10.1 Rozdelenie pamäte MK na segmenty .. 128

4.10.2 Segmenty absolútnej pamäte. 129

4.10.2 Premiestniteľné pamäťové segmenty. 131

Kapitola 5. Programovací jazyk С-51. 134

5.1 Všeobecná charakteristika jazyka 134

5.3 Štruktúra programu С-51 136

5.3. Prvky programovacieho jazyka C-51 138

5.3.1. Symboly .. 138

5.3.2. Lexikálne jednotky, oddeľovače a použitie medzier. 141

5.3.3 Identifikátory .. 142

5.3.4 Kľúčové slová. 143

5.3.5 Konštanty .. 143

5.4. Výrazy v jazykových operátoroch 146

programovanie C-51 146

5.5. Priority pre operácie 148

5.6. Operátori programovacieho jazyka C-51 149

5.6.1. Operátori deklarácie. 150

5.6.2 Spustiteľné operátory .. 150

5.6.3 Operátor priradenia. 151

5.6.4 Podmienený operátor. 151

5.6.5 Štruktúrovaný operátor (). 152

5.6.6 Operátor slučky pre. 152

5.6.7 Operátor cyklu s kontrolou stavu až po telo cyklu while. 153

5.6.8 Operátor cyklu s kontrolou stavu po tom, čo telo cyklu vykoná while. 154

5.6.9 Prerušenie obsluhy. 155

5.6.10 Operátor pokračovať. 155

5.6.11 Prepínač zvoleného operátora. 155

5.6.12 Operátor nepodmienenej vetvy goto. 157

5.6.13 Výraz operátora. 158

5.6.14 Operátor návratu z podprogramu návrat. 158

5.6.15 Prázdny výpis. 158

5.7. Deklarovanie premenných v programovacom jazyku C-51. 159

5.7.1. Vyhlásenie premennej. 159

5.7.3 Integer dátové typy. 161

5.7.4 Čísla s pohyblivou rádovou čiarkou. 162

5.7.5 Premenné vymenovaného typu. 162

5.7.6. Deklarovanie polí v programovacom jazyku C-51. 164

5.7.7. Štruktúry .. 165

5.7.8. Kombinácie (zmesi) 166

5.8. Používanie ukazovateľov v C-51 167

5.8.1. Vyhlásenie ukazovateľov. 167

5.8.2. Netypové ukazovatele. 168

5.8.3. Ukazovatele závislé od pamäte. 169

5.9. Vyhlásenie nových typov premenných 169

5.10. Inicializácia údajov 170

5.11. Používanie podprogramov v programovacom jazyku C-51. 170

5.11.1. Definovanie podprogramov 171

5.11.2. Parametre podprogramov 173

5.11.3. Predbežná deklarácia podprogramov. 174

5.11.4 Volanie podprogramov .. 176

5.11.5 Rekurzívne volanie podprogramov 176

5.11.6 Rutiny spracovania prerušení. 177

5.11.7 Rozsahy premenných a podprogramov 178

5.12. Multimodálne programy 179

Kapitola 6. Príprava programov v integrovanom vývojovom prostredí Keil μVision2. 182

6.1 Vytvorenie projektu v jazyku ASM-51 182

6.2 Príklad vytvorenia projektu v jazyku C pre školiaceho kontrolóra v integrovanom vývojovom prostredí Keil μVision2 188

Kapitola 7. Popis tréningového ovládača .. 199

7.1. Štruktúra ovládača 199

7.2. Adresný priestor 200

7.2.1. Pridelenie pamäte. 200

7.2.2 Externá pamäť. 201

7.2.3. Interná dátová pamäť. 202

7.3. Mapovanie I/O portov 202

7.4. Sériový port ……………………………… ... 203

7.5. Práca s LCD 205

7.6. Ovládacie panely ………………………………………………… 213

PRÍLOHA P2ŠTRUKTÚRA SPRÁVY LABORATÓRIA …… ..217

Príloha A3 Kódy pokynov k stroju. 217

Referencie ... 224


Úvod

Pri rozvoji odborností súvisiacich s automatizáciou technologických procesov a odvetví je štúdium mikrokontrolérov jednou z dôležitých sekcií.

Vo svete sa neustále vyvíja a objavuje sa stále viac 16- a 32-bitových mikrokontrolérov a mikroprocesorov, no najväčší podiel na svetovom trhu mikroprocesorov dodnes zostávajú 8-bitové zariadenia. Podľa všetkých prognóz analytických spoločností na blízku budúcnosť zostane vedúca pozícia 8-bitových mikrokontrolérov na svetovom trhu.

V súčasnosti je medzi všetkými 8-bitovými mikrokontrolérmi rodina MCS-51 nepochybným lídrom z hľadiska počtu odrôd a počtu spoločností vyrábajúcich jej modifikácie. Svoje meno dostal podľa prvého zástupcu tejto rodiny - mikrokontroléra 8051. Úspešná zostava periférnych zariadení, flexibilný výber externej alebo internej programovej pamäte a primeraná cena zabezpečili tomuto mikrokontroléru úspech na trhu.

Výhody rodiny MCS-51:

· Architektúra, ktorá je de facto štandardom;

· Mimoriadna šírka rodiny a rozmanitosť možností;

· Dostupnosť výkonných a rozšírených verzií procesorov;

· Značný počet voľne dostupného vývoja softvéru a hardvéru;

· Jednoduchosť programovania hardvéru, vrátane programovania v obvode;

· Nízka cena a dostupnosť základných čipov;

Dostupnosť špecializovaných verzií ovládačov pre špeciálne podmienky použitia

· Dostupnosť verzií ovládačov so zníženou úrovňou elektromagnetického rušenia;

· Široko známy medzi vývojármi staršej generácie vo svete aj v krajinách SNŠ;

· Podpora architektúry poprednými svetovými vzdelávacími inštitúciami.

A nakoniec hlavná výhoda: po zvládnutí základného čipu rodiny môžete ľahko začať pracovať s takými výpočtovými „monštrami“, ako sú mikrokontroléry Cygnal, Dallas Semiconductor, Analog Devices, Texas Instruments.

Rodina MCS-51 zahŕňa rad mikroobvodov od najjednoduchších mikrokontrolérov až po tie najzložitejšie. K dnešnému dňu existuje viac ako 200 úprav rodiny mikrokontrolérov 8051, ktoré vyrába takmer 20 spoločností. Každý rok sa objavuje stále viac a viac variantov predstaviteľov tejto rodiny.

Hlavné smery vývoja sú:

· Zvýšenie výkonu (zvýšenie taktovacej frekvencie a redizajn architektúry);

· Zníženie napájacieho napätia a spotreby energie;

· Zvýšenie množstva RAM a FLASH pamäte na čipe s možnosťou programovania v obvode;

· Zavedenie zložitých zariadení, ako sú riadiace systémy pohonov, rozhrania CAN a USB atď. do periférie mikrokontrolérov.

Mikrokontroléry rodiny MCS-51 vám umožňujú vykonávať riadiace úlohy pre rôzne zariadenia a implementovať jednotlivé uzly analógového obvodu. Všetky mikroobvody tejto rodiny pracujú s rovnakou inštrukčnou sadou. Väčšina z nich je vyrobená v rovnakých puzdrách s rovnakým pinoutom (číslovanie nožičiek pre puzdro). To umožňuje použitie mikroobvodov od rôznych výrobcov pre vyvíjané zariadenie bez zmeny schémy zapojenia zariadenia a programu.

Hlavnými výrobcami odrôd 51. rodiny na svete sú Philips, Siemens, Intel, Atmel, Dallas, Temic, Oki, AMD, MHS, Gold Star, Winbond, Silicon Systems a množstvo ďalších.

Charakteristiky analógov mikrokontrolérov rodiny MCS-51 (Intel 8XC51FA, 8XC51GB, 80C152) s rozšírenými možnosťami sú uvedené v tabuľke. V 1.

Tabuľka B.1

RAM ROM PCA ADC WDT T / C Po pôrode. Kanály Zvláštnosti
Atmel: AT89C2051
- - - - UART Flash 2 Kb
AT89C4051 - - - - UART Flash 4Kb
AT89S4D12 128 tis - - - UART, SPI Flash 4Kb
Polovodič DALLAS: DS5000FP
- - - + UART Bootstrap nakladač
DS5001FP - - - + UART Bootstrap nakladač
DS8xC520 16 tis - - + 2xUART 2 DPTR
SIEMENS: C505C
16 tis - + + UART, CAN 8 DPTR
C515C 64 tis - + + UART + SSC + CAN 4 PWM, 8 DPTR
Philips: * 89C51RA +
- + - + UART 2 DPTR, 4 lv. prerušenie, vypnutie hodín, Flash 8K
P51XAG1x 8 tis - - + 2 UART
Intel: 8xC51RA
8 tis - + + UART 4 úrovne IRQ, vypnutie hodín
8XC196KC 64 tis 16 tis - + - UART 3 PWM
80 C 196 kB 64 tis 8 tis - + - UART PWM

Kapitola 1. Architektúra rodiny MCS51

8-bitové jednočipové mikrokontroléry MCS-51 sa vďaka svojej dobre navrhnutej architektúre stali veľmi obľúbenými medzi dizajnérmi mikroprocesorových riadiacich systémov. Architektúra mikrokontroléra je súbor interných a externých softvérových hardvérových zdrojov a inštrukčných systémov. Architektúru rodiny MCS-51 do značnej miery predurčuje jej účel – konštrukcia kompaktných a lacných digitálnych zariadení. Mikrokontroléry, ktoré vykonávajú všetky funkcie mikropočítača pomocou jedného mikroobvodu, sa nazývajú jednočipové počítače (OEVM).

Intel vydal približne 50 modelov založených na operačnom jadre mikrokontroléra Intel 8051. V tom istom čase mnohé ďalšie firmy, ako napríklad Atmel, Philips, začali vyrábať vlastné mikrokontroléry vyvinuté v štandarde MCS-51.

Všeobecné charakteristiky

Hlavné charakteristiky rodiny:

· 8-bitová centrálna procesorová jednotka (CPU), zameraná na ovládanie výkonných zariadení;

· CPU má zabudovaný obvod pre 8-bitové hardvérové ​​násobenie a delenie čísel;

· Prítomnosť veľkého počtu operácií na prácu s priamo adresovateľnými bitmi v inštrukčnej sade umožňuje hovoriť o procesore na prácu s bitovými údajmi (booleovský procesor);

· Interná (umiestnená na čipe) programová pamäť maskovaného alebo preprogramovaného typu, ktorá má pre rôzne kryštály objem 4 až 32 Kb, v niektorých verziách absentuje;

· Najmenej 128 bajtov rezidentnej dátovej pamäte RAM, ktorá sa používa na organizáciu, banky registrov, zásobník a ukladanie používateľských údajov;

· Najmenej 32 obojsmerných liniek rozhrania (portov), ​​individuálne nakonfigurovaných na vstup alebo výstup informácií;

· Dva 16-bitové multirežimové počítadlá / časovače používané na počítanie externých udalostí, organizovanie časových oneskorení a taktovanie komunikačného portu;

· Obojsmerný duplexný asynchrónny transceiver (UART), navrhnutý na organizovanie komunikačných kanálov medzi mikrokontrolérom a externými zariadeniami so širokým rozsahom rýchlostí prenosu dát. Existujú nástroje na hardvérovú a softvérovú integráciu mikrokontrolérov do pripojeného systému;

· Dvojúrovňový prioritný systém prerušení, ktorý podporuje najmenej 5 vektorov prerušení zo 4 interných a 2 externých zdrojov udalostí;

· Vstavaný generátor hodín.

Štrukturálna schéma

Bloková schéma regulátora je znázornená na obr. 1.1 a pozostáva z nasledujúcich hlavných funkčných jednotiek: riadiaca jednotka, aritmetický logický obvod, jednotka časovača/počítadla, sériové rozhranie a jednotka prerušenia, programové počítadlo, dátová pamäť a programová pamäť. Obojsmerná výmena sa vykonáva pomocou internej 8-bitovej dátovej diaľnice. Takmer všetci predstavitelia rodiny MCS-51 sú postavení podľa tejto schémy. Rôzne mikroobvody tejto rodiny sa líšia len v účelových registroch (vrátane počtu portov).

Časovacia a riadiaca jednotka- určené na generovanie synchronizačných a riadiacich signálov, ktoré zabezpečujú koordináciu spoločnej prevádzky jednotiek OEVM vo všetkých prípustných režimoch jej prevádzky. Riadiaca jednotka obsahuje:

zariadenie na vytváranie časových intervalov;

I/O logika;

register príkazov;

register kontroly spotreby elektriny;

dekodér príkazov, logika riadenia počítača.

Ryža. 1.1. Bloková schéma ovládača I8051.

Zariadenie na tvarovanie časových úsekov je určený na vytváranie a vydávanie interných synchronizačných signálov fáz, hodín a cyklov. Počet cyklov stroja určuje trvanie vykonávania inštrukcie. Takmer všetky príkazy OEVM sa vykonávajú v jednom alebo dvoch strojových cykloch, okrem príkazov násobenia a delenia, ktorých trvanie je štyri strojové cykly. Označme frekvenciu hlavného oscilátora F g. Trvanie cyklu stroja je 12 / F g alebo 12 periód signálu hlavného oscilátora. Vstupno-výstupná logika je navrhnutá tak, aby prijímala a vydávala signály, ktoré poskytujú výmenu informácií s externými zariadeniami cez vstupné/výstupné porty P0-P3.

Príkazový register je určený na záznam a uloženie 8-bitového operačného kódu vykonávaného príkazu. Operačný kód sa pomocou dekodéra príkazov a počítačovej riadiacej logiky prevedie na mikroprogram na vykonávanie príkazov.

Register kontroly spotreby (PCON) umožňuje zastaviť mikrokontrolér na zníženie spotreby energie a zníženie úrovne hluku z mikrokontroléra. Ďalšie zníženie spotreby energie a zníženie hluku je možné dosiahnuť zastavením hlavného oscilátora mikrokontroléra. Dá sa to dosiahnuť preklopením v registri riadenia spotreby PCON. Pre n-MOS (séria 1816 alebo cudzie mikroobvody bez "c" v strede) obsahuje register riadenia spotreby PCON iba jeden bit, ktorý riadi prenosovú rýchlosť sériového portu SMOD a neexistujú žiadne bity riadenia napájania.

Aritmetická logická jednotka (ALU) je paralelné osembitové zariadenie, ktoré vykonáva aritmetické a logické operácie. ALU pozostáva z:

akumulátorové registre, uchovávacie registre TMP1 a TMP2;

ROM konštánt;

sčítačka;

dodatočný register (register B);

batéria (ACC);

register stavu programu (PSW).

Registrovať akumulátorové a uchovávacie registre- osembitové registre určené na príjem a ukladanie operandov počas trvania operácií na nich. Tieto registre nie sú programovo prístupné.

ROM konštanty poskytuje generovanie korekčného kódu pre binárno-desiatkovú reprezentáciu dát, kód masky pre bitové operácie a konštantný kód.

Paralelná osembitová sčítačka je obvod kombinovaného typu so sekvenčným prenášaním, určený na vykonávanie aritmetických operácií sčítania, odčítania a logických operácií sčítania, násobenia, nerovnakého a identického.

Registrácia B- osembitový register používaný pri operáciách násobenia a delenia. Pre ďalšie inštrukcie sa naň možno pozerať ako na dodatočný superoperačný register.

Batéria- osembitový register určený na príjem a uloženie výsledku získaného pri vykonávaní aritmeticko-logických operácií alebo operácií posunu

Sériové rozhranie a jednotka prerušenia (PIP) je určený na organizáciu vstupu - výstupu sekvenčných tokov informácií a organizáciu systému prerušovania programov. Blok obsahuje:

PIP vyrovnávacia pamäť;

logika riadenia;

riadiaci register;

vyrovnávacia pamäť vysielača;

vyrovnávacia pamäť prijímača;

transceiver sériového portu;

register priorít prerušenia;

register povolenia prerušenia;

logika spracovania príznaku prerušenia a obvod generovania vektorov.

Počítadlo programov je navrhnutý tak, aby tvoril aktuálnu 16-bitovú adresu internej programovej pamäte a 8/16-bitovú adresu externej programovej pamäte. Počítadlo inštrukcií obsahuje 16-bitovú vyrovnávaciu pamäť PC, register PC a inkrementačný obvod (zvýšenie obsahu o 1).

Dátová pamäť (RAM) je určený na dočasné ukladanie informácií používaných v procese vykonávania programu.

Porty P0, P1, P2, P3 sú kvázi obojsmerné vstupno-výstupné porty a sú určené na zabezpečenie výmeny informácií medzi počítačom a externými zariadeniami, ktoré tvoria 32 vstupno-výstupných liniek.

Register stavu programu (PSW) určené na ukladanie informácií o stave ALU počas vykonávania programu.

Programová pamäť (EPROM) je určená na ukladanie programov a je to pamäť len na čítanie (ROM). Rôzne mikroobvody používajú masku, UV zmazateľné alebo FLASH ROM.

Register údajových ukazovateľov (DPTR) je určený na uloženie 16-bitovej adresy externej dátovej pamäte.

Ukazovateľ zásobníka (SP) je osembitový register určený na organizáciu špeciálnej oblasti dátovej pamäte (zásobníka), v ktorej môže byť dočasne uložená ľubovoľná pamäťová bunka.

1.3 Účel záverov mikrokontroléra 8051(obr. 1.2)

· U ss - potenciál spoločného vodiča ("zem");

· U cc - hlavné napájacie napätie +5 V;

· X1, X2 - vodiče na pripojenie kremenného rezonátora;

RST - vstup všeobecného resetu mikrokontroléra;

PSEN - povolenie externej programovej pamäte, vydané iba pri prístupe k externej ROM;

· ALE - stroboskop adresy externej pamäte;

· ЕА - deaktivácia internej programovej pamäte; úroveň 0 na tomto vstupe núti mikrokontrolér vykonávať program iba z externej ROM; ignorovanie interného (ak je k dispozícii);

Ryža. 1.2. Priradenie pinu 8051.

· P1 - osembitový kvázi obojsmerný vstupno/výstupný port, každý bit portu je možné naprogramovať na vstup aj výstup informácií, bez ohľadu na stav ostatných bitov;

· P2 - osembitový kvázi obojsmerný port, podobný portu P1, kolíky tohto portu sa používajú na vydávanie informácií o adrese pri prístupe k externej programovej alebo dátovej pamäti (ak ide o 16-bitové adresovanie). Okrem toho sa piny portu počas programovania používajú na zadávanie bitov adresy vyššieho rádu do mikrokontroléra;

РЗ - osembitový kvázi-obojsmerný port, podobný P1, kolíky tohto portu môžu vykonávať množstvo alternatívnych funkcií, ktoré sa používajú pri prevádzke časovačov, sériového vstupno-výstupného portu, ovládača prerušenia a externého programu a údajov Pamäť;

· P0 - multiplexovaný osembitový obojsmerný informačný vstupno-výstupný port, cez tento port v rôznych časoch vystupuje dolný bajt adresy a dáta.

Organizácia pamäte

Celá séria MCS-51 má architektúru Harvard, to znamená oddelené adresné priestory pre pamäť programu a dáta. Štruktúra pamäte je znázornená na obr. 1.3.

Množstvo internej (rezidentnej) programovej pamäte (ROM, EPROM alebo OTP ROM) umiestnenej na čipe v závislosti od typu mikroobvodu môže byť 0 (bez ROM), 4K (základný kryštál), 8K, 16K alebo 32K. V prípade potreby môže používateľ rozšíriť pamäť programu inštaláciou externej pamäte ROM. Prístup k internej alebo externej pamäti ROM je určený hodnotou signálu na kolíku EA (External Access):

EA = V cc (napájacie napätie) - prístup k internej ROM;

EA = V ss (potenciál zeme) - prístup k externej ROM.

Pre kryštály bez ROM (ROMless) musí byť pin EA trvalo pripojený k V ss.

Ryža. 1.3. Organizácia pamäte rodiny MCS-51

Externá čítačka ROM - (Program Store Enable) sa generuje pri prístupe do externej programovej pamäte a je neaktívna počas prístupu k ROM umiestnenej na čipe. Oblasť nižších adries programovej pamäte využíva systém prerušenia. Architektúra základného čipu 8051 poskytuje podporu pre päť zdrojov prerušení:

· Dve externé prerušenia;

· Dve prerušenia od časovačov;

· Prerušenia zo sériového portu.

Na obr. 1.4 ukazuje mapu spodnej oblasti programovej pamäte.

Ryža. 1.4. Dolná mapa pamäte programu

Programová pamäť (ROM)

V mikrokontroléroch rodiny 8051 sú programová pamäť a dátová pamäť navzájom nezávislé a nezávislé na zariadeniach, ktoré sú adresované rôznymi príkazmi a riadiacimi signálmi.

Zabudovaná programová pamäť umiestnená na čipe mikrokontroléra 8051 má veľkosť 4 KB (v rodine až 32). Pri prístupe k externej programovej pamäti používajú všetky mikrokontroléry rodiny 8051 vždy 16-bitovú adresu, ktorá im poskytuje prístup k 64 KB ROM. Mikrokontrolér pristupuje do pamäte programu pri čítaní operačného kódu a operandov (pomocou počítadla inštrukcií PC), ako aj pri vykonávaní pokynov na skopírovanie bajtu z pamäte programu na batériu. Pri kopírovaní dátových príkazov je možné adresovanie programovej pamäťovej bunky, z ktorej sa budú dáta čítať, vykonať pomocou PC počítadla aj špeciálneho dvojbajtového registra dátových ukazovateľov DPTR.

Dátová pamäť (RAM)

Veľkosť dátovej pamäte na čipe je 128 bajtov. Externá dátová pamäť môže mať až 64 KB. Prvých 32 bajtov je usporiadaných do štyroch bánk všeobecných registrov, označených príslušne banka 0 - banka 3. Každá z nich pozostáva z ôsmich registrov R0 – R7. V programe je kedykoľvek k dispozícii s adresovaním registrov len jedna banka registrov, ktorých počet je obsiahnutý v treťom a štvrtom bite stavového slova programu PSW.

8051 adries bitovej oblasti pamäte mikrokontroléra

Tabuľka 1.1

Bajtová adresa (hexadecimálne) Bitové adresy po bitoch
D7 D6 D5 D4 D3 D2 D1 D0
2F 7F 7E 7D 7C 7B 7A
2E
2D 6F 6E 6D 6C 6B 6A
2C
2B 5F 5E 5D 5C 5B 5A
2A
4F 4E 4D 4C 4B 4A
3F 3E 3D 3C 3B 3A
2F 2E 2D 2C 2B 2A
1F 1E 1D 1C 1B 1A
0F 0E 0D 0C 0B 0A
20h

Zostávajúci adresný priestor môže vývojár nakonfigurovať podľa vlastného uváženia: môže sa prispôsobiť oblasti zásobníka, systému a používateľských údajov. K bunkám dátovej pamäte je možné pristupovať dvoma spôsobmi. Prvým spôsobom je priame adresovanie pamäťovej bunky. V tomto prípade je adresa bunky operandom zodpovedajúcej inštrukcie. Druhým spôsobom je nepriame adresovanie pomocou registrov ukazovateľov R0 alebo R1: pred vykonaním príslušného príkazu je potrebné do jedného z nich zadať adresu bunky, ktorá sa má adresovať.

Na prístup k externej dátovej pamäti sa používa iba nepriame adresovanie pomocou registrov R0 a R1 alebo pomocou 16-bitového registra ukazovateľa DPTR.

Súčasťou dátovej pamäte je bitová oblasť, v ktorej je možné pomocou špeciálnych bitových inštrukcií adresovať každý bit pamäťových buniek. Adresa priamo adresovateľných bitov môže byť tiež zapísaná ako (ByteAddress) (Bit). Zhodu týchto dvoch spôsobov adresovania možno určiť z tabuľky. 1.1.

Príkazový systém OMEVM poskytuje skvelé možnosti spracovania dát, poskytuje implementáciu logických, aritmetických operácií, ako aj riadenie v reálnom čase. Implementované je bitové, tetradové (4 bitové), bajtové (8 bitové) a 16-bitové spracovanie dát. LSI rodina MCS-51 - 8-bit ОМЭВМ: ROM, RAM, špeciálne registre, ALU a externé zbernice majú organizáciu bajtov. Dvojbajtové údaje používa iba register ukazovateľov (DPTR) a počítadlo príkazov (PC). Je potrebné poznamenať, že register údajových ukazovateľov je možné použiť ako dvojbajtový register DPTR alebo ako dva jednobajtové špeciálne registre DPH a DPL. Počítadlo príkazov sa vždy používa ako dvojbajtový register. Sada príkazov OMEVM má 42 mnemotechnických označení príkazov na konkretizáciu 33 funkcií tohto systému. Syntax väčšiny príkazov v jazyku symbolických inštancií pozostáva z mnemotechnickej funkcie, za ktorou nasledujú operandy, ktoré označujú metódy adresovania a typy údajov. Rôzne dátové typy alebo režimy adresovania sú určené množinou operandov, nie zmenami v mnemotechnických označeniach. Príkazový systém možno podmienečne rozdeliť do piatich skupín:
  • Aritmetické príkazy;
  • Logické príkazy;
  • Príkazy na prenos údajov;
  • Príkazy bitového procesora;
  • Rozvetvenie a príkazy na prenos riadenia.
Existujú nasledujúce typy adresovania zdrojových operandov:
  • Registrovať adresovanie
  • Priame adresovanie
  • Adresovanie nepriameho registra
  • Priame adresovanie
  • Nepriame adresovanie registrov súčtom základných a indexových registrov
Aritmetické inštrukcie Sada inštrukcií obsahuje nasledujúce aritmetické operácie: sčítanie, sčítanie s príznakom prenosu, odčítanie a požičiavanie, zvyšovanie, znižovanie, porovnávanie, oprava desatinných miest, násobenie a delenie. V ALU sa operácie vykonávajú na celých číslach bez znamienka. Pri operáciách s dvoma operandami: sčítanie (ADD), sčítanie a prenos (ADDC) a odčítanie a vypožičanie (SUBB) je akumulátor prvým operandom a prijíma výsledok operácie. Druhým operandom môže byť pracovný register vybranej banky pracovných registrov, interný dátový pamäťový register s nepriamym registrom a priamym adresovaním alebo priamy dátový bajt. Tieto operácie ovplyvňujú príznaky: dokončenie, prenos, prechodný prenos a príznak parity v stavovom slove procesora (PSW). Použitie nosnej číslice umožňuje mnohokrát zlepšiť presnosť operácií sčítania (ADDC) a odčítania (SUBB). Sčítanie a odčítanie založené na znamienkach sa môže vykonávať pomocou programového ovládania príznaku pretečenia (OV) registra PSW. Príznak prechodného prenosu (AC) sa používa na vykonávanie aritmetických operácií v BCD. Operácie zvýšenia a zníženia neovplyvňujú príznaky. Operácie porovnávania neovplyvňujú ani cieľový, ani zdrojový operand, ale ovplyvňujú príznaky prenosu. Existujú tri aritmetické operácie, ktoré sa vykonávajú iba na batérii: dva príkazy na kontrolu obsahu batérie A (JZ, JNZ) a príkaz na opravu desatinných miest pri pridávaní binárno-desiatkových kódov. Počas operácie násobenia sa obsah akumulátora A vynásobí obsahom registra B a výsledok sa umiestni nasledovne: dolný bajt je v registri B, vysoký bajt je v registri A. Logické príkazy s bajtovými premennými Systém príkazov umožňuje realizovať logické operácie: "AND", "ALEBO", "EXCLUSIVE OR" na registri akumulátora (A) a zdrojovom byte. Druhý operand (zdrojový bajt) môže byť pracovný register vo vybranej banke pracovných registrov; interný register RAM adresovaný pomocou registra nepriameho adresovania; priamo adresovateľné bunky internej RAM a špeciálne registre; bezprostredná veľkosť. Tieto logické operácie môžu byť implementované na akomkoľvek priamom adresovateľnom registri internej RAM alebo špeciálnom registri s použitím obsahu akumulátora A alebo priamych dát ako druhého operandu. Existujú logické operácie, ktoré sa vykonávajú iba na batérii: resetujte a invertujte všetkých osem bitov A; cyklický posun doľava a doprava; cyklický posun doľava a doprava, berúc do úvahy vlajku prenosu; výmena miest starších a mladších tetrád (niblov) vo vnútri batérie. Príkazy na prenos dát Tabuľky symbolov (kódov) vložené do programovej pamäte ROM je možné vybrať pomocou príkazov na prenos dát pomocou nepriameho adresovania. Konštantný bajt je možné preniesť do akumulátora z programovej pamäťovej bunky adresovanej súčtom základného registra (PC alebo DPTR) a indexového registra (obsah A). To poskytuje napríklad pohodlný prostriedok na implementáciu algoritmu na konverziu ASCII kódu na sedemsegmentový kód. Ľubovoľnú bunku 256-bajtového bloku externej dátovej RAM je možné vybrať pomocou nepriameho adresovania registrov cez registre ukazovateľov R0 alebo R1 (vybraná banka pracovných registrov). Umiestnenie v rámci externého adresného priestoru RAM s veľkosťou 64 KB je možné zvoliť aj pomocou registra nepriameho adresovania cez register dátových ukazovateľov DPTR. Príkazy na prenos medzi priamo adresovateľnými registrami umožňujú zadať hodnotu z portu do vnútornej bunky RAM bez použitia pracovných registrov alebo batérie. V logickom procesore môže byť akýkoľvek dopredne adresovateľný bit umiestnený v prenosovom bite a naopak. Obsah akumulátora je možné vymieňať s obsahom pracovných registrov (vybranej banky) a s obsahom buniek vnútornej pamäte RAM adresovaným pomocou nepriameho adresovania registra, ako aj s obsahom priamo adresovateľných buniek. internej RAM a s obsahom účelových registrov. Menšia časť (bity 3-0) obsahu akumulátora sa môže vymieňať s vedľajšou časťou obsahu vnútorných buniek RAM, zvolenej pomocou registra-nepriameho adresovania. Pokyny pre bitový procesor Bitový procesor je súčasťou rodiny MCS51 architektúry MCU a možno ho považovať za nezávislý bitový procesor. Bitový procesor vykonáva súbor inštrukcií, má svoju vlastnú bitovo adresovateľnú RAM a svoje vlastné I/O. Inštrukcie, ktoré pracujú s bitmi, poskytujú priame adresovanie 128 bitov (0-127) v šestnástich bunkách vnútornej RAM (bunky s adresami 20H-2FH) a priame bitové adresovanie špeciálnych registrov, ktorých adresy sú násobky ôsmich. Každý z individuálne adresovateľných bitov možno nastaviť na „1“, vymazať na „0“, invertovať, skontrolovať. Prechody môžu byť implementované: ak je bit nastavený; ak bit nie je nastavený; vetva, ak je bit nastavený, s vymazaním tohto bitu; bit môže byť prepísaný do (z) bitu prenosu. Logické operácie „AND“, „ALEBO“ možno vykonávať medzi ľubovoľným priamo adresovateľným bitom a príznakom prenosu, pričom výsledok sa zadáva do bitu príznaku prenosu. Inštrukcie bitového spracovania zabezpečujú implementáciu komplexných funkcií kombinatorickej logiky a optimalizáciu užívateľských programov. Príkazy vetvenia a prenosu riadenia Adresný priestor pamäte programu nemá organizáciu stránkovania, čo vám umožňuje voľne presúvať fragmenty programu v rámci adresného priestoru bez opätovného načítania (zmeny) čísla stránky. Presúvanie jednotlivých fragmentov programu poskytuje možnosť používať premiestniteľné programové moduly rôznymi programami. Inštrukcie 16-bitovej vetvy a volania podprogramu vám umožňujú preskočiť na ľubovoľný bod v adresnom priestore 64 KB programovej pamäte. 11-bitové skoky a inštrukcie volania podprogramu poskytujú skoky v rámci 2 KB programovej jednotky. V príkazovom systéme sú príkazy pre podmienené a nepodmienené skoky vzhľadom na počiatočnú adresu nasledujúceho programu v rozsahu od (РС) -128 do (ЗС) +127. Príkazy na kontrolu jednotlivých bitov umožňujú podmienené prechody na stav "0" alebo "1" priamo adresovaných bitov. Pokyny na kontrolu obsahu akumulátora (na nulu / nie na nulu) umožňujú podmienené skoky na obsah A. pre prístup k ôsmim pracovným registrom vybranej banky pracovných registrov (rovnaké registre je možné vybrať pomocou priameho adresovania a adresovanie nepriameho registra ako normálne bunky v internej dátovej RAM). Adresovanie registrov sa používa na prístup k registrom A, B, AB (duálny register), DPTR a príznaku prenosu C. Použitie adresovania registra vám umožňuje získať dvojbajtový ekvivalent inštrukcií s priamymi adresami s tromi bajtmi. Priame adresovanie Priame bajtové adresovanie sa používa na prístup k miestam vnútornej dátovej pamäte (RAM) (0-127) a špeciálnym registrom. Dopredné bitové adresovanie sa používa na odkazovanie na samostatne adresovateľných 128 bitov umiestnených v adresných miestach 20H-2FH a na samostatne adresovateľné bity špeciálnych registrov. Najvýznamnejší bit bajtu kódu priamej adresy vyberá jednu z dvoch skupín samostatne adresovateľných bitov umiestnených v RAM alebo v špeciálnych registroch. Priamo adresovateľné bity s adresami 0-127 (00H-7FH) sú umiestnené v bloku 16 vnútorných buniek RAM s adresami 20H-2FH. Uvedené bunky sú postupne očíslované od najmenej významného bitu najmenej významného bajtu po najvýznamnejší bit najvýznamnejšieho bajtu. Samostatne adresovateľné bity v špeciálnych registroch sú očíslované nasledovne: päť najvýznamnejších bitov adresy sa zhoduje s piatimi najvýznamnejšími bitmi samotného registra a tri najmenej významné bity určujú umiestnenie jednotlivých ibt v rámci registra. Adresovanie nepriameho registra Adresovanie nepriameho registra sa používa na označenie buniek vnútornej dátovej RAM. Ako registre ukazovateľov sa používajú registre R10, R1 vybranej banky registrov. Príkazy PUSH a POP používajú obsah ukazovateľa zásobníka (SP). Nepriame adresovanie registrov sa používa aj na prístup k externej dátovej pamäti. V tomto prípade sa pomocou registrov ukazovateľov R0 a R1 (vybraná banka pracovných registrov) vyberie bunka z bloku 256 bajtov externej dátovej pamäte. Číslo bloku je prednastavené obsahom portu P2. 16-bitový dátový ukazovateľ (DPTR) možno použiť na prístup k akémukoľvek umiestneniu v adresnom priestore v externej dátovej pamäti až do 64 KB. Priame adresovanie Priame adresovanie vám umožňuje vybrať konštanty z adresného priestoru pamäte programu, ktoré sú explicitne špecifikované v príkaze. Nepriame adresovanie registra súčtom bázového a indexového registra Nepriame adresovanie registra súčtom: bázový register plus indexový register (obsah akumulátora A) uľahčuje prezeranie tabuliek pevne zapojených do programovej pamäte. Akýkoľvek bajt z tabuľky je možné vybrať na adrese určenej súčtom obsahu DPTR alebo PC a obsahu A. Tabuľka symbolov a symbolov používaných v príkazovom systéme
Označenie, symbol Vymenovanie
A Batéria
Rn Registre aktuálne vybranej banky registrov
r Číslo načítaného registra zadané v príkaze
priamy Priamo adresovateľná 8-bitová interná adresa dátovej bunky, ktorou môže byť interná dátová RAM bunka (0-127) alebo SFR (128-255)
@Rr Nepriamo adresovateľná 8-bitová bunka internej dátovej RAM
údaje8 8-bitové priame údaje smerujúce do CPC
dataH Najdôležitejšie bity (15-8) priamych 16-bitových údajov
dataL Najmenej významné bity (7-0) priamych 16-bitových údajov
addr11 11-bitová cieľová adresa
addrL Najmenej významné bity cieľovej adresy
disp8 8-bitový bajtový offset so znamienkom m
trocha Priamo adresovateľný bit, ktorého adresa obsahuje CPC umiestnenú v internej dátovej RAM alebo SFR
a15, a14 ... a0 Bity cieľovej adresy
(NS) Obsah prvku X
((NS)) Obsah na adrese uloženej v prvku X
(X) [M] Výboj M prvku X
+ - * / AND ALEBO XOR / X Operácie: sčítanie odčítanie násobenie delenie logické násobenie (operácia AND) logické sčítanie (operácia OR) modulo 2 sčítanie (exkluzívne OR) inverzia prvku X

Funkčné mnemotechnické pomôcky sú jednoznačne spojené so špecifickými kombináciami metód adresovania a dátových typov. Celkovo je v systéme príkazov možných 111 takýchto kombinácií. Tabuľka poskytuje zoznam príkazov zoradených abecedne.

Mnemotechnické pomôcky Funkcia Vlajky
Príkaz ACALL Volanie absolútneho podprogramu
PRIDAŤ tím A,<байт-источник> Doplnenie AC, C, OV
ADDC tím A,<байт-источник> Noste skladanie AC, C, OV
Tím AJMP Absolútny prechod
Tím ANL<байт-назначения>, <байт-источникa> logické "A"
tím ANL C,<байт-источникa> Logické "AND" pre variabilné bity
Tím CJNE<байт-назначения>, <байт-источник>, <смещение> Porovnajte a skočte, ak nie sú rovnaké C
Príkaz CLR A Reset batérie
Príkaz CLR Trochu sa čistí C, bit
CPL tím A Inverzia ak umul ora
Tím CPL Bitová inverzia C, bit
Tím DA A Akumulátorová desatinná korekcia pre vkladanie AC, C
Tím DEC<байт> Dekrementovať
Tím DIV AB divízie C, OV
Tím DJNZ<байт>, <смещение> Zníženie a prechod, ak nie nula
Tím INC<байт> Prírastok
Tím INC DPTR Prírastok ukazovateľa údajov
Tím JB , Skok, ak je nastavený bit
Tím JBC , Ak je bit nastavený, skočte a odstráňte ho
Tím JC Skočte, ak je nastavené prenášanie
JMP @ A + príkaz DPTR Nepriamy prechod
Tím JNB , Skok, ak bit nie je nastavený
Tím JNC Ak nie je nastavené prenášanie, skočte
Tím JNZ Skočiť, ak je obsah batérie nenulový
Tím JZ Skok, ak je obsah akumulátora 0
Príkaz LCALL Dlhý hovor
Tím LJMP Dlhý prechod
príkaz MOV<байт-назначения>, <байт-источника> Odoslať premenný bajt
príkaz MOV<бит-назначения>, <бит-источника> Odoslať dátový bit C
Príkaz MOV DPTR, # data16 Ukazovateľ načítania údajov so 16-bitovou konštantou
Príkaz MOVC A, @ A + ( ) Odoslať bajt z pamäte programu
príkaz MOVX<байт приемника>, <байт источника> Odosielanie údajov do externej pamäte (z externej pamäte)
Tím MUL AB Násobenie C, OV
príkaz NOP Žiadna operácia PC
Tím ORL<байт-назначения>, <байт-источникa> Logické "ALEBO" pre variabilné bajty
tím ORL C,<бит источникa> Logické "ALEBO" pre variabilné bity C
POP príkaz Čítanie zo zásobníka
príkaz PUSH Stohovanie
príkaz RET Návrat z podprogramu
tím RETI Návrat z prerušenia
RL A tím Posuňte obsah batérie doľava
RLC A tím Posuňte obsah batérie doľava pomocou vlajky na prenášanie
Tím RR A Posuňte obsah batérie doprava
Tím RRC A Posuňte obsah batérie doprava pomocou vlajky na prenášanie C
príkaz SETB Nastaviť bit C
Tím SJMP<метка> Krátky skok
tím SUBB A,<байт источника> Odpočet s pôžičkou AC, C, OV
Príkaz SWAP Výmena notebookov vo vnútri batérie
Tím XCH A,<байт> Výmena obsahu variabilného bajtového akumulátora
XCHD tím A, @ R1 Výmena notebooku
Príkaz XRL<байт-назначения>, <байт-источникa> Logické EXKLUZÍVNE ALEBO pre variabilné bajty

Mikrokontroléry rodiny MCS-51 sú postavené podľa Harvardskej architektúry, v ktorej sú pamäť programu a dátová pamäť rozdelené, majú svoje vlastné adresné priestory a spôsoby prístupu k nim.

Programová pamäť


Maximálne množstvo pamäte je 64K bajtov, z toho 4K, 8K, 16K alebo 32K bajtov pamäte (tabuľka 7.3.1) sa nachádza na čipe, zvyšok je mimo matrice.
S napätím na svorke EA = V CC používa sa interná aj externá pamäť, pričom EA = V CC = 0 - iba externá pamäť.
Tabuľka 7.3.1 ukazuje adresy programovej pamäte pre indikované prípady.
Spodná oblasť programovej pamäte je vyhradená na spustenie mikrokontroléra (štartovacia adresa 0000h po resete) a na spracovanie prerušení (adresy prerušení sa nachádzajú s intervalom 8 bajtov: 0003h, 000Bh, 0013h atď.).


Pamäť programu je len na čítanie a pri prístupe:

● do externá pamäť programov sa generuje signál ¯PSEN a vždy sa vytvorí 16-bitová adresa.
Nízky bajt adresy sa prenáša cez port P0 v prvej polovici strojového cyklu a je fixovaný na okraji ALE stroboskopu v registri.
V druhej polovici cyklu sa port P0 používa na zadanie bajtu dát z externej pamäte do MC.
Byte vyššieho rádu adresy sa prenáša cez port P2 počas celého času prístupu do pamäte (obr. 7.1.11);

● do vnútorná pamäťčítaný signál sa negeneruje a na internej zbernici mikrokontroléra sa využívajú výmenné cykly.

Dátová pamäť

Vnútorná pamäťúdaje možno podmienečne rozdeliť do troch blokov (tabuľka 7.3.2).

Vnútorná pamäť je vždy adresovaná bajtom, ktorý adresuje len 256 pamäťových miest.
Preto, ako je možné vidieť z tabuľky 7.3.2, na adresovanie horných 8-bitových buniek internej RAM a registrov špeciálnych funkcií SFR, zaberajúcich rovnaký adresný priestor, používajú príkazy rôzne spôsoby adresovania: nepriame a priame.

Vlastnosti organizácie spodnej oblasti vnútornej pamäte RAM sú uvedené v tabuľke 7.3.3.

Nízkych 32 bajtov vnútornej pamäte RAM s adresami 00h.
1Fh sú zoskupené do štyroch bánk po ôsmich registroch (R0.R7).
Ďalších 16 bajtov RAM s 20h adresami.
2Fh predstavuje oblasť pamäte 8 × 16 = 128 bitov, čo umožňuje prístup ku každému jednotlivému bitu.
Pre výber adresy bankového registra sa používa jeho názov R0.
R7, na výber banky - bity RS0, RS1 registra stavových slov PSW.

Bitové adresy

Bitové adresy sú uvedené v tabuľke 7.3.3.

Prebieha adresovanie priamy spôsobom.

Zoznam všetkých registrov špeciálnych funkcií SFR s ich adresami je uvedený v tabuľke 7.2.2.
Pre prehľadnosť v tabuľke 7.3.

4 predstavenia registrovať mapu adresySFR z uvažovaných mikroobvodov rodiny MCS-51.
Adresa SFR je určená kombináciou čísel stĺpcov a riadkov v hexadecimálnom formáte.

Napríklad register CMOD má adresu D9h.

Pre registre SFR, ktorých adresy končia na 0h alebo 8h (sú tučne), okrem byte povolený bitovo adresovanie.

V tomto prípade je adresa bitu, ktorý zaberá N-tý bit v registri, definovaná ako XXh + ​​0Nh, kde XXh je adresa registra SFR, N = 0,7.
Bitové adresy v tejto oblasti sa pohybujú od 80H do FFH.
Napríklad bitové adresy ACC akumulátora ležia v rozsahu E0h-E7h.

Externá pamäť dáta (do 64 KB) sú vytvárané prídavnými pamäťovými čipmi, ktoré sú pripojené k MC.
Na prácu s externou dátovou pamäťou sa používajú špeciálne príkazy, aby sa adresné priestory externej a internej pamäte neprekrývali, a preto je možné používať oba typy dátovej pamäte súčasne.

Na prístup k bunkám externej dátovej pamäte sa používajú (obrázok 7.1.8):
● príkazy s nepriamym adresovaním;
● signály na čítanie ¯RD a zápis ¯WR;
● port P0 na prenos najmenej významného bajtu adresy a príjem/prenos dátového bajtu;
● Port P2 na prenos bajtu vyššieho rádu adresy.
Metódy adresovania.
Príkazový systém používa:
● priame, nepriame, registračné, nepriame-registrové, priame a indexové adresovanie (nepriame adresovanie súčtom základných a indexových registrov) zdrojové operandy;
● priame, registračné a nepriame-registračné adresovanie cieľové operandy.
Kombinácia týchto metód (adresovanie) poskytuje 21 režimov adresovania.
Tento príkazový systém a tabuľky nižšie používajú nasledujúci zápis:

Priame adresovanie.

Pri tomto spôsobe adresovania je umiestnenie bajtu alebo dátového bitu určené 8-bitovou adresou druhého (a tretieho) príkazového bajtu.
Priame adresovanie sa používa iba na prístup k internej dátovej pamäti (dolných 128 bajtov RAM) a špeciálnym funkčným registrom.

Registrovať adresovanie.


Tento spôsob adresovania poskytuje prístup k údajom uloženým v jednom z ôsmich registrov R0.
R7 súčasnej banky pracovných registrov.
Môže sa použiť aj na prístup k registrom A, B, AB (duálny register), registru ukazovateľov DPTR a prenášaniu vlajky C.
Adresa týchto registrov je vložená do operačného kódu, čím sa znižuje počet príkazových bajtov.

Adresovanie nepriameho registra.


V tomto prípade je adresa údajov uložená v registri ukazovateľov, ktorého umiestnenie je určené operačným kódom.
Táto metóda adresovania sa používa na prístup k externej pamäti RAM a hornej polovici internej pamäte RAM.
Ukazovateľmi registrov 8-bitových adries môžu byť registre R0, R1 vybranej banky pracovných registrov alebo ukazovateľ zásobníka SP, pre 16-bitové adresovanie sa používa len register ukazovateľa údajov DPTR.

Priame adresovanie.


Pri tomto spôsobe adresovania sú údaje priamo indikované v príkaze a nachádzajú sa v druhom (alebo v druhom a treťom) byte príkazu, t.j.
nie je potrebné adresovanie pamäte.
Napríklad príkazom MOV A, # 50 sa do akumulátora A načíta číslo 50.

Indexované adresovanie.


Pri tejto metóde ide o nepriame adresovanie registra, pri ktorom je adresa dátového bytu určená ako súčet obsahu základného (DPTR alebo PC) a indexového (A) registra.
spôsob používa sa len na prístup do pamäte programu a iba v režime čítania; uľahčuje prezeranie tabuliek pevne zapojených do pamäte programu.

Štruktúra príkazov.

Dĺžka príkazu je jeden (49 príkazov), dva (45 príkazov) alebo tri (17 príkazov) bajty.
Prvý bajt príkazu vždy obsahuje operačný kód (OP), zatiaľ čo druhý a tretí bajt sú adresy operandov alebo okamžitých dátových hodnôt.

Ako operandy možno použiť jednotlivé bity, tetrády, bajty a dvojbajtové slová.
Existuje 13 typov príkazov, ktoré sú uvedené v tabuľke 7.3.5:

● A, PC, SP, DPTR, Rn (n = 0, 7) - akumulátor, počítadlo inštrukcií, ukazovateľ zásobníka, register ukazovateľov údajov a aktuálny bankový register;
● Rm (m = 0, 1) - register aktuálnej banky používaný na nepriame adresovanie;
● direct - 8-bitová adresa priamo adresovaného operandu;
● bit - adresa priamo adresovaného bitu;
● rel - relatívna adresa prechodu;
● addr11, addr16 - 11- a 16-bitová absolútna prechodová adresa;
● # data8, # data16 - priame dáta (operandy) 8- a 16-bitovej dĺžky;
● A10, A9, A0 - jednotlivé bity 11-bitovej adresy;
● (.) - obsah pamäťovej bunky na adrese uvedenej v zátvorkách;
● SB, MB - vysoké a nízke bajty 16-bitového operandu.

Všeobecné informácie o systéme príkazov.

Príkazový systém poskytuje veľké možnosti spracovania dát vo forme bitov, zápisníkov, bajtov, dvojbajtových slov, ako aj riadenie v reálnom čase.
Na popis príkazov sa používa jazyk makra ASM51. Syntax väčšiny príkazov pozostáva z mnemotechnickej skratky (skratky) operácie, ktorá sa má vykonať, za ktorou nasledujú operandy.
Operandy sa používajú na označenie rôznych spôsobov adresovania a typov údajov.

Najmä skratka MOV má 18 rôznych inštrukcií určených na spracovanie troch typov údajov (bitov, bajtov, adries) v rôznych adresných priestoroch.
Sada príkazov má 42 mnemotechnických označení 111 typov príkazov na konkretizáciu 33 funkcií MK.

Zo 111 inštrukcií je 64 vykonaných v jednom strojovom cykle, 45 v dvoch cykloch a len dve inštrukcie (MUL - násobenie a DIV - delenie) sa vykonávajú v 4 cykloch. Pri frekvencii generátora hodín 12 MHz je trvanie strojového cyklu (12 hodinových cyklov) 1 μs. Autor: funkčná vlastnosť tímy možno rozdeliť do piatich skupín. Nižšie je uvedený popis príkazov každej skupiny vo forme tabuliek. Pre kompaktnosť tabuliek vyčleníme skupinu príkazov (tabuľka 7.3.6), ktorých vykonanie vplyvy(označené +) o stave vlajok register stavových slov PSW.

Príkazy na prenos údajov

Prenosové príkazy možno rozdeliť do samostatných podskupín.
Príkazy na prenos a výmenu údajov medzi bunkami vnútornej pamäte(Tabuľka 7.3.7).

Príkazy 1-16, ktoré majú mnemotechnický znak MOV dest, src, sú určené pre preposielanie bajt alebo dva bajty (príkaz 16) údajov zo zdroja src do cieľa, pričom:
● na označenie zdroj(src) používajú sa štyri spôsoby adresovania: register (príkazy 2-4, 6, 8), priamy (príkazy 1, 7, 9, 11), nepriamy (príkazy 5, 10) a priamy (príkazy 12-16);
● na označenie prijímač(cieľ) používajú sa tri spôsoby: register (príkazy 1, 3 ... 5, 9, 12, 14, 16), priamy (príkazy 2, 7, 8, 10, 13), nepriamy (príkazy 6, 11, 15).

Poskytujú tímy 17-20 výmena informácie medzi dvoma bunkami internej dátovej pamäte (alebo obojsmerný prenos).
Keď sa príkazy XCH vykonajú, bajty sa vymenia, A príkazu XCHD sa vymení s nižšími tetradami bajtových operandov.

Jednou z buniek je vždy akumulátor A. Ako ďalšia bunka sa pri výmene bajtov používa jeden z Rn registrov aktuálnej banky, A je tiež priamo alebo nepriamo adresovateľná bunka vnútornej pamäte; pri výmene tetrád - len nepriamo adresovateľná bunka vnútornej pamäte.

Keďže vo všetkých MCU je zásobník umiestnený vo vnútornej RAM, táto podskupina zahŕňa príkazy(20, 21) zásobníkový prístup PUSH src, POP dest.
Tieto príkazy používajú iba metódu priameho adresovania, zápis bajtu do zásobníka alebo jeho obnovenie zo zásobníka.
Treba mať na pamäti, že v tých MCU, ktoré nemajú horných 128 bajtov v RAM, zvýšenie zásobníka nad 128 bajtov vedie k strate údajov.

Príkazy na prenos údajov medzi internou a externou pamäťou údajov(Tabuľka 7.3.8).

Tieto príkazy používajú iba nepriame adresovanie, pričom jednobajtová adresa môže byť umiestnená v P0 alebo R1 aktuálnej banky registrov a dvojbajtová adresa môže byť umiestnená v registri ukazovateľa údajov DPRT.
Pri akomkoľvek prístupe k externej pamäti hrá batéria A úlohu prijímača alebo zdroja operandov vo vnútornej pamäti.

Pokyny na prenos údajov z pamäte programu(Tabuľka 7.3.9).

Tieto príkazy slúžia na čítanie tabuliek z pamäte programu.

Inštrukcia MOVC A, @ A + DPTR sa používa na odkazovanie na tabuľku s počtom vstupov od 0 do 255.

Číslo požadovaného záznamu tabuľky sa nahrá do akumulátora a register DPTR sa nastaví na počiatočný bod tabuľky. Charakteristickým znakom druhého príkazu je, že počítač programu PC sa používa ako základný ukazovateľ a k tabuľke sa pristupuje z podprogramu. Najprv sa do akumulátora nahrá číslo požadovaného vstupného bodu, následne sa vyvolá podprogram príkazom MOVC A, @ A + PC. Tabuľka môže mať 255 vstupov s číslami od 1 do 255, keďže 0 sa používa ako adresa príkazu RET výstupu podprogramu.

Príkazy na spracovanie aritmetických údajov. Všetky aritmetické príkazy sa vykonávajú na celých číslach bez znamienka. Operácie na dvoch operandoch(Tabuľka 7.3.10). V operáciách prílohy PRIDAŤ, pridanie prenosu ADDC a odpočet úveru SUBB:

● zdrojom jedného 8-bitového operandu a príjemcom výsledku je akumulátor;
● zdrojom ďalšieho operandu je buď jeden z pracovných registrov Rn (n = 0-7) aktuálnej banky, alebo priamo priamy alebo nepriamo @Rm (m = 0, 1) adresovateľné pamäťové miesto RAM alebo priame dáta #data.

Operácie násobenie MUL a divízie DIV sa vykonávajú nad obsahom registrov A a B. Pri násobení sa horných 8 bitov výsledku zapíše do registra B, spodných 8 bitov - do registra A.
Ak je súčin väčší ako 255, nastaví sa príznak pretečenia OV; Vlajka prenášania C je vždy vymazaná. Inštrukcia DIV rozdeľuje 8-bitový operand akumulátora A 8-bitovým operandom registra B.
Pri delení sa podiel (najvýznamnejšie bity) zapíše do registra v A, zvyšok (najmenej významné bity) - v B. Príznaky prenosu C a pretečenia OV sa vymažú.
Pokus o delenie 0 nastaví príznak pretečenia OV. Operácia delenia sa častejšie používa pri zmenách a konverziách základne.

Keď je binárne číslo delené 2 N, posunie sa o N bitov doľava.
Extra bity sa prenesú do registra B.

Operácie na jednobajtových operandoch(Tabuľka 7.3.11).

Príkaz DA sa používa na vykonávanie operácií BCD. Príkazy INC, DEC umožňujú príslušné zvýšenie alebo zníženie obsahu pamäťovej bunky o jednu.
Vzťahujú sa na obsah akumulátora A, jeden z pracovných registrov Rn alebo priamo aj nepriamo adresovanú pamäťovú bunku.
Operácia prírastku platí aj pre obsah 16-bitového registra ukazovateľa DPTR.

Booleovské príkazy.

Dvojité operácie

(Tabuľka 7.3.12).

Príkazy AML, ORL, XRL umožňujú vykonávať tri dvojmiestne logické operácie na 8-bitových operandoch: ANL - logické násobenie (AND), ORL - logické sčítanie (OR), XRL - exkluzívne OR (XOR).
Operácie sa vykonávajú na jednotlivých bitoch operandov. Zdrojom jedného z operandov a zároveň príjemcom výsledku je buď akumulátor (A), alebo priamo adresovateľná pamäťová bunka (direct).
Pre zdroj iného operandu sa používa metóda registra, priameho, nepriameho alebo priameho adresovania.

Jednotlivé operácie

(Tabuľka 7.3.13).
Skupina tiež zahŕňa množstvo jednotlivých operácií s obsahom akumulátora A: vymazanie (CLR), logický doplnok alebo inverzia (CPL), cyklické a rozšírené cyklické posuny o 1 bit doprava (RL, RLC) a doľava (RR, RRC), výmenné tetrády alebo cyklický posun bajtu o 4 bity (SWAP), A je tiež prázdna operácia (NOP), v dôsledku čoho zostáva stav všetkých registrov MC (okrem programového počítadla) nezmenený.

Ovládanie príkazov na prenos

Bezpodmienečné skokové príkazy

(Tabuľka 7.3.14).

Príkazy 1-3 sa líšia iba formátom cieľovej adresy.

Príkaz LJMP (L - Long) vykoná "dlhý" bezpodmienečný skok na zadanú adresu addr16, pričom načíta počítač PC s druhým a tretím príkazovým bajtom.
Príkaz poskytuje skok na ľubovoľný bod v 64K bajtovom adresnom priestore.

Príkaz AJMP (A - Absolute) poskytuje "absolútny" skok na adresu v rámci 2K bajtovej stránky, ktorej počiatočná adresa je nastavená piatimi najvýznamnejšími bitmi počítadla PC programu (najskôr sa zväčší obsah PC od 2).

Príkaz SJMP (S - Short) umožňuje „krátky“ bezpodmienečný skok na adresu, ktorá sa vypočíta pripočítaním offsetu rel so znamienkom v druhom byte príkazu s obsahom počítadla PC, predtým zvýšeného o 2.

Adresa skoku je v rozmedzí -128 + 127 bajtov vzhľadom na adresu príkazu.
Na skok na akýkoľvek iný bod v 64-kilobajtovom adresnom priestore možno použiť aj príkaz 4 s nepriamou @ A + DPTR adresou.
V tomto prípade sa obsah A interpretuje ako celé číslo bez znamienka.

Nulová operácia (NOP), v dôsledku ktorej zostáva stav všetkých registrov mikroprocesora (okrem programového počítadla) nezmenený.

Príkazy podmienenej vetvy

(Tabuľka 7.3.15).

Pomocou príkazov JZ a JNZ sa vykoná skok, ak sa obsah akumulátora rovná alebo nerovná nule.
Adresa skoku sa vypočíta pridaním relatívneho posunu znamienka rel k obsahu počítadla príkazov PC po pridaní 2 (dĺžka príkazu v bajtoch).

Obsah batérie zostáva nezmenený.
Príkazy neovplyvňujú príznaky.

Príkazy CJNE (3-6) sa používajú na implementáciu podmieneného skoku na základe výsledku porovnania dvoch 8-bitových operandov, ktorých umiestnenie je uvedené v príkazoch.
Ak sa ich hodnoty nerovnajú, vytvorí sa vetva.

Adresa skoku sa vypočíta tak, že sa pripočíta offset rel k obsahu počítadla PC, predtým zvýšeného o 3.
V opačnom prípade sa vykoná ďalší príkaz.

Stĺpec Algoritmus zobrazuje vplyv hodnôt porovnávaných 8-bitových operandov na príznak prenosu C.
Príkazy DJNZ (7) sú určené na organizovanie programových slučiek.

Register Rn alebo priama (priama) adresa je počítadlo opakovaní slučky, offset rel (v druhom a treťom príkazovom byte) je relatívna adresa skoku na začiatok slučky.
Keď sa príkazy vykonajú, obsah počítadla sa zníži o jednotku a skontroluje sa, či neobsahuje nulu.
Ak sa obsah počítadla nerovná nule, vykoná sa prechod na začiatok cyklu.
V opačnom prípade sa vykoná nasledujúci príkaz.

Adresa skoku sa vypočíta pridaním posunu k obsahu počítadla, ktorý sa predtým zvýšil o dĺžku príkazu (o 2 alebo 3).
Príznaky príkazov nie sú ovplyvnené.

Príkazy na volanie podprogramov a návrat z programov

(Tabuľka 7.3.16).
Príkazy LCALL "long call" a ACALL "absolútne volanie" bezpodmienečne volajú podprogram umiestnený na zadanej adrese.

Rozdiel medzi týmito pokynmi a pokynmi bezpodmienečného skoku diskutovanými vyššie je v tom, že ukladajú návratovú adresu (obsah počítadla) do hlavného programu v zásobníku.
Príkaz return z podprogramu RET obnovuje hodnotu obsahu programového počítadla zo zásobníka a príkaz RETI umožňuje aj prerušenia servisnej úrovne.

Relatívne adresovanie je široko používané v príkazoch riadiaceho prenosu, ktoré podporuje premiestniteľné programové moduly.
8-bitový offset rel so znamienkom funguje ako relatívna adresa, ktorá zabezpečuje vetvenie z aktuálnej polohy PC počítadla v oboch smeroch o ± 127 bajtov.

Na skok na ktorýkoľvek iný bod v 64K-bajtovom adresnom priestore je možné použiť buď priamu adresu addr16, alebo nepriamu adresu @A + DPTR.
V druhom prípade sa obsah A interpretuje ako celé číslo bez znamienka.

Pre kompatibilitu s architektúrou MK48 bol predstavený variant krátkeho priameho adresovania addr11 v rámci 2K-bajtovej aktuálnej stránky.

Všetky tieto typy adresovania možno použiť iba na operáciu vetvenia a pre operáciu volania sú povolené iba priame metódy adresovania addr16 a interné adresy addr11.
Vo všetkých podmienených operáciách je možné použiť iba relatívne adresovanie.

Keď MK51 rozpozná požiadavku na prerušenie, vygeneruje jednu z inštrukcií LCALL addr16, ktorá automaticky zabezpečí uloženie návratovej adresy do zásobníka.
Na rozdiel od MK48 však MK51 nemá automaticky uložené informácie o stave.

V tomto prípade logika prerušenia prestane reagovať na požiadavky úrovne, ktorá bola prijatá na službu.
Na zníženie úrovne prerušenia sa používa príkaz na návrat z prerušenia RETI, ktorý okrem operácie ekvivalentnej RET zahŕňa operáciu povolenia prerušenia tejto úrovne.
Medzi štandardné podmienené operácie MK51 patria aj operácie JZ, JNZ.
Je tu však nová operácia „Porovnaj a choď“ CJNE.

Pre tento príkaz sa najprv porovná operand podľa pravidiel odčítania celých čísel s konštantou a v súlade s výsledkom porovnania sa nastaví príznak CY, potom sa v prípade nesúladu s konštantou vykoná vetvenie. vykonané. Porovnaním akumulátora, registra alebo pamäťovej bunky s postupnosťou konštánt získame pohodlný spôsob kontroly náhodností, napríklad za účelom identifikácie špeciálnych prípadov.

V skutočnosti je príkaz CJNE členom operátora jazyka na vysokej úrovni typu CASE.

Tím DJNZ sa ďalej rozvíjal.
Teraz môže programátor ako počítadlo využívať nielen jeden z pracovných registrov Rn, ale aj ľubovoľnú pamäťovú bunku DSEG.

Príkazy pre bitové operácie.

Skupinu tvorí 12 príkazov, ktoré umožňujú vykonávať operácie na jednom alebo dvoch bitoch (reset, set, bitová inverzia, A tiež logické AND a OR), a 5 príkazov určených na implementáciu podmienených skokov (tabuľka 7.3.17).

Inštrukcie poskytujú priame adresovanie 128 bitov umiestnených v šiestich až jedenástich bunkách internej RAM s adresami 20h.
2Fh (tabuľka 7.3.3) a 128 bitov umiestnených v špeciálnych registroch, ktorých adresy sú násobky ôsmich (v tabuľke 7.3.4 sú zvýraznené tučným písmom).

Pri vykonávaní operácií na dvoch jednobitových operandoch sa ako logický akumulátor používa klopný obvod registra PSW, v ktorom je uložený prenosový príznak C (tabuľka 7.1.2).

Vykonajú sa inštrukcie MOV (1,2). náklad bit z jednej priamo adresovateľnej bitovej bunky internej RAM do klopného obvodu C alebo naopak.
Príkazy CRL (3, 4), SETB (5, 6). skládka na nulu resp založiť v jednom prenosovom príznaku C alebo špecifikovanom bite.
Pomocou príkazov CPL, ANL, ORL (7-12) sa vykonávajú logické operácie inverzie, sčítania a násobenia.

Skupina tiež obsahuje príkazy (13-17) na implementáciu operácií podmieneného vetvenia s relatívnym 8-bitovým posunom rel.
Prechody môžu byť implementované ako keď je nastavený bit alebo príznak prenosu (príkazy 13, 16), tak aj keď je vymazaný (príkazy 14, 17).

Príkaz JBC okrem presunu na vypočítanú adresu, keď je splnená podmienka (bit) = 1, vynuluje tento bit.
Pri vykonávaní podmienených príkazov vetvy sa adresa vetvy vypočíta po pridaní čísel 3 alebo 2 k počítadlu (odráža počet bajtov v príkaze).

Intel je predchodcom architektúry rodiny MCS-51, ktorá dostala svoje meno od prvého zástupcu tejto rodiny - mikrokontroléra 8051, ktorý bol vydaný v roku 1980 na základe technológie n-MOS. Úspešná zostava periférnych zariadení, flexibilný výber externej alebo internej programovej pamäte a primeraná cena zabezpečili tomuto mikrokontroléru úspech na trhu. Z hľadiska technológie bol mikrokontrolér 8051 na svoju dobu veľmi zložitým produktom - v kryštáli bolo použitých 128 tisíc tranzistorov, čo bolo 4-krát viac ako počet tranzistorov v 16-bitovom mikroprocesore 8086. Tento mikrokontrolér zostáva jadro rodiny MCS-51 dodnes.

Hlavné prvky základnej architektúry rodiny (architektúra mikrokontroléra 8051) sú:

8-bitová ALU;

4 banky registrov, 8 v každej;

Vnútorná (rezidentná) programová pamäť 4 kB s typom ROM alebo EPROM (8751);

Interná (rezidentná) dátová pamäť 128 bajtov;

21 register špeciálnych funkcií;

Booleovský procesor;

Dva 16-bitové časovače / počítadlá;

radič sériového portu (UART);

Ovládač prerušenia s dvoma úrovňami priority;

Štyri 8-bitové I/O porty, z ktorých dva sa používajú ako adresová / dátová zbernica na prístup k externej programovej a dátovej pamäti;

Vstavaný generátor hodín.

Potom bol uvoľnený mikrokontrolér 8052, ktorý sa vyznačoval zvýšeným množstvom rezidentnej programovej a dátovej pamäte, zavedeným tretím časovačom, a teda rozšíreným radičom prerušení.

Ďalším zásadným krokom vo vývoji MCS-51 bol prechod výrobnej technológie na CMOS (modifikácia 8xC51). To umožnilo implementovať režimy Idl (nečinnosť) a Power Down (znížená spotreba), ktoré zabezpečujú prudký pokles spotreby energie kryštálu a otvorili cestu pre použitie mikrokontroléra v nestálych aplikáciách, napr. samostatné zariadenia na batérie.

A poslednou dôležitou etapou vo vývoji MK 8051 od Intelu bolo vydanie mikrokontrolérov 8xC51FA / FB / FC a 8xC51RA / RB / RC, ktoré sa v skratke často označujú ako 8xC51Fx a 8xC51Rx. Hlavnou charakteristickou črtou tejto skupiny kryštálov je to, že majú vyhradený časovač / počítadlo (PCA). Mikrokontroléry 8xC51Rx navyše obsahujú aj watchdog timer (WDT). Pozrime sa bližšie na architektúru a funkčnosť PCA.

PCA zahŕňa:

16-bitový časovač / počítadlo;

Päť 16-bitových vzorkovacích a porovnávacích modulov, z ktorých každý je pripojený k vlastnej linke I/O portu mikrokontroléra.

Časovač / počítadlo slúži všetkým piatim vzorkovacím a porovnávacím modulom, ktoré možno naprogramovať tak, aby vykonávali jednu z nasledujúcich funkcií:

16-bitové vzorkovanie hodnoty časovača na kladnej hrane externého signálu;

16-bitové vzorkovanie hodnoty časovača na zápornej hrane externého signálu;

16-bitové vzorkovanie hodnoty časovača na ľubovoľnej hrane externého signálu;

16-bitový programovateľný časovač;

16-bitové vysokorýchlostné výstupné zariadenie;

8-bitové PWM.

Všetky vyššie uvedené funkcie sa vykonávajú v PCA na hardvérovej úrovni a nezaťažujú centrálny procesor. To umožňuje zvýšiť celkovú priepustnosť, zlepšiť presnosť meraní a spracovania signálu a skrátiť dobu odozvy mikrokontroléra na vonkajšie udalosti, čo je dôležité najmä pre systémy v reálnom čase. Ukázalo sa, že PCA implementovaná v 8xC51Fx (8xC51Rx) je taká

Označenie

Max. frekvencia (MHz)

ROM / EPROM (bajt)

počítadlá

Je šťastím, že architektúra týchto mikrokontrolérov sa stala priemyselným štandardom a samotná PCA bola opakovane reprodukovaná v rôznych modifikáciách MK 8051.

Niektoré charakteristiky radu mikrokontrolérov MCS-51 vyrobených spoločnosťou Intel sú uvedené v tabuľke 1.1.

Počiatočnými prekážkami architektúry MCS-51 bola 8-bitová batéria ALU a relatívne pomalé vykonávanie príkazov (najrýchlejšie príkazy vyžadujú 12 pe-

Tabuľka 1.1

vstup výstup

ADC, vstupy x bitov

periféria,

zvláštnosti

U jamy. (V)

Možnosť nízkeho napätia

4 úrovne IRQ, vypnutie hodín

4 úrovne IRQ, vypnutie hodín

Nízkonapäťová verzia 8xC51Fx

4 úrovne IRQ, vypnutie hodín

4 úrovne IRQ, vypnutie hodín

4 úrovne IRQ, vypnutie hodín

frekvencia periódy (hodinová frekvencia MK)). To obmedzilo použitie mikrokontrolérov rodiny v aplikáciách vyžadujúcich zvýšený výkon a zložité výpočty (16- a 32-bitové). Naliehavou otázkou bola zásadná modernizácia architektúry MCS-51. Problém modernizácie komplikovala skutočnosť, že začiatkom 90-tych rokov už bolo vytvorených veľa vývojov v oblasti softvéru a hardvéru rodiny MCS-51, v súvislosti s ktorými bola jednou z hlavných úloh navrhovania novou architektúrou bola implementácia hardvérovej a softvérovej kompatibility s vývojom založeným na MCS -51.

Na vyriešenie tohto problému bola vytvorená spoločná skupina špecialistov z Intelu a Philipsu, no neskôr sa cesty týchto dvoch spoločností rozišli každý svojou cestou. V dôsledku toho sa v roku 1995 objavili dve výrazne odlišné rodiny: MCS-251/151 pre Intel a MCS-51XA pre Philips (pozri pododdiel 1.2).

Hlavné charakteristiky architektúry MCS-251:

24-bitový lineárny adresný priestor na adresovanie až 16 MB pamäte;

Architektúra registrov, ktorá umožňuje prístup k registrom ako bajty, slová a dvojité slová;

Režim adresovania stránok na urýchlenie získavania pokynov z externej programovej pamäte;

Rad pokynov;

Rozšírená inštrukčná sada vrátane 16-bitových aritmetických a logických operácií;

Rozšírený adresný priestor zásobníka (až 64 KB);

Vykonanie najrýchlejšieho príkazu v 2 hodinových cykloch.

Inštrukčná sada MCS-251 obsahuje dve inštrukčné sady - prvá sada je kópiou inštrukčnej sady MCS-51 a druhá pozostáva z rozšírených inštrukcií, ktoré využívajú výhody architektúry MCS-251. Pred použitím mikrokontroléra je potrebné ho nakonfigurovať, t.j. s pomocou programátora „napálite“ konfiguračné bity, ktoré určujú, ktorá z inštrukčných sád sa stane aktívnou po zapnutí. Ak nainštalujete prvú sadu inštrukcií, potom v tomto prípade bude rodina MCS-251 kompatibilná s MCS-51 na úrovni binárneho kódu. Tento režim sa nazýva binárny režim. Ak na začiatku nainštalujete sadu rozšírených inštrukcií (režim zdroja), potom programy napísané pre MCS-51 budú vyžadovať rekompiláciu krížových prostriedkov pre MCS-251. Source Mode vám umožňuje maximálne využiť architektúru MCS-251 a dosiahnuť najvyšší výkon.

Pre používateľov orientovaných na použitie mikrokontrolérov MCS-251 ako mechanickej náhrady za MCS-51 Intel vyrába mikrokontroléry MCS-151, už naprogramované v stave Binary Mode.

Niektoré charakteristiky radu mikrokontrolérov MCS-251/151 sú uvedené v tabuľke 1.1.

V súčasnosti spoločnosť Intel, zameraná na trh s procesormi Pentium, postupne ukončuje výrobu kryštálov MCS-51. Vo všeobecnosti to pre konkrétneho vývojára môže zostať nepovšimnuté, pokiaľ nepoužíva mikrokontroléry 8xC51GB a 80C152Jx, ktoré medzi produktmi iných firiem nemajú svojich presných náprotivkov. Rovnako ako všetky ostatné mikrokontroléry rodiny MCS-51, všetky boli mnohokrát replikované inými spoločnosťami.

Stav systému prerušenia sa zisťuje na konci každého strojového cyklu vo fáze S5P2, s výnimkou príkazov RETI a akýchkoľvek príkazov odkazujúcich na registre IE a IP. Od okamihu stanovenia požiadavky na prerušenie až po obsluhu prerušenia trvá 38 až 86 periód frekvencie fOSC v závislosti od fázy požiadavky a počtu strojových cyklov príkazu, počas ktorého bola požiadavka prijatá. .

Pri hardvérovej implementácii prerušenia sa vykoná inštrukcia LCALL addr16, ktorá zabezpečí uloženie aktuálneho stavu programového počítadla do zásobníka (uloženie návratovej adresy) a presun na štartovaciu adresu addr16 zodpovedajúcej servisnej procedúry. Každý zdroj žiadosti o prerušenie má svoj vlastný

štartovacia adresa (vektor prerušenia):

Externé prerušenie INT0.

Časovač prerušenia / počítadlo TC0.

Externé prerušenie INT1.

Časovač prerušenia / počítadlo TC1.

Prerušenie sériového portu.

2.7. Spôsoby adresovania a systém príkazov rodiny MCS-51

Riadiaci systém rodiny MCS-51 je zameraný na organizáciu flexibilného vstupu a výstupu dát cez univerzálne porty P0 ... P3 a primárne spracovanie informácií. Osobitná pozornosť je venovaná operáciám s bitmi a prenosu riadenia ich hodnotou. Inštrukcie vykonávajúce takéto operácie tvoria veľkú skupinu a spolu s príslušným hardvérom tvoria takzvaný "Booleovský procesor" v architektúre MCS-51.

Inštrukčná sada poskytuje programátorovi možnosť používať väčšinu operácií s úplnou sadou metód adresovania a softvérovo dostupnými hardvérovými prostriedkami.

2.7.1. Metódy adresovania

Každá inštrukcia informuje procesor o operácii, ktorú má vykonať, ao metódach prístupu k operandom. Kód príkazu má niekoľko polí, ktoré majú špecifický funkčný účel. Najdôležitejšími poľami každého príkazu sú operačný kód (CPC), ktorý určuje činnosť príkazu, a časť adresy. Polia adresovej časti obsahujú informácie o adresách operandov a výsledku operácie a v niektorých prípadoch informácie o adrese nasledujúceho príkazu.

Ak adresa udáva číslo pamäťovej bunky, v ktorej sa operand nachádza alebo kde je zadaný, potom sa nazýva priama adresa.

Metódy adresovania sú súborom mechanizmov na prístup k operandom. Niektoré z nich sú jednoduché, vedú ku kompaktnému formátu inštrukcie a rýchlemu prístupu k operandu, ale majú obmedzené množstvo dostupných zdrojov. Iné vám umožňujú pracovať so všetkými prostriedkami dostupnými v systéme, ale príkaz sa ukáže byť dlhý

vstup a realizácia je časovo náročná. Súbor metód adresovania v každej sade inštrukcií je kompromisnou kombináciou známych mechanizmov adresovania zvolených architektmi na základe súboru úloh, ktoré sa majú vyriešiť.

Nasledujú hlavné metódy adresovania používané v príkazoch rodiny MCS-51.

Implicitné adresovanie... Príkaz neobsahuje explicitné inštrukcie o adrese operandu zúčastňujúceho sa operácie alebo o adrese, na ktorej je umiestnený výsledok operácie, ale táto adresa je implikovaná. V príkazoch je akumulátor najčastejšie implicitne adresovaný ako príjemca výsledku operácie. Napríklad výsledok sčítania obsahu akumulátora (A) a registra R1 aktuálnej databanky príkazom ADD A, R1 sa zapíše do implicitne adresovateľného akumulátora. Celý zadaný príkaz zaberá v pamäti jeden bajt, pričom adresa iba akumulátora (8Eh oblasti SFR) obsahuje jeden bajt.

Priame adresovanie... Pole adresy príkazu obsahuje

Adresa nie je adresou operandu, ale operandom samotným. Priame adresovanie je označené špeciálnym znakom # pred číslom. Napríklad príkazom MOV A, # 15h sa do akumulátora načíta hexadecimálne číslo 15 (druhý bajt príkazu). V príkazovom systéme je priame adresovanie označené ako #data, kde dáta sú číslo

(dáta = 00h ... FFh).

Priame adresovanie... Pole adresy príkazu udáva priamu adresu dátovej pamäťovej bunky, v ktorej sa operand nachádza alebo kde je zapísaný. Napríklad príkazom MOV A, 15h sa do akumulátora načíta obsah bunky DSEG s adresou 15h. Pamäťová bunka je priamo adresovateľná, zatiaľ čo akumulátor je implicitný. V závislosti od umiestnenia adresovaného operandu sa priame adresovanie delí na priame registrové a absolútne.

Adresovanie priameho registra... Pole adresy príkazu obsahuje priamu adresu registra aktuálnej banky registrov. V každej banke je osem registrov a na ich oslovenie je potrebná trojbitová forwardová adresa. V mnemotechnických pomôckach príkazov je adresovateľný register označený Rn, kde n = 0 ... 7. Všetky príkazové polia sa zmestia do jedného bajtu. Toto sa nazýva krátke adresovanie. Napríklad MOV R4, R1.

Priame absolútne adresovanie umožňuje odkazovať na akúkoľvek bunku DSEG a oblasť SFR. Priama adresa je v tomto prípade jeden bajt a príkaz má dva bajty. V príkazovom systéme je bajt priamej adresy označený slovom direct (direct = 00h…FFh). Napríklad inštrukcia MOV 80h, R2 (alebo MOV P0, R2) načíta obsah registra R2 aktuálnej databanky do portu P0 (miesto 80h oblasti SFR). Ak sú obidva operandy adresované priamo, inštrukcia sa stane trojbajtovou (napr. MOV 80h, 15h).

Nepriame adresovanie... Pole adresy obsahuje adresu pamäťovej bunky, v ktorej sa nachádza priama adresa operandu. V príkazovom systéme špeciálny znak @ označuje nepriame adresovanie. Nehnuteľnosť

registre R0 a R1 (@Ri, i = 0,1) každej banky registrov majú priamu adresu. Napríklad, ak je obsah registra R1 aktuálnej banky registrov 15h, potom inštrukcia MOV A, @ R1 vykoná rovnakú akciu ako vyššie uvedená inštrukcia MOV A, 15h - načíta obsah DSEG pamäťovej bunky. s adresou 15h do akumulátora. Inštrukcia MOV A, @ R1 je však jednobajtová, ale hlavne je možné programovo meniť adresu zmenou obsahu registra R1.

Relatívne oslovovanie... Pri relatívnom adresovaní sa priama adresa vytvorí pridaním základnej adresy k poľu adresy príkazu. Obsah programového počítadla sa používa ako základná adresa a pole adresy príkazu je osembitový offset rel (relatívny). Číslo rel je príkazom interpretované ako celé číslo so znamienkom, reprezentované dvojkou. Rozsah jeho prezentácie je (-128 ... + 127). Pri určovaní čísla rel majte na pamäti, že počítadlo programu ukazuje na nasledujúci príkaz, ktorý sa má vykonať. Relatívne adresovanie je široko používané v príkazoch riadiaceho prenosu, čo umožňuje vytvárať premiestniteľné programové moduly. Riadiace prenosové príkazy s relatívnym adresovaním umožňujú organizovať vetvenie vzhľadom na aktuálnu pozíciu počítadla PC programov v oboch smeroch po (-128 ... + 127) bajtov.

V programoch v jazyku symbolických inštancií môžete zadať označenie, na ktoré sa má prejsť, v poli odsadenia. Ako výsledok prekladu, assembler vypočíta hodnotu offsetu, ak neprekročí (-128 ... + 127). V opačnom prípade sa zobrazí chybové hlásenie.

Základné adresovanie predstavuje akési relatívne oslovovanie. Priama adresa je v tomto prípade tvorená pridaním adresy uvedenej v príkaze k obsahu základného registra, v ktorom je uložená základná adresa. Funkciou základného registra v rodine MCS-51 je register dátových ukazovateľov DPTR alebo počítadlo PC programov. Tento typ adresovania je užitočný najmä pri spracovaní tabuliek a dátových polí. V inštrukciách MOVC A, @ A + DPTR a MOVC A, @ A + PC je 16-bitová dopredná adresa vytvorená ako súčet obsahov DPTR a A alebo PC a A.

Adresovanie stránok... Keď sa používa stránkovanie, pamäť sa rozdelí na sériu strán rovnakej dĺžky. Stránky sú adresované samostatným registrom stránok a pamäťové bunky v rámci stránky sú adresované adresou obsiahnutou v príkaze. Priama adresa je tvorená zreťazením (pripojením) adresy stránok a adresy pamäťovej bunky v rámci stránky. V inštrukcii MOVX A, @ Ri port P2 (vysoký bajt adresy) vykonáva funkciu registra stránky a obsah registra Ri (dolný bajt adresy) nastavuje adresu v rámci stránky. V tomto prípade je pamäť rozdelená na 256 strán po 256 buniek v každej z nich.

Adresovanie zásobníka Používa sa v neadresných príkazoch a je kombináciou metód autoinkrementálneho a autodekrementálneho adresovania, fungujúcich na princípe LIFO (Last I nput - First O output) - "posledný dnu - prvý von". Zásobník sa nachádza v DSEG a rastie v smere zvyšovania adresy. Adresa vrcholu zásobníka je obsiahnutá v ukazovateli zásobníka SP. Keď sa bajt zapíše do zásobníka, obsah SP sa najprv zvýši a potom sa vykoná zápis na túto adresu. Pri čítaní bajtu zo zásobníka číta najskôr na adrese, na ktorú ukazuje SP, a potom znižuje SP. Pri používaní zásobníka je potrebné mať na pamäti, že hĺbka zásobníka (maximálny počet pamäťových buniek obsadených zásobníkom) nie je riadená hardvérom. Pri nadmernom náraste zásobníka môžu byť pamäťové bunky, ktoré na to nie sú určené, obsadené stratou informácií v nich. Hardvérový zásobník sa používa na uloženie návratovej adresy pri obsluhe prerušenia.

2.7.2. Sada príkazov rodiny MCS-51

Systém príkazov je uvedený v tabuľkách A2.1 ... A2.6 v prílohe 2. Tabuľky uvádzajú názov príkazu, jeho mnemotechnickú pomôcku, binárny operačný kód, vplyv vykonávaného príkazu na príznaky C, OV , AC a P, dĺžku príkazu v bajtoch (B) a čas vykonania v strojových cykloch (C), ako aj obsah transformácie vykonanej inštrukciou. Čiarka sa používa ako oddeľovač polí adries v príkazoch. Ak chcete zlepšiť čitateľnosť, môžete za čiarku pridať medzery, ak ich používaný assembler podporuje.

Celú sadu príkazov možno rozdeliť do 5 skupín: operácie prenosu dát, aritmetické operácie, logické operácie, bitové operácie a operácie prenosu riadenia.

Skupina príkazov pre operácie prenosu dát(tabuľka A2.1) s-

obsahuje príkazy MOV (prenos dát medzi DSEG a RSEG), MOVC (medzi CSEG a A), MOVX (medzi XSEG a A), PUSH a POP a dva príkazy na výmenu XCH a XCHD. Všetky príkazy prenosu dát, v ktorých je prijímačom batéria, nastavujú príznak parity P obsahu batérie a príkazy priamej adresy, v ktorých je register PSW prijímač, menia všetky príznaky. Najpriestrannejšia je inštrukcia MOV, ktorá využíva štyri spôsoby adresovania: registrovať priame (A, Rn, DPTR), priame (priame), nepriame (@Ri), priame (#data, # data16). Druhý operand príkazu je zdroj, prvý je cieľ. Existujú tri spôsoby adresovania (okrem priameho) na označenie cieľa a všetky štyri na označenie zdroja. Trojbajtový priamy, priamy príkaz MOV prenáša medzi ľubovoľnými dvoma pamäťovými miestami (DSEG a SFR), vrátane RSEG. Na výmenu s RSEG sú k dispozícii špeciálne dvoj- a jednobajtové formáty:

Špeciálna inštrukcia MOV DPTR # data16 načíta 16-bitový ukazovateľ DPTR údajmi16.

Inštrukcia MOVC umožňuje čítať informácie z pamäte programu CSEG nie do príkazového registra riadiaceho zariadenia, ale do batérie operačného zariadenia. Príkaz používa dve metódy adresovania: založené na DPTR a relatívne k PC. V oboch prípadoch je celočíselný posun bez znamienka (index) uložený v akumulátore. Batéria slúži aj ako prijímač výsledku. Príkaz vám umožňuje vykonávať rýchle prekódovanie naprieč tabuľkami.

K externej pamäti sa pristupuje pomocou inštrukcie MOVX. Výmena prebieha po bajtoch medzi batériou a externým XSEG. Bunka XSEG môže byť adresovaná dvoma spôsobmi: nepriamo cez 16-bitový ukazovateľ DPTR a stránkovaná nepriamo cez 8-bitové Ri, i = 0,1. V druhom prípade je registrom strán register P2.

Neadresné príkazy PUSH a POP zabezpečujú prenos dát

medzi DSEG, RSEG a SFR.

Inštrukcia výmeny XCH poskytuje obojsmernú výmenu bajtov a inštrukcia XCHD poskytuje najmenej významné tetrády bajtových operandov.

Skupina aritmetických príkazov(tabuľka A2.2) spolu

obsahuje inštrukcie na sčítanie ADD, sčítanie s prenosom ADDC, odčítanie s vypožičaním SUBB, zvýšenie a zníženie o jeden INC a DEC, zbalený formát BCD sčítanie desatinnej korekcie, násobenie MUL a delenie DIV. Operácie sa vykonávajú na celých číslach bez znamienka. Pri operáciách sčítania a odčítania je akumulátor prvým operandom a prijímačom výsledku. Na definovanie druhého operandu sa používa priamy register, priame absolútne, priame a nepriame adresovanie. Operácie INC a DEC sa vzťahujú na akumulátor, priamo adresovateľný register alebo priamo alebo nepriamo adresovateľné pamäťové miesto. Okrem toho sa operácia INC vzťahuje na obsah 16-bitového registra ukazovateľa DPTR.

Operácie násobenia a delenia celého čísla bez znamienka zahŕňajú akumulátor a register B. Pri násobení sa 8-bitová hodnota A vynásobí 8-bitovou hodnotou B a 16-bitový výsledok sa zapíše do páru BA. V tomto prípade je v registri B uložená horná časť produktu. Príznak OV sa nastaví, ak je súčin väčší ako 255. Keď sa 8-bitová hodnota A vydelí 8-bitovou hodnotou B, podiel sa zapíše do A a zvyšok sa zapíše do B. Pokus o delenie 0 nastavuje príznak pretečenia OV.

Príkaz DA desiatkovej korekcie akumulátora je umiestnený za príkazom add. Termíny musia byť zastúpené v kóde BCD. Korekcia sa vykonáva štandardným spôsobom.

Skupina príkazov pre logické operácie(tabuľka A2.3 ) obsahuje tri typické operácie: ANL - logické AND, ORL - logické OR, XRL - logické exkluzívne OR. Zdroj prvého operandu

slúži buď akumulátor A alebo priamo adresovateľná pamäťová bunka. Druhý operand je špecifikovaný jednou zo štyroch základných metód adresovania. Do skupiny patrí aj jednotlivé operácie nad obsahom akumulátora: CLR - clear, CPL - inversion, a tiež RL, RLC, RR a RRC - operácie cyklických a predĺžených posunov vpravo a vľavo. Patrí sem aj prevádzka výmeny bločkov vo SWAP akumulátore, ktorú možno interpretovať ako cyklický posun bajtu o štyri číslice.

Skupina velenia bitových operácií(tabuľka A2.6) obsahuje ko-

Príkazy SETB - nastavenie bitu na 1, CLR - nastavenie bitu na 0, CPL - bitová inverzia, ANL a ORL - logické AND a logické OR obsahu príznaku C a priamo adresovaného bitu, MOV - prenos bitov.

V bitové operácie, príznak C funguje ako booleovský akumulátor. Operandy sú obsahom príznaku C alebo priamo adresovateľného bitu BSEG. Operácie ANL a ORL môžu využívať obsah priamo adresovateľného bitu (bit) alebo inverziu obsahu (/ bit).

V do tejto skupiny patria aj príkazy na podmienené vetvenie s relatívnym 8-bitový offset rel. Podmienený skok možno vykonať s nastaveným (príkaz JB) aj vymazaným (príkaz JNB) bitom. Za zmienku stojí najmä príkaz JBC, ktorý po nastavení bitu implementuje vetvenie a súčasne vymaže bit na 0.

Riadiaca skupina príkazov prenosu(tabuľky A2.4 a A2.5) s-

drží príkazy nepodmieneného skoku AJMP, LJMP, SJMP, JMP, podmienený skok JZ, JNZ, CJNE, volanie ACALL, LCALL, návrat RET, RETI a modifikácia podmieneným skokom DJNZ. Zahrnutý je aj prázdny príkaz NOP.

V Relatívne adresovanie je široko používané v príkazoch riadiaceho prenosu, čo vám umožňuje vytvárať premiestniteľné programové moduly. Relatívna adresa je 8-bitový offset rel je bajt so znamienkom, ktorý poskytuje skok (–128 ... +127) bajtov vzhľadom na aktuálnu pozíciu počítača. Buď priama adresa addr16 alebo nepriama adresa @ A + DPTR sa môžu použiť na skok na akýkoľvek iný bod v 64K adresnom priestore. V druhom prípade sa obsah A interpretuje ako celé číslo bez znamienka. Variant krátkeho priameho adresovania addr11 v rámci 2KB aktuálnej stránky bol predstavený kvôli kompatibilite s rodinou MCS-48.

Všetky tieto typy adresovania sa používajú v inštrukciách skoku. V príkazoch volania sa používajú iba priame metódy adresovania addr16 a in-page addr11. Všetky podmienené príkazy používajú iba relatívne adresovanie.

Keď mikrokontrolér rozpozná požiadavku na prerušenie, vygeneruje inštrukciu LCALL addr16, ktorá automaticky zabezpečí uloženie návratovej adresy do zásobníka. Informácie o stave programu (obsah registra PSW) sa neuložia automaticky. V čom