MCS-51 hardver kialakítása 1/3

Az ábrán látható a legtöbb egytokos mikroszámítógépre jellemző funkcionális felépítési mód.
Órajelegység
A 8051 mikrokontrollerben - a legtöbb mikroprocesszorhoz hasonlóan - belső órajel-egysége van. Az áramkör egy invertáló erösítő, amelynek a be-, és a kimen
ete az XTAL1 és az XTAL2 lábakhoz csatlakozik ( 19 és 18-as lábak ). A felhasználáshoz szükséges órajel frekvenciát a csatlakoztatott külső áramköri elemek határozzák meg.Rendszerint erre a célra kvarcot, vagy kerámia-rezonátort használhatunk.A 2.2. ábra egy kvarccal stabilizált órajel-generátort mutat.
2.2. ábra
Oszcillátorkapcsolás
A kvarcot vagy kerámia rezonátort az XTAL1 és XTAL2 lábak közé kell bekötni. A lábak és a test közé egy-egy kerámia kondenzátort kell csatlakoztatni (C1,C2). A kondenzátorok értékeinek változtatásával mintegy 5%-os frekvenciaváltoztatást lehet megvalósítani. Mind a frekvenciaátfogás, mind pedig a stabilitás függ a kondenzátorok értékétől.A rezgési frekvencia és a frekvenciastabilitás optimális beállítása együttesen nem valósítható meg. A C1 és C2 kapacitások értékének növelésekor javul a frekvenciastabilitás, a rezgés periódusideje viszont csökken. Minden alkalmazás esetében meg kell találni a kompromisszumot. Általában a 20 pF-os kapacitások megfelelőek. Legfeljebb 100 pF-ig növelhető ez az érték.
Külső szinkronizálás
A nagyobb frekvenciastabilitáshoz vagy nagyobb rendszerek szinkronozásakor külső - TTL szintű - órajellel is vezérelhető a 8051-es típusú mikrokontroller. Ilyenkor a jelet az XTAL2 bemenetre kell vezetni. Az XTAL1 lábat pedig a testre kell kötni. Mivel a fázisfordító műveleti erősítő kimeneti ellenállása nagy, ezért nem terheli a csatlakozó órajelet. A 80C51-es típusjelű, CMOS -változatú mikrokontroller esetén - az előbbiektől eltérően - az órajelet az XTAL1 lábra kell vezetni, az XTAL2 láb pedig szabadon hagyható.

2.3. ábra
A külső órajel alkalmazásakor figyelembe kell venni, hogy a 8051-es bemenetei nem TTL-kompatibilisek. Ezért a TTL jel csatlakoztatásakor még egy - 4,7 k körüli - felhúzó ellenállást is alkalmazni kell. A 2.3.ábrán látható egy példa a külső órajel-generátor felépítésére.
Belső időviszonyok
A belső oszcillátor kimenete, illetve a bevezetett órajel egy belső ütemgenerátort hajt meg. Ez állítja elő a szükséges belső ütemező jelet, amelynek frekvenciája mindenkori órajel frekvencia fele.
A belső jel ütemezi a műveleteket. A 8051/8031 típusoknál minden gépi-ciklus hat ütemű, melyeket S1-től S6-ig jelölünk. Mindegyik ütem két oszcillátor periódusból - P1 és P2 - áll. Minden gépi-ciklus P tehát 12 órajel-periódusból áll, vagyis az S1P1-el kezdődik és az S6P2-vel fejeződik be. A gépi ciklus periódusideje (P) a következő összefüggés alapján számolható ki:
.
Az f-et 1/s - ban ( Hz-ben ) helyettesítve a P periódusidőt sec-ban, illetve mikrosec-ben kapjuk. Például ha egy kontrollert 8 MHz-es órajellel működtetünk, akkor
10-6s = 1.5 s
hosszú lesz egy gépi ciklus. A ciklusidő ismeretében egy adott program futási ideje is kiszámolható. A 8051/8031 kontrollerek utasításai 1-3 bájt hosszúak és végrehajtásuk egy vagy két ciklus alatt történik. Kivétel
a szorzás (MUL), illetve az osztás (DIV), melyeket a mikrokontroller 4 ciklus alatt hajt végre.A külső tárolók vezérlőjelei
Az S1-S6 ütemekben a P1,P2 órajelciklusok szerint változik minden - a külső tároló-áramkörök működtetéséhez szükséges -vezérlőjel. A jelek ciklusonként egyszer vagy többször jelennek meg, az S1P1-S6P6 ütemek valamelyikében. Ezek a vezérlőjelek a következők:
- ALE (Address Latch Enable)
-
(Program Store Enable)
-
(Read)
-
(Write)
A 8051 mikrokontroller 64 Kbájt külső adatmemoriát és 64 Kbájt külső programmemóriát tud kezelni. A család minden tagjában van belső adatmemória ( RAM ), illetve egyes típusokban belső programmemória (ROM/EPROM ) is található.
A belső adat- és programtároló nagysága a család egyes tagjainál különböző. A fontosabb típusok tárméreteit fogla
lja össze a 2.1. táblázat.
|
Típus |
Adattár (bájt) |
Programtár |
|
8051 |
128 |
4 Kbájt ROM |
|
8052 |
256 |
8 Kbájt ROM |
|
80C51 |
128 |
4 Kbájt ROM |
|
8031 |
128 |
nincs |
|
8032 |
256 |
nincs |
|
80515 |
256 |
8 Kbájt ROM |
|
80535 |
256 |
nincs |
|
8751 |
128 |
4 Kbájt EPROM |
|
8752 |
256 |
8 Kbájt EPROM |
|
80517 |
256 |
8 Kbájt ROM |
|
8537 |
256 |
nincs |
2.1. táblázat
Belső adattároló
A 8051 típusú mikrokontroller belső RAM-ja két 128 bájtos területet tartalmaz:
- operatív memória ( 00H - 7FH címterület )
- Speciális-Funkció-Regiszter (*b.l. SFR*) memóriát (80H - FFHcímterület) tartalmazza (2.1.ábra).

2.1. ábra
Az operativ memória további három részre tagolódik. Ezek:
1. Négy 8 bájtos Regiszter Bank ( BANK0, BANK1, BANK2, BANK3)
A Bank-ok közül mindig egy lehet aktív. Az aktív Bank regisztereihez rendeltek az R0, R1 ..... R7 regiszter elnevezések (szimbólumok ). Ezek az un. munkaregiszterek, amelyek közül az R0, R1 indirekt címzéshez, míg a többi egyéb funkciókra pl. ciklusszámlálás használhatók. A másik három bank memóriahelyei abszolút címzéssel elérhetők, és például adattárolásra használhatók. Az aktuális Bank kiválasztása szoftverből történhet a PSW (Program Status Word) regiszter RS1 (PSW.4) és RS0 (PSW.3) bitjeinek megfelelő beállításával. (A két bitből alkotott bináris szám a kiválasztandó Bank sorszáma.) Hardver Reset illetve bekapcsoláskor a Bank 0 a kiválasztott.
2. Bit-címezhető memória
A bit címezhető memória 16 bájtja elérhető bájtos címzéssel is, de a memóriaterület 128 bitje ( 16*8 ) bites változóként külön-külön írható/olvasható, illetve használható bitműveletek változóiként. A bitek címzése kétféle, mégpedig
- bájtcím . bit sorszám pl. 21.5 a 21H című bájt 5-ös sorszámú (hatodik ) bitje,
- abszolút címzéssel a 00H - 7FH címtartományban. A 00H a 20.0, vagyis a 20H című bájt legkisebb helyiértékű bitje, míg a 7FH a 2F.7 vagyis a terület legutolsó bájtjának a legnagyobb helyiértékű bitje. pl. az 53H című bit 2AH című bájt 3-as sorszámú bitje ( 2A.3 ).
3. általános felhasználású memória
Az általános felhasználású memóriaterület csak bájtos szervezésű. Az operatív memória teljes területe
direkt ( közvetlen címmel ) vagy indirekt címzéssel*k.l. 51ut* ( cím az aktuális Bank R0, vagy R1 regiszterében van) érhető el.Belső programtároló
A ROM-ba a programot a gyártás során maszkolják és azt a későbbiekben már nem lehet megváltoztatni. Előnye a maszkprogramozásnak, hogy részben esetleg teljesen elhagyható a külső programmemória. Azonban a feladathoz illesztett maszk fejlesztése drága. Ezért e változat alkalmazása csak nagy darabszám esetén kifizetődő (pl.videómagnókban). A 8051 használható a 8031-nek megfelelően is. A belső programtároló az EA jelü bemenetre (31 láb) adott vezérléssel be-, vagy kiiktatható. A lábra adott magas (HIGH) szintű jel esetében a mikrokontroller az utasításokat a belső programtárból hívja, ameddig a programkódok száma kevesebb, mint 4096 (4 kbájt). Az e feletti kódokat pedig már a külső memóriából veszi. Alacsony (LOW) szintű vezérlésnél - minden esetben - a külső programmemóriát használja. A 8031 típusnál ezt a lábat mindig alacsony szintre kell kötni, mivel nincs belső programtárja.
A valóság viszont sokszor ettől eltérő. A kapható 8031-es jelű mikrokontrollerek esetenként olyan 8051-es változatok, amelyekben a belső ROM üres vagy egy tetszőleges programot tartalmaz. Alapvetően ennek az az oka, hogy a gyártásban olcsóbb egy típust - a 8051-est - gyártani. Ha szükséges, akkor programozzák a ROM-ot, egyébként üresen hozzák forgalomba. Sokszor kaphatók felhasználói programmal is 8051-es típusok. Ez semmiképpen sem negatívum, sőt emiatt esetleg olcsóbbak.
A 8751, a 8051-es típus EPROM-mal
A család egy megkülönböztetett változata a 8751 típusjelű. ( Ehhez hasonlóan kapható a 8752 típus is. ) E típusokba nem ROM-ot, hanem EPROM-ot integrálnak. A program fejlesztésnél a tesztelés és esetleges módosítás lehetőségét biztosítja az EPROM. A végleges maszk elkészítése előtt, az esetleges programhibánál az EPROM törölhető és újra írható. Igy csak a valóban helyes program kerül maszko
lásra a gyártásban.Külső tárolók alkalmzása
Az alkalmazások széles körében nem elég a belső tárolók memóriakapacitása. Ilyenkor kell a 8051-et külső adat- és/vagy programtárolóval kiegészíteni. Használatuknál figyelni kell arra, hogy a 8051 nem használ várakozó állapotot ( Wait-States ), ezért csak megfelelő sebességű tárolók alkalmazhatók.
A kontroller megkülönbözteti a külső adat- és programmemóriát. A kommunikáció is eltérő formájú. Más vezérlőjeleket használ a program-, ill. az adatmemória eléréséhez. Egy adatmemória elérésekor meg kell különböztetni, hogy a kontroller adatot olvas vagy ír a memóriába. Az írást a
( Write ), ill. az olvasást az
( Read ) jel vezérli. A külső programmemóriából csak olvasni kell, ezt a
jel hajtja végre.
8 vagy 16 bites memóriacímzés
A külső adat-, ill. programmemória megkülönböztetése mellett eltérő a 8, ill. a 16 bites címzéses adatátvitel is. A külső programmemóriát csak 16 bites címzéssel lehet elérni. A külső adatmemóriánál mind a 8, mind pedig a 16 bites címzés használható.
A felhasználás során az utasításokkal különböztetjük meg a kétféle címzési módot. Az adatmemória és a mikrokontroller közötti adatátvitelnél a DPTR (Data-Pointer) segitségével lehet 16 bites, míg az R0, ill. R1 révén a 8 bites címzést megvalósítani.
A 8 bites címzés esetén a címet kizárólag a P0 port adja. A P2 portot ilyenkor nem használja címzéshez. A port tárolója változatlanul a kimeneti lábakhoz kapcsolódik. A 16 bites cím használata eltér az előzőektől. A cím magasabb bájtját (A8-A15) minden esetben a P2 adja ki. A cím egy teljes gépi ciklus idejéig változatlan. A művelet befejezése után ismét megjelenik a lábakon az eredeti szint ( a hozzá tartozó tároló tartalma ). A P0 port - a címzési módtól függetlenül - mindig időmultiplex módon adja ki a cím alsó bájtját, ill. betölti az adatbusz szerepét.
Külső memória kezelésénél - a lábak számának korlátozása miatt - az adatbusz kezelése időmultiplex üzemű. Ilyen buszkezelési megoldással más Intel processzoroknál is találkkozhatunk. A megoldás a gyártó specialitása. A 8051-es típus fejlesztése során is ezt alkalmazták. A 16
bites címbusz és a 8 bites adatbusz 24 lábat igényelne. Az adat és a cím alsó bájtjának időmultiplex módon való kezelése viszont 8 csatlakozás használatával is megoldható. A működés során először a cím aldó bájtja kerül ki, amelyet egy külső tárolóba kell beírni. A tárolás vezérlésére használható az ALE jel ( Adress Latch Enable ). Az ALE jel aktív szintje egy.A 8051-es a cím alsó bájtját a 32 39-es lábakon, míg a felső bájtot a 21 28-as lábakon adja ki. A cím az ALE jellel írható a külső tárolóba. A kontro
ller a cím alsó bájtját az ALE jel negatív éléig tartja. Ezután a 32 39-es lábakon megy végbe az adatátvitel.Léteznek olyan speciális áramkörök ( pl. 80C54 ), amelyek a multiplexelt buszt közvetlenül használják. Ezekben a címtároló az áramkörbe van integrálva, ezért kiegészítő tárolóra nincs szükség.
A
jel
A 8051-es alkalmazásaiban a külső adat- és programmemória együttes használatával is találkozhatunk. E két memória párhuzamosan csatlakozik a cím-, ill. az adatbuszra. A két memória megkülönböztetéséhez egy vezérlőjel szükséges. A 8051-es mikrokontrollercsaládnál a ![]()
A
és az
jelek
A külső adattárolónál - a programtárolóval ellentétben - külön kell választani a tárolócellába való írást, ill. az onnan való olvasást. Ezt a feladatot látják el a ![]()
Speciális funkcióregiszterek (SFR-ek)
A belső adatmemória 80H - FFH címterületén találhatók az ún. Speciális Funkció Regiszterek ( SFR ). A 8051-es család minden belső funkciója ezek segítségével vezérelhető. Itt találhatók a
- CPU regiszterek ( ACC, B, PSW, SP ),
- címző re
giszterek ( PC, DPTR ),- a portok regiszterei ( P0, P1, P2, P3 ),
- a belső perifériák
- időzítő/számláló ( TMOD, TCON, TH0, TL0, TH1, TL1 ),
- soros vonal ( SCON, SBUF ),
- megszakítás ( IP, IE ) regiszterei.
Az SFR regiszterek csak direkt címzéssel írhatók/olvashatók. Ezen regiszterek között vannak olyanok, amelyek bitjei is külön-külön kezelhetők. Ezek abszolút címtartománya a 80H- FFH értékeket öleli fel. Ezek a bitek is ugyanúgy kétféle módon címezhetőek, mint az előzőekben leírt alsó 128 bit. Az SFR-ek elnevezései, címei és funkciójuk összefoglalva látható a 2.2. táblázatban , ahol a *-al jelöltek a bitenként is címezhető regisztereket. A táblázatban + jellel ellátott regiszterek csak a 8052/8032-es típusokban, ill. ezek továbfejlesztett változtaiban vannak.
|
Szimbólum |
Jelentés |
Cím (Hex) |
|
*P0 |
Port 0 |
80 |
|
SP |
Stack-Pointer |
81 |
|
DPL |
Data-Pointer: LOW bájt |
82 |
|
DPH |
Data-Pointer: HIGH bájt |
83 |
|
*TCON |
Időzítő/Számláló vezérlő regiszter |
88 |
|
TMOD |
Időzítő/Számláló mód-regiszter |
89 |
|
TL0 |
0-ás Időzítő/Számláló : LOW bájt |
8A |
|
TL1 |
1-es Időzítő/Számláló: LOW bájt |
8B |
|
TH0 |
0-ás Időzítő /Számláló: HIGH bájt |
8C |
|
TH1 |
1-es Időzítő/Számláló: HIGH bájt |
8D |
|
*P1 |
Port 1 |
90 |
|
PCON |
Power vezérlő regiszter |
97 |
|
*SCON |
Soros Port vezérlő regiszter |
98 |
|
SBUF |
Soros port buffer |
99 |
|
*P2 |
Port 2 |
0A0 |
|
IE |
Megszakítás engedélyező regiszter |
0A8 |
|
*P3 |
Port 3 |
0B0 |
|
*IP |
Megszakítás prioritás regiszter |
0B8 |
|
+*T2CON |
2-es Időzítő/Számláló vezérlő regiszter |
0C8 |
|
+*RCAP2L |
2-es Időzítő/Számláló Capture regiszter LOW bájt |
0CA |
|
+*RCAP2H |
2-es Időzítő/Száml áló Capture regiszter HIGH bájt |
0CB |
|
+*TL2 |
2-es Időzítő/Számláló: LOW bájt |
0CC |
|
+*TH2 |
2-es Időzítő/Számláló: HIGH bájt |
0CD |
|
*PSW |
Programstátusz regiszter |
0D0 |
|
*ACC |
Akkumulátor |
0E0 |
|
*B |
B regiszter |
0F0 |
2.2. táblázat
A címterületen szándékosan hagytak lyukakat a későbbiekben fejlesztett változatok - mint pl.80552 , 80515 vagy a 80517 - további regisztereinek az egységes keretbe illesztése céljából.