Intel MCS-51
Az Intel MCS-51 (általánosan használt számjelöléssel 8051) egy belsőleg Harvard architektúrájú, komplex (CISC) utasításkészletű, egycsipes mikrovezérlő-sorozat, amit beágyazott rendszerekben való felhasználásra fejlesztett ki az Intel 1980-ban.[1] Az eredeti Intel gyártású csipek igen népszerűek voltak az 1980-as években és az 1990-es évek elején; a továbbfejlesztett, binárisan kompatibilis származékok még ma is azok.
Az Intel MCS-51-es családját eredetileg n típusú fém-oxid félvezetős (NMOS) technológiával történő gyártásra tervezték, mint elődjét, az Intel MCS-48-at is. A későbbi változatokban már megjelent a modernebb komplementer fém-oxid félvezetős (CMOS) technológia – az ilyen technológiával gyártott csipeket C betű jelöli a megnevezésben (például 80C51). A CMOS integrált áramkörök fogyasztása kisebb, mint NMOS elődeiknek, ami akár elemről működő eszközökben történő felhasználásra is alkalmassá teszi azokat.
Az MCS-51-es az 1996-ban a továbbfejlesztett 8 bites MCS-151 és a 8/16/32 bites MCS-251 binárisan kompatibilis mikrovezérlő-családokban folytatódott.[2] Az Intel már nem gyártja az MCS-51, MCS-151 és MCS-251 családokat, más gyártók azonban folytatták ezek előállítását és fejlesztését, így ezek továbbfejlesztett és binárisan kompatibilis származékai még ma is léteznek és népszerűek. Néhány származék integrált digitális jelprocesszort (DSP) is tartalmaz. A gyártott fizikai eszközökön túl számos cég kínál MCS-51 származékokat jogvédett, készen felhasználható, szintetizálható processzormag (IP core) formájában – field-programmable gate array (FPGA) programozható logikai eszközökben vagy alkalmazásspecifikus integrált áramkör (ASIC) tervekben való felhasználásra.
Fontos jellemzők és alkalmazások
[szerkesztés]A 8051 architektúra sok funkciót biztosít (CPU, RAM, ROM, I/O, megszakítási logika, időzítők, stb.) egy tokon belül:
- 8 bites aritmetikai-logikai egység (ALU) és akkumulátor, 8 bites regiszterek (egy 16 bites regiszter speciális adatmozgató utasításokkal), 8 bites adatsín és 2 × 16 bites címsín/programszámláló/adatmutató és a kapcsolódó 8/11/16 bites műveletek; mivel a gépi szó mérete alapvetően a 8 bit, ezért a mikrovezérlőt is 8 bitesnek tekintjük
- logikai (boolean) processzor, 17 utasítással: ennek 1 bites akkumulátora, 32 (4, bitenként címezhető 8 bites) regisztere és max. 144 speciális, bitenként címezhető RAM változója van (fizikailag 18 db. 8 bites bitenként címezhető tárhelyen)[3]
- szorzás, osztás és összehasonlítás utasítások
- 4 gyorsan váltható, memóriába leképezett regiszterbank, egy bankban 8 regiszter
- gyors megszakítás opcionális regiszterbank-váltással
- megszakítás- és szálkezelés választható prioritással[4]
- két 16 bites címsín – 2 × 216 bájtot (2×64 KiB) címezhet, a RAM-ban vagy a ROM-ban
- 128 bájt lapkára integrált RAM (IRAM)
- 4 KiB lapkára integrált ROM, 16 bites (64 KiB) címtartománnyal (PMEM); ez a 803X változatokból hiányzik
- négy 8 bites kétirányú be-/kimeneti port, bitenként címezhető
- UART (soros port)
- két 16 bites számláló/időzítő
- energiatakarékos üzemmód (néhány származékban)
A 8051 mag egyik fontos jellemzője, hogy tartalmaz egy logikai (boolean) feldolgozóművet, ami lehetővé teszi bit-szintű Boole-algebrai műveletek hardveresen támogatott, ezáltal igen hatékony végrehajtását a kiválasztott belső regisztereken, portokon és megcímzett RAM tárolóhelyeken. Ez a jellemző nagyban hozzájárult a vezérlő pozíciójának megszilárdításához az ipari vezérlő alkalmazásokban, mert legalább 30%-kal csökkenti kód méretét.[forrás?] Egy másik igen hatékony jellemzője a négy bankra osztott munkaregiszter-készlet, amelyben a regiszterbankokat egyszerűen és gyorsan lehet váltani, az aktív regiszterbank kijelölésével. Ez jelentősen csökkenti a megszakításkiszolgáló rutinok végrehajtásához szükséges időt. A 8051-es egyetlen utasítással átválthatja a regiszterbankokat, szemben a kritikus regiszterek vagy kijelölt RAM tárolók verembe mentésének időigényes feladatával. Ugyanez a regiszterbank-csere lehetővé teszi a 8051 számára a gyors környezet- ill. kontextusváltás végrehajtását.
A soros kommunikáció egyszerűen programozható. Az UART és szükség esetén egy időzítő beállítása után a programozónak csak egy egyszerű megszakításkezelő rutint kell írnia, ami feltölti a „küldő” léptetőregisztert, amint az UART utolsó bitet is kiléptette onnan és/vagy üríti a feltöltött „fogadó” léptetőregisztert, azaz például a memóriába másolja az adatokat. A főprogram ekkor egyszerű soros olvasást és írást hajthat végre, 8 bites adatokat olvasva és írva különböző vermekből / vermekbe.
A származékok jellemzői
[szerkesztés]2013-as állapot szerint több nagyobb csipgyártó még mindig fejleszt újabb 8051-es származékokat, és a nagyobb fordítóprogram-szállítók (fejlesztőcégek), mint például az IAR Systems, a Keil vagy az Altium Tasking[5] cégek folyamatosan adnak ki frissítéseket.
Az MCS-51 alapú mikrovezérlőkben jellemzően megtalálható egy vagy két UART, két vagy három időzítő, 128 vagy 256 bájt belső adatmemória RAM (amelyből 16 bájt bitenként címezhető), max. 128 bájt I/O terület, 512 bájttól 64 KiB-ig terjedő belső programmemória, és egyes modellekben bizonyos mennyiségű kiterjesztett adat RAM (ERAM) memóriával is rendelkeznek a külső adattérben. A külső RAM és ROM közösen osztozik az adat és címsíneken. Az eredeti 8051 mag futási sebessége 12 órajelciklus gépi ciklusonként, úgy, hogy a legtöbb utasítást egy vagy két gépi ciklus alatt hajtja végre a processzor. Így tehát egy 12 MHz-es órajelű 8051-es 1 millió egyciklusos utasítást képes végrehajtani másodpercenként, avagy 500 000 kétciklusos utasítást másodpercenként. A továbbfejlesztett modern 8051 magokban sokat javítottak az utasításvégrehajtás sebességén, így ezekben a gépi ciklus hat, négy, két, vagy akár egy órajel alatt fut le, az órajelfrekvencia pedig elérheti a 100 MHz-et is, amivel növekszik a másodpercenkénti utasításszám. Minden Silicon Labs, több Dallas és néhány Atmel eszköz egyciklusos magot alkalmaz.
A 8051 változataihoz igen sok bővítés készült, tartalmazhatnak például (különféle konfigurációkban) beépített feszültségesés-észleléssel támogatott reset-időzítőket, lapkára integrált oszcillátorokat, önprogramozó Flash ROM programmemóriát (a Harvard-architektúra miatt a programmemória nem írható; a mikrovezérlő azonban bizonyos körülmények között megengedi az írást a saját programmemóriájába, például a boot-szektorból való kódfuttatás alatt), beépített külső RAM-ot, extra belső programtárolót, rendszerbetöltő programkódot a ROM-ban, EEPROM-ot nem felejtő adattároló szerepben, I²C soros sínt, SPI sínt, és USB gazdagép/hoszt interfészeket, CAN vagy LIN (Local Interconnect Network) sínt, ZigBee (személyi hálózat) vagy Bluetooth rádió modulokat, PWM generátorokat, analóg komparátort (összehasonlító áramkör), A/D és D/A konvertereket, valós idejű órát (RTC), extra számlálókat és időzítőket, áramkörön belüli hibakeresést (debugging) támogató berendezéseket, több megszakítási forrást, extra energiatakarékos üzemmódokat, több/kevesebb párhuzamos portot, stb. Az Intel készített egy maszkprogramozott 8052AH-BASIC jelű változatot, amely egy ROM-ba helyezett BASIC interpretert tartalmaz, amivel a RAM-ba töltött felhasználói programokat képes futtatni.
A 8051-es mikrovezérlő tananyag sok közép- és felsőfokú tanintézményben.
Elnevezési konvenciók
[szerkesztés]Az Intel az eredeti, alapkiépítésű eszközt a 8051 jelöléssel látta el: ez a 4 KiB ROM-mal és 128 bájt RAM-mal felszerelt eszközt jelenti. A 87-tel kezdődő számú változatokban van egy felhasználó által programozható EPROM memória, amely néha ultraibolya fénnyel törölhető. A harmadik karakterben C betűvel jelölt változatok CMOS technológiával készültek. A 8031 és 8032 ROM nélküli változatok, 128 és 256 bájt RAM-mal. Az utolsó számjegy mutathatja a memóriaméretet, például 8052 8 KiB ROM-mal, 87C54 16 KiB EPROM-mal, és 87C58 32 KiB EPROM-mal rendelkezik, és mindegyik 256 bájt RAM memóriával.
Memóriaszerkezet
[szerkesztés]Az MCS-51-nek négy különböző típusú memóriája van – belső RAM, speciális funkcióregiszterek, programmemória, és külső adatmemória.
A 8051-et úgy tervezték, hogy megfeleljen a szigorú Harvard-architektúrának: csak a programmemóriából lehívott kódot képes végrehajtani, és utasításkészletében nincs olyan utasítás, ami lehetővé tenné a programmemóriába való írást.
A legtöbb 8051 rendszer betartja ezt a korlátozást, tehát az ilyen rendszerek nem képesek új programokat betölteni és végrehajtani (a programokat más eszközzel helyezik a programmemóriába). A szigorú Harvard architektúrának megvan az az előnye, hogy immunissá teszi ezeket a rendszereket a rosszindulatú programok (malware) legtöbb formájával szemben, kivéve azokat, amelyek újrahasznosítják a már meglévő programkódot.[6]
Egyes 8051 rendszerekben speciális „kettős leképzésű” RAM használható (vagy ilyen típusú RAM-mal bővíthetők), amivel ezek a rendszerek jobban közelítenek a Neumann-architektúra lehetőségeihez, azzal, hogy ekkor a külső ROM és RAM közösen használja az adat- és címsíneket, és a leképezés úgy konfigurálható, hogy lehetővé tegye az adat-írási/olvasási hozzáférést a programmemóriához. Ez a részleges Neumann-architektúra lehetővé teszi, hogy a 8051-en futó rendszerbetöltő program (boot loader) új natív kódot írhasson a RAM-ba majd végrehajtsa azt. Ezzel gyorsabb (inkrementális és interaktív) programfejlesztési ciklusok érhetők el, mint a szigorú Harvard-alapú rendszerekben.[7][8]
Belső RAM
[szerkesztés]A belső RAM (IRAM, internal RAM, belső adatmemória) címtartománya 8 bites, tehát maximális mérete 256 bájt (memóriaegység), ami a 0x00-tól 0xFF-ig terjedő címeken érhető el. Az IRAM 0x00-tól 0x7F-ig terjedő 128 bájtos szakasza közvetlenül hozzáférhető. Ez a 128 bájtos RAM-terület a 8051-es család mindegyik tagjában megtalálható. A 8052-ben az IRAM-ot a 0x80-tól 0xFF-ig címezhető résszel bővítették, ami indirekt módon érhető el (a cím az R0-ba vagy R1-be tölthető és a memória címzése az @R0 vagy @R1 szintaxissal történhet). Ugyanebben a címtartományban helyezkednek el a speciális funkcióregiszterek, amik direkt címzéssel érhetők el. A legtöbb 8051 klónban szintén teljes 256 bájtos IRAM van.
A memória 0x00-tól 0x1F-ig terjedő 32 bájtja megegyezik a négy regiszterbank bájtjaival (a regiszterbankok a memóriába vannak leképezve). Minden regiszterbank 8 egybájtos regisztert tartalmaz, ezeket R0–R7 jelöli. Egyszerre egy regiszterbank lehet aktív, a programállapotszó 2 bitje jelöli ki az aktív bankot, amelynek regisztereit használhatják a programok.
Az IRAM 0x20–0x2F tárcímeken elérhető 16 bájtja, összesen 128 bit, bitenként címezhető.
Speciális regiszterek
[szerkesztés]A speciális funkcióregiszterek (SFR) ugyanabban a címtérben találhatók, mint az IRAM, a 0x80-tól 0xFF-ig terjedő címeken, és közvetlenül hozzáférhetőek ugyanazokat az utasításokat használva, amiket az IRAM alsó feléhez. Ezek a regiszterek nem elérhetők indirekt módon az @R0-en vagy @R1-en keresztül; az indirekt/közvetett hozzáférés ezekhez a címekhez az @IRAM második felére mutat.
Az SFR-ek közül 16 (amelyek címe a 8 többszöröse) szintén bitenként címezhető.
Programmemória
[szerkesztés]A programmemória (IRAM és XRAM, avagy ritkábban PMEM) max. 64 KiB méretű csak olvasható memória. Különálló címtartományban helyezkedik el, címei szintén a 0-tól kezdődnek. Ez a memória lehet csipre épített vagy csipen kívüli, konkrét csipmodelltől függően. A programmemória csak olvasható, bár a 8051 néhány változata lapkára integrált flash memóriát használ és lehetőséget ad a memória újraírásához, rendszeren belül, vagy egyes modellekben alkalmazáson belül.
A programmemória főleg a programkód tárolására szolgál, de emellett lehetőség van csak-olvasható adatok tárolása is, ennek egyik példája a programmemóriában elhelyezett keresőtáblázat: ennek elemei a MOVC A, @A+PC
vagy MOVC A, @A+DPTR
utasításokkal nyerhetők ki. A cím a 8 bites akkumulátor és egy 16 bites regiszter összege (PC vagy DPTR).
Különleges ugró és hívási utasításokkal (AJMP
és ACALL
) a programmemória 2 KiB-os szegmensein belüli címekre lehet ugrani vagy szubrutinokat hívni. Ezek az utasítások csak 2 bájtosak, míg a nem korlátos ugró és szubrutinhívó utasítások 3 bájtosak.[9]
Külső adatmemória
[szerkesztés]Egy harmadik memóriaterület a külső adatmemória (XRAM): ez szintén a 0 címen kezdődik, címtartománya 16 bites, tehát 64 KiB méretű lehet. Ez a terület lehet csipre épített vagy csipen kívüli. A processzorban a memóriaterületeket speciális utasításokkal és címzési módokkal különítik el, így van ez ennél a területnél is: eléréséhez a MOVX
(Move eXternal, külső mozgatás) utasítás szolgál. A 8051 több változata tartalmazza a szokásos 256 bájt IRAM-ot és külön néhány KiB XRAM-ot a csipen.
Az XRAM első 256 bájtja a MOVX A,@R0
, MOVX A,@R1
, MOVX @R0,A
és MOVX @R1,A
utasításokkal érhető el. A teljes 64 KiB elérhető a MOVX A,@DPTR
és MOVX @DPTR,A
utasításokkal.
A regiszterek
[szerkesztés]A 8051 regiszterei a memóriában is elérhetőek (négy példányban, regiszterbankokba szervezve), kivéve a 16 bites programszámláló PC regisztert, amely a következő végrehajtandó utasítás címét határozza meg. A relatív elágazási utasítások 8 bites előjeles eltolást alkalmaznak, ami hozzáadódik a PC-hez.
A nyolc R0–R7 általános célú regiszter elérhető a többinél 1 bájttal rövidebb utasításokkal. Ezek az IRAM-ba vannak leképezve a 0x00 és 0x1F címek közé. Csak ez a 8 bájtos tartomány használható a PSW-ben a két bankváltó bit által meghatározott bankra.
A 8051 néhány, a speciális funkcióregiszterek területére leképzett regisztere (a felsorolás nem teljes):
- (0x81) veremmutató, SP (stack pointer). 8 bites regiszter, a szubrutinhívások és visszatérési utasítások használják. A veremterület felfelé növekszik: az SP növekszik a verembe írás (push) előtt, és csökken a veremből való kiolvasás után.
- (0x82–83) adatmutató, DP (data pointer). 16 bites regiszter, a PMEM és XRAM elérésére szolgál.
- (0xD0) program állapotszó, PSW. Ez fontos állapotjelző biteket tartalmaz:
- PSW.0: P párosság/paritás. Az akkumulátor paritását mutatja (az A akkumulátor bitjeinek összege modulo 2).
- PSW.1: UD felhasználó által definiált jelzőbit. Általános szoftveres célokra, a hardver másra nem használja.
- PSW.2: OV túlcsordulás bit. Értéke 1, ha az összeadás előjeles túlcsordulást produkál.
- PSW.3: RS0 (register select 0): regiszterbank-kiválasztás 0. bit. A regiszterbank-szám alacsony helyiértékű bitje. 1 a 0x08 vagy 0x18 című bank kijelölésekor.
- PSW.4: RS1 (register select 1): regiszterbank-kiválasztás 1. bit. A regiszterbank-szám magas helyiértékű bitje. 1 a 0x10 vagy 0x18 című bank kijelölésekor.
- PSW.5: F0 (flag 0): jelzőbit, általános szoftveres célokra, a hardver nem használja.
- PSW.6: AC segédátvitel/félátvitel jelzőbit. Beállítva, mikor az összeadás átvitelt képez a 3. bitről a 4. bitre, BCD műveleteknél hasznos.
- PSW.7: C átvitelbit. Gyakran általános regiszterként használják bitműveletekhez, vagy „Boole-akkumulátorként” logikai műveletekben.
- (0xE0) A akkumulátor. A legtöbb utasításban előfordul, a műveletek eredménye ebben képződik.
- (0xF0) B regiszter. Az akkumulátor kiterjesztéseként használják a szorzó és osztó utasítások.
256 egyedi bit közvetlenül címezhető, a 0x20-tól 0x2F-ig 16 IRAM tárhelyen és a 0x80, 0x88, 0x90, ..., 0xF8 számú 16 speciális funkcióregiszterben. Ezek bármely bitje közvetlenül használható különböző logikai műveletekben és feltételes elágazási utasításokban.
Megjegyzendő, hogy a PSW nem tartalmazza az általában megszokott N (negatív) és Z (nulla) jelzőbiteket. Az akkumulátor azonban egy bitenként címezhető SFR, ezért a legmagasabb helyiértékű bitje közvetlenül tesztelhető, pl. elágazásoknál, és van elágazási utasítás az akkumulátor nulla állapota szerint. A processzornak van kétoperandusú „összehasonlítás és ugrás” művelete is.
Utasításkészlet
[szerkesztés]Az utasítások mind 1, 2 vagy 3 bájtosak, az első bájt a műveleti kód (opkód), ezt követi 1 vagy 2 bájtnyi operandus. A 8051-es processzorának 111 utasítása van, ezekből 49 egybájtos, 45 kétbájtos és 17 három bájtos hosszúságú. Az egybájtos utasítások nagy része a 16 alapvető ALU utasításhoz van rendelve. Egy operandus rugalmas, míg a másodikat (ha van) a művelet határozza meg: ez lehet az akkumulátor, egy közvetlen állandó, vagy egy RAM cím. A műveleti kód legmagasabb helyiértékű 4 bitje (nibble) határozza meg a műveletet, a legalacsonyabb helyiértékű nibble (félbájt) a következő címzési módok közül határoz meg egyet a rugalmas operandus számára:
- x8–xF: regiszter közvetlen/direkt, R0–R7
- x6–x7: regiszter indirekt/közvetett, @R0 vagy @R1
- x5: memória közvetlen/direkt, egy következő bájt egy IRAM vagy SFR tárhelyet határoz meg
- x4: közvetlen, egy következő bájt egy 8 bites állandót határoz meg. Bizonyos esetekben, mikor a közvetlen operandus nem értelmezhető, ez az akkumulátor tartalma.
Az utasítások az alábbiak. Az utasításokkal általában nem használható minden címzési mód; például a közvetlen mód nem használható, ha jelen van a rugalmas operandus. Az utasítások mnemonkjai a cél, forrás operandus-sorrendet követik.
- 0y: INC operandus: A megadott operandus növelése 1-gyel. A 04 opkód egy "INC A" utasítás.
- 1y: DEC operandus: A megadott operandus csökkentése 1-gyel. A 14 opkód egy "DEC A" utasítás.
- 2y: ADD A,operandus: Hozzáadja a operandust az A akkumulátorhoz.
- 3y: ADDC A,operandus: Hozzáadja a operandust és a C bitet az akkumulátorhoz. A 23 opkód egy "ADDC A,A" utasítás, amely "RLC A" utasításként is írható.
- 4y: ORL A,operandus: Logikai VAGY művelet az operandussal, az eredmény az A regiszterbe kerül. A 43 opkód egy "ORL cím,#adat utasítás.
- 5y: ANL A,operandus: Logikai ÉS művelet az operandussal, az eredmény az A regiszterbe kerül. Az 53 opkód egy "ANL cím,#adat utasítás.
- 6y: XRL A,operandus: Logikai kizáró-vagy művelet az operandussal, az eredmény az A regiszterbe kerül. A 63 opkód egy "XRL cím,#adat utasítás.
- 7y: MOV operandus,#adat: Közvetlen adat beírása az operandusba. A 74 opkód egy "MOV A,#adat" utasítás.
- 8y: MOV cím,operandus: Adatmozgatás egy IRAM tárhelyre vagy SFR regiszterbe. A 84 opkód nem használt; helyette a 75-ös kód használatos.
- 9y: SUBB A,operandus: Kivonja az operandus tartalmát az akkumulátorból, áthozattal (kivonáskor keletkező átvitellel). Megjegyezzük, hogy nincs kivonás átvitel nélkül (kivonásnál borrow).
- Ay: MOV operandus,cím: Adatmozgatás egy IRAM tárhelyről vagy SFR regiszterből. Az A4, A5 opkódok nem használtak; az A5 helyett a 85-ös kódot használják.
- By: CJNE operandus,#adat,eltolás: Az operandus összehasonlítása a közvetlen adat-tal, és elágazás a PC+eltolás címre, ha nem egyenlő. A B4, B5 opkódok CJNE A,operandus,eltolás utasítást hajtanak végre, közvetlen memória és közvetlen operandusokkal. „Összehasonlítás és ugrás ha egyenlő” utasítás nincs.
- Cy: XCH A,operandus: Felcseréli az akkumulátor és az operandust. A C4 opkód nem használt.
- Dy: DJNZ operandus,eltolás: Csökkenti az operandust, és elágazás a PC+eltolás címre, ha az eredmény nem nulla. A D4, D6, D7 opkódok nem használtak.
- Ey: MOV A,operandus: Az operandus által meghatározott cím tartalmát az akkumulátorba írja. Az E4 opkód nem használt; helyette a 74 szerepel.
- Fy: MOV operandus,A: Az akkumulátor tartalmát az operandus által meghatározott címre írja. Az F4 opkód nem használt.
Csak az ADD, ADDC és SUBB utasítások állítják a PSW jelzőbitjeit, az INC, DEC, és logikai utasítások nem. A CJNE utasítások csak a C bitet változtatják, a két összehasonlított értéktől függően (ha az első operandus kisebb, akkor CY = 1, egyébként 0).
64 kód az x0–x3 szakaszban és a fenti tartományból kimaradt néhány opkód más utasítások kódolására szolgál, korlátozottabb operandus-meghatározási lehetőségekkel:
Opkód | x0 | x1 | x2 | x3 | x4 |
---|---|---|---|---|---|
0y | NOP | AJMP page0 | LJMP addr16 | RR A (forgatás jobbra) | INC A |
1y | JBC bit,eltolás | ACALL page0 | LCALL addr16 | RRC A | DEC A |
2y | JB bit,eltolás | AJMP page1 | RET | RL A (forgatás balra) | (ADD A,#adat) |
3y | JNB bit,eltolás | ACALL page1 | RETI | RLC A | (ADDC A,#adat) |
4y | JC eltolás | AJMP page2 | ORL cím,A | ORL cím,#adat | (ORL A,#adat) |
5y | JNC eltolás | ACALL page2 | ANL cím,A | ANL cím,#adat | (ANL A,#adat) |
6y | JZ eltolás | AJMP page3 | XRL cím,A | XRL cím,#adat | (XRL A,#adat) |
7y | JNZ eltolás | ACALL page3 | ORL C,bit | JMP @A+DPTR | MOV A,#adat |
8y | SJMP eltolás | AJMP page4 | ANL C,bit | MOVC A,@A+PC | DIV AB |
9y | MOV DPTR, #imm16 | ACALL page4 | MOV bit,C | MOVC A,@A+DPTR | (SUBB A,#adat) |
Ay | ORL C,/bit | AJMP page5 | MOV C,bit | INC DPTR | MUL AB |
By | ANL C,/bit | ACALL page5 | CPL bit | CPL C | CJNE A,#adat,eltolás |
Cy | PUSH cím | AJMP page6 | CLR bit | CLR C | SWAP A |
Dy | POP cím | ACALL page6 | SETB bit | SETB C | DA A (decimális kiigazítás) |
Ey | MOVX A,@DPTR | AJMP page7 | MOVX A,@R0 | MOVX A,@R1 | CLR A |
Fy | MOVX @DPTR,A | ACALL page7 | MOVX @R0,A | MOVX @R1,A | CPL A |
A5 | B5 | D6 | D7 | ||
Egyéb | (nem használt) | CJNE A,cím,eltolás | XCHD A,@R0 | XCHD A,@R1 |
Az AJMP/ACALL opkódok az opkód bájtjának három legmagasabb helyiértékű bitjét kombinálják a következő bájttal, így meghatároznak egy 11 bites célcímet. Nagyobb címekhez az LJMP és LCALL utasítások használhatók, ezekben a célcím 16 bites.
A 8051 népszerűségének egyik oka egybites műveleteinek sokasága. A biteket mindig abszolút címekkel lehet címezni; ezeknél nincs regiszter-indirekt vagy indexelt címzés. A bitműveletek a következők:
- SETB bit, CLR bit, CPL bit: beállítja, törli vagy ellenkezőjére változtatja a kijelölt bitet
- JB bit,eltolás: ugrás, ha bit beállítva
- JNB bit,eltolás: ugrás, ha bit törölt
- JBC bit,eltolás: ugrás, ha bit beállítva és bit törlése
- MOV C,bit, MOV bit,C: a kijelölt bitet a C átvitelbitbe írja, vagy fordítva, a C bitet a kijelölt bitbe írja
- ORL C,bit, ORL C,/bit: VAGY művelet a bittel (vagy komplemensével), az eredmény a C átvitelbitbe kerül
- ANL C,bit, ANL C,/bit: ÉS művelet a bittel (vagy komplemensével), az eredmény a C átvitelbitbe kerül
A legtöbb utasítás egyik operandusa az A akkumulátor vagy egy közvetlen érték, lehetséges adatmásolás közvetlenül két belső RAM tárhely között: a MOV utasításnak van ilyen címzése.
Programozás
[szerkesztés]Sok magas szintű programozási nyelv fordítóprogramja készült el a 8051-es családhoz. Több C fordító is használható ezek programozásához, legtöbbjük lehetővé teszi a programozó számára a különböző változók tárolási helyének meghatározását a hat memóriatípusban, és hozzáférést biztosítanak a 8051 egyedi hardverfunkcióihoz mint például a regiszterbankok és bitműveleti utasítások. A C fordítók között léteznek ingyenes és kereskedelmi változatok is.[10] A Small Device C Compiler (SDCC) egy népszerű nyílt forráskódú C compiler/fordítóprogram.[11] További magas szintű programozási nyelvek is elérhetők, így C++, Forth,[7][8][12][13] BASIC, Object Pascal, Pascal, PL/M programozási nyelv és Modula-2 szintén rendelkezésre áll a 8051-eshez, de a csipet leginkább C és assembly nyelven programozzák.
Mivel az IRAM, XRAM, és (a csak olvasható) PMEM kezdőcíme egyaránt 0, a 8051 architektúrához készült C fordítóprogramok fordító-specifikus pragma utasításokkal vagy más kiterjesztésekkel támogatják az adatok tárolási helyének meghatározását (azaz állandókat a PMEM-ben vagy gyors hozzáférést igénylő változókat az IRAM-ban). Az adatok a három memóriaterület egyikén helyezkedhetnek el, ezért valamilyen mechanizmussal meg kell határozni, hogy egy memóriamutató melyik memóriaterületre vonatkozik. Ez elérhető akár a mutatótípus olyan módosításával, hogy az a memóriaterületet is magában foglalja, vagy metaadatok tárolásával a mutató mellett.
Kapcsolódó processzorok
[szerkesztés]A 8051 elődjét, a 8048-as vezérlőt, az IBM PC billentyűzetében használták, amelyben feladata a billentyűlenyomások konvertálása soros adatfolyammá és ennek továbbítása a központi egység felé. A 8048 és származékai még mindig használatban vannak különféle billentyűzetekben.[14]
A 8031-es az eredeti Intel 8051-es redukált verziója: ebben nincs belső programmemória (csak olvasható memória (ROM)). Külső ROM szükséges hozzá, amely a 8031 által végrehajtandó programot tartalmazza. A 8031-es csipek gyakran olyan 8051-esek, amelyben a belső ROM le van tiltva az EA bemenet alapállásában. Ennek több oka lehet, például hibás kód a 8051 ROM-jában, vagy egyszerűen a 8051-esek túlkínálata és hiány a 8031-es csipből – a gyártási költségek kisebbek, ha kettő helyett csak egy terméket kell gyártani, esetleges kisebb módosításokkal.
A 8052 az eredeti 8051 egy továbbfejlesztett változata, amelyben a belső RAM 256 bájt (az elődben található 128 bájt helyett), 4 KiB helyett 8 KiB ROM, és egy harmadik 16 bites időzítő is helyet kapott. A 8032 ugyanezekkel a jellemzőkel rendelkezik, és ebből is hiányzik a belső ROM programmemória. A legtöbb modern 8051-kompatibilis mikrovezérlő szintén rendelkezik ezekkel a jellemzőkkel.
Az Intel 2007 márciusában megszüntette MCS-51-es termékvonalát;[15][16] más gyártók azonban tovább gyártják, rengeteg továbbfejlesztett 8051 termék vagy „szilícium szellemi tulajdon” jelenik meg rendszeresen.
A 80C537 és 80C517 CMOS változatokat az autóiparban történő felhasználásra tervezték. Továbbfejlesztett új perifériákkal és kiterjesztett aritmetikai utasításokkal rendelkeznek. A 80C517-es hibatűrő mechanizmusokkal, analóg jelfeldolgozó eszközökkel és időzítő képességekkel van ellátva, 8 KiB lapkára integrált programmemóriát tartalmaz.
További jellemzői:
- 256 bájt lapkára integrált RAM
- 256 közvetlenül címezhető bit
- a külső program- és adatmemória 64 KiB-ig bővíthető
- 8 bites A/D átalakító 12 multiplexelt bemenettel
- aritmetikai egység, osztás, szorzás, léptetés/eltolás és normalizáló műveletekkel
- nyolc adatmutató használható a program- és külső adatmemória indirekt címzéséhez
- kiterjesztett felügyelő-időzítő (watchdog) eszközök
- kilenc port
- két full-duplex soros interfész, saját soros bitsebesség (baud rate) generátorokkal
- négy prioritási szintű megszakítás rendszer, 14 megszakítási vektor
- három energiatakarékos üzemmód
A származékok szállítói
[szerkesztés]A MCS-51 kompatibilis processzorok jelenlegi szállítói között több mint 20 független gyártó található, közöttük az Atmel, Infineon Technologies (korábban Siemens AG), Maxim Integrated Products (Dallas Semiconductor leányvállalatán keresztül), NXP (holland félvezetőgyártó vállalat, korábban Philips Semiconductor), Microchip Technology, Nuvoton (korábban Winbond), ST Microelectronics, Silicon Laboratories (korábban Cygnal), Texas Instruments, Ramtron International, Silicon Storage Technology, Cypress Semiconductor és Analog Devices cégekkel.[17]
Az MCS-51-essel kompatibilis IC-ket vagy IP-ket (IP: intellectual property, szintetizálható, programozható logikai eszközökkel megvalósítható magok tervei) az alábbi cégek fejlesztenek:
- Acer Labs
- Actel
- Aeroflex UTMC
- Altium
- Analog Devices
- ASIX
- Atmel
- AustriaMicroSystems
- AXSEM (ON Semiconductor)
- California Eastern Laboratories (CEL)
- Cast
- CML Microcircuits
- CORERIVER
- Cybernetic Micro Systems
- CybraTech
- Cypress Semiconductor
- Daewoo
- Dallas Semiconductor
- Digital Core Design
- Dolphin Integration
- Domosys
- easyplug
- EnOcean
- Evatronix
- Fairchild Semiconductor (ON Semiconductor)
- Genesis Microchip
- Genesys Logic
- Goal Semiconductor
- Handshake Solutions
- Honeywell
- Hynix Semiconductor
- Infineon (alapította a Siemens)
- InnovASIC
- Intel
- ISSI
- Lapis Semiconductor (volt OKI Semiconductor)
- Maxim (Dallas Semiconductor)
- Megawin
- Mentor Graphics
- Micronas
- Microsemi
- MXIC (Macronix)
- Myson Technology
- Nordic Semiconductor
- Nuvoton (Winbond)
- NXP (founded by Philips)
- Oregano Systems
- Palmchip
- Prolific
- Radio Pulse
- Ramtron
- RDC Semiconductor
- Sanyo Semiconductor (ON Semiconductor)
- Sharp
- Sigma Designs
- Silicon Laboratories (Cygnal)
- Siliconians
- SMSC
- SST
- STMicroelectronics
- SyncMOS
- Synopsys
- Syntek Semiconductor
- Tekmos
- Teridian Semiconductor
- Texas Instruments
- Tezzaron Semiconductor
- Triscend
- Vitesse
- Yitran
- Zensys
- Zilog
- Zylogic Semiconductor
Szellemi tulajdonként való felhasználás
[szerkesztés]A 8051-esek a mai napig beszerezhetők egyedi alkatrészek formájában, de egyre inkább „szilícium szellemi tulajdonú” magok formájában terjednek, magas szintű nyelvi forráskódban (VHDL vagy Verilog) vagy FPGA kötéslistákként érhetők el. Ezek a magok tipikusan beágyazott rendszerekbe integrált eszközök, különféle termékekben – USB flash drive-tól kezdve a mosógépekig – felhasznált komplex vezeték nélküli kommunikációs egylapkás rendszerek (system on a chip). A tervezők előszeretettel alkalmazzák a 8051-es szilícium IP magokat, a 32 bites eszközöknél kisebb méretük és alacsonyabb fogyasztásuk miatt (konkurens 32 bites processzor alapú családok például az ARM Cortex-M sorozat vagy a MIPS architektúrájú BA22 eszközök).
A modern 8051 magok gyorsabbak, mint a korábbi tokozott változatok. A tervezők továbbfejlesztésekkel és javításokkal növelték a 8051 teljesítményét, míg megtartották a kompatibilitást az eredeti MCS 51 utasításkészlettel. Az eredeti Intel 8051 futási sebessége 12 órajelciklus gépi ciklusonként és a legtöbb utasítás egy vagy két gépi ciklus alatt hajtódik végre. Tipikus maximális órajel-frekvencia a 12 MHz, ami azt jelenti, hogy ezek a régi 8051-esek egymillió egyciklusos utasítást vagy 500 000 kétciklusos utasítást képesek végrehajtani másodpercenként. Ezzel szemben a továbbfejlesztett 8051-es szilícium IP magok már egy órajelciklus/gépi ciklus sebességen futnak, és órajelfrekvenciájuk elérheti a 450 MHz-et is. Ilyen kiépítésben egy modern 8051-kompatibilis processzor 450 millió utasítást hajthat végre másodpercenként.
8051-alapú MCU
[szerkesztés]- Atmel: AT89C51, AT89S51, AT83C5134
- Infineon: Infineon XC800
- Mentor Graphics: M8051ew
- NXP: NXP700 és NXP900 sorozat
- Silicon Labs: C8051 sorozat
- Texas Instruments CC111x, CC24xx és CC25xx RF SoC családok
Digitális jelfeldolgozó (DSP) változatok
[szerkesztés]Több változatot 16 bites digitális jelprocesszorral (DSP) egészítettek ki, amelyek például MP3 vagy Ogg kódolás/dekódolás céljaira használhatók. Ezek elérhetik a 675 millió másodpercenkénti utasítás (MIPS) sebességet,[18] integrált USB 2.0 interfésszel rendelkezhetnek,[19] és szellemi tulajdonként[20] elérhetők.
Továbbfejlesztett 8 bites, binárisan kompatibilis mikrovezérlő: az MCS-151 család
[szerkesztés]1996-ban az Intel bejelentette az MCS-151 családot, ami egy legfeljebb 6-szor gyorsabb változat.[2] A 8051-essel binárisan és utasításkészlet szintjén teljesen kompatibilis, de ebben már futószalagos CPU működik, belső kódsíne 16 bites és sebesség hatszoros. Az MCS-151 családot szintén megszüntette az Intel, de széles körben elérhető, binárisan kompatibilis és részben továbbfejlesztett változatokban.
8/16/32 bites binárisan kompatibilis mikrovezérlő: az MCS-251 család
[szerkesztés]Az Intel 80251-es eszköze egy 8/16/32 bites mikrovezérlő, 16 MiB (24 bites) címtartománnyal és 6-szor gyorsabb utasításciklussal, amelyet 1996-ban mutattak be.[2][21] 8 bites 8051-esként is működhet, 24 bites lineáris címtartományt kezel, egy 8 bites ALU található benne, 8 bites és 16 bites utasításkészlete mellett korlátozott 32 bites készlettel is rendelkezik, 16 8 bites regisztere, 16 16 bites regisztere (8 teljesen 16 bites regiszter, amelyek nincsenek átfedésben a 8 bitesekkel, és 8 2x8 bites regisztert összefogó 16 bites) és 10 32 bites regisztere van.[22]
Kiterjesztett utasításokkal rendelkezik[23] – lásd még a programozói kézikönyvet[24] –, későbbi változatai nagyobb teljesítményűek,[25] és ezeket is IP magok formájában forgalmazzák.[26] Processzora 3 fokozatú futószalagos. Az MCS-251 családot az Intel beszüntette, de továbbra is beszerezhető más gyártóktól.
Kapcsolódó szócikkek
[szerkesztés]Jegyzetek
[szerkesztés]- ↑ John Wharton: An Introduction to the Intel MCS-51 Single-Chip Microcomputer Family, Application Note AP-69, May 1980, Intel Corporation.
- ↑ a b c Intel MCS 151 and MCS 251 Microcontrollers
- ↑ John Wharton: Using the Intel MCS-51 Boolean Processing Capabilities Archiválva 2016. március 3-i dátummal a Wayback Machine-ben Application Note AP-70, May 1980, Intel Corporation.
- ↑ 8051 Tutorial: Interrupts. [2012. december 28-i dátummal az eredetiből archiválva]. (Hozzáférés: 2016. november 13.)
- ↑ 8051 SOFTWARE DEVELOPMENT TOOLS (angol nyelven). Tasking, 2016. „The TASKING 8051 toolset provides ...”
- ↑ Francillon, Aurélien (2008. január 1.). „Code Injection Attacks on Harvard-architecture Devices”. Proceedings of the 15th ACM Conference on Computer and Communications Security, New York, NY, USA, 15–26. o, Kiadó: ACM. DOI:10.1145/1455770.1455775.
- ↑ a b Bradford J. Rodriguez. "CamelForth/8051".
- ↑ a b Brad Rodriguez. "Moving Forth Part 7: CamelForth for the 8051".
- ↑ ACALL is a 2-byte subroutine calling instruction, it can access locations within the same 2 KiB segment of memory. The absolute memory address is formed by the high 5 bit of the PC and the 11 bits defined by the instruction.
- ↑ Han-Way Huang. "Embedded System Design with C8051". p. 238.
- ↑ Lewin A. R. W. Edwards. "So, You Wanna be an Embedded Engineer: The Guide to Embedded Engineering, from Consultancy to the Corporate Ladder". 2006. p. 51.
- ↑ "8051 SwiftX Forth development" Archiválva 2015. szeptember 24-i dátummal a Wayback Machine-ben.
- ↑ "MPE VFX Forth 7 cross compilers" Archiválva 2014. október 23-i dátummal a Wayback Machine-ben.
- ↑ 2007-es kijelentés
- ↑ Intel bows out, discontinues MCS-51, 2006. május 29.
- ↑ MCS 51, MCS 251 and MCS 96 Microcontroller Product Lines, the Intel 186, Intel386 and Intel486 Processors Product Lines, and the i960 32 Bit RISC Processor, PCN 106013-01, Product Discontinuance, Reason for Revision: Add Key Milestone information and revise description of change. Intel, 2006. május 2.
- ↑ Archivált másolat. [2014. május 28-i dátummal az eredetiből archiválva]. (Hozzáférés: 2016. november 13.)
- ↑ TI Delivers new low-cost, high-performance audio DSP for Home and Car w/ 8051. [2016. november 13-i dátummal az eredetiből archiválva]. (Hozzáférés: 2016. november 13.)
- ↑ Atmel AT85C51SND3 Audio DSP Data Sheet with USB 2.0
- ↑ Integration of 8051 With DSP in Xilinx FPGA
- ↑ The 8051 microcontroller By Kenneth J Ayala Google books
- ↑ http://datasheets.chipdb.org/Intel/MCS51/DATASHTS/27262001.PDF
- ↑ Temic TSC80251 Architecture
- ↑ Atmel TSC80251 Programmers Guide. [2016. március 4-i dátummal az eredetiből archiválva]. (Hozzáférés: 2016. november 13.)
- ↑ DQ80251 32bit Microcontroller DCD
- ↑ R80251XC 32bit Microcontroller[halott link] Evatronix
Fordítás
[szerkesztés]Ez a szócikk részben vagy egészben az Intel MCS-51 című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.
Források
[szerkesztés]További információk
[szerkesztés]- Complete tutorial for 8051 microcontrollers
- the source website for tutorials and simulator for 8051
- Basic 8051 Interfacing Circuits
- Open source VHDL 8051 implementation (Oregano Systems)
Kapcsolódó olvasmányok
[szerkesztés]- Könyvek
- The 8051 Microcontroller: A Systems Approach (2012). ISBN 978-0-13-508044-3
- Schultz, Thomas. C and the 8051, 4th (2008). ISBN 978-0-9783995-0-4
- Steiner, Craig. The 8051/8052 Microcontroller: Architecture, Assembly Language, and Hardware Interfacing (2005). ISBN 978-1-58112-459-0
- 8051 Microcontrollers: Hardware, Software and Applications (2000). ISBN 978-0-340-67707-0
- Axelson, Jan. The Microcontroller Idea Book: Circuits, Programs, and Applications featuring the 8052-BASIC Microcontroller (1994). ISBN 978-0-9650819-0-0
- Payne, William. Embedded Controller FORTH for the 8051 Family. Boston: Academic Press [1990] (1990. december 19.). ISBN 978-0-12-547570-9
- Intel
- MCS-51 Microcontroller Family User's Manual; Intel; 1994; publication number 121517.
- MCS-51 Macro Assembler User's Guide; Intel; publication number 9800937.
- 8-Bit Embedded Controllers; Intel; 1991; publication number 270645-003.
- Microcontroller Handbook; Intel; 1984; publication number 210918-002.
- 8051 Microcontroller Preliminary Architectural Specification and Functional Description; Intel; 44 pages; 1980.