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 kimenete 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.

A CPU időzítései

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)

Belső és külső tárolók

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 foglalja ö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 maszkolá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.

Az ALE jel

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 kontroller 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 (Program Store Enable) jel látja el ezt a feladatot. Ezt a tok 29-es lábán találjuk. A jel 0 szintje esetén a programtárolóhoz, 1 szintje esetében pedig az adatmemóriához szól a kontroller.

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 (Write: 16-os láb) és az (Read: 17-es láb) jelek. Az az olvasást, a pedig az írást vezérli. Mindkét jel 0-val aktív.

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ő regiszterek ( 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.

Az SFR regiszterekről részletesebben