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

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  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)
 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
 két 16 bites címsín – 2 × 216 bájtot (2×) címezhet, a RAM-ban vagy a ROM-ban
 128 bájt lapkára integrált RAM (IRAM)
  lapkára integrált ROM, 16 bites () 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. 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
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 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  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 
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 
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.

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.

Belső RAM
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
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
A programmemória (IRAM és XRAM, avagy ritkábban PMEM) max.  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 -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.

Külső adatmemória
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  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 
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 
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:

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 
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. A Small Device C Compiler (SDCC) egy népszerű nyílt forráskódú C compiler/fordítóprogram. További magas szintű programozási nyelvek is elérhetők, így C++, Forth, 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 

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.

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.

Az 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; 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,  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 -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 
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.

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:

Szellemi tulajdonként való felhasználá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  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  utasítást hajthat végre másodpercenként.

8051-alapú MCU 
 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 
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, integrált USB 2.0 interfésszel rendelkezhetnek, és szellemi tulajdonként elérhetők.

Továbbfejlesztett 8 bites, binárisan kompatibilis mikrovezérlő: az MCS-151 család
1996-ban az Intel bejelentette az MCS-151 családot, ami egy legfeljebb 6-szor gyorsabb változat. 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 
Az Intel 80251-es eszköze egy 8/16/32 bites mikrovezérlő,  (24 bites) címtartománnyal és 6-szor gyorsabb utasításciklussal, amelyet 1996-ban mutattak be. 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.

Kiterjesztett utasításokkal rendelkezik – lásd még a programozói kézikönyvet –, későbbi változatai nagyobb teljesítményűek, és ezeket is IP magok formájában forgalmazzák. 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 
 SDK-51 System Design Kit
 DS80C390

Jegyzetek

Fordítás

Források

További információk 
 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 
Könyvek
 
 
 
 
 
 

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.

Intel mikroprocesszorok
8 bites mikroprocesszorok
Mikrovezérlők
Az Intel MCS-51 ( általánosan használt számjelölésselegy 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 Intelban . Az eredeti Intel gyártású csipek igen népszerűek voltak azas években és azes é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ául51 ) . 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 azban a továbbfejlesztettbites MCS-151 és a16/32 bites MCS-251 binárisan kompatibilis mikrovezérlő-családokban folytatódott . 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 Aarchitektúra sok funkciót biztosít ( CPU , RAM , ROM , I/O , megszakítási logika , időzítők , stb. ) egy tokon belül : bites aritmetikai-logikai egység ( ALU ) és akkumulátor, bites regiszterek ( egybites regiszter speciális adatmozgató utasításokkal ) , bites adatsín és bites címsín/programszámláló / adatmutató és a kapcsolódó11/16 bites műveletek ; mivel a gépi szó mérete alapvetően abit , ezért a mikrovezérlőt isbitesnek tekintjük logikai ( boolean ) processzor, utasítással : ennekbites akkumulátora , ( 4 , bitenként címezhetőbites ) regisztere és max.speci ális , bitenként címezhető RAM változója van ( fizikailagdb.bites bitenként címezhető tárhelyen ) szorzás , osztás és összehasonlítás utasítások gyorsan váltható , memóriába leképezett regiszterbank , egy bankbanregiszter gyors megszakítás opcionális regiszterbank-váltással megszakítás- és szálkezelés választható prioritással kétbites címsín –×bájtot ) címezhet , a RAM-ban vagy a ROM-ban bájt lapkára integrált RAM ( IRAM ) lapkára integrált ROM,bites ( ) címtartománnyal ( PMEM ) ; ez a változatokból hiányzik négybites kétirányú be-/kimeneti port , bitenként címezhető UART ( soros port ) kétbites számláló/ időzítő energiatakarékos üzemmód ( néhány származékban ) Amag 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-kal csökkenti kód méretét . 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 . Aes 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 aszá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, bites adatokat olvasva és írva különböző vermekből / vermekbe . A származékok jellemzői 2013-as állapot szerint több nagyobb csipgyártó még mindig fejleszt újabbes 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 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ő, vagybájt belső adatmemória RAM ( amelybőlbájt bitenként címezhető ) , max.bájt I/O terület , bájttólKiB-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 eredetimag futási sebességeó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 egyMHz-es órajelűesmillió egyciklusos utasítást képes végrehajtani másodpercenként , avagy kétciklusos utasítást másodpercenként . A továbbfejlesztett modernmagokban 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 aMHz-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 . Avá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 maszkprogramozottH-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 . Aes mikrovezérlő tananyag sok közép- és felsőfokú tanintézményben . Elnevezési konvenciók Az Intel az eredeti , alapkiépítésű eszközt ajelöléssel látta el : ez aKiB ROM-mal ésbájt RAM-mal felszerelt eszközt jelenti . Atel 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ésROM nélküli változatok,ésbájt RAM-mal . Az utolsó számjegy mutathatja a memóriaméretet , például8 KiB ROM-mal,54KiB EPROM-mal , és58KiB EPROM-mal rendelkezik , és mindegyikbájt RAM memóriával . Memóriaszerkezet 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 . Aet ú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öbbrendszer 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 . Egyesrendszerekben 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 aen 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 . Belső RAM A belső RAM ( IRAM , internal RAM , belső adatmemória ) címtartományabites , tehát maximális méretebájt ( memóriaegység ) , ami a00-tólFF-ig terjedő címeken érhető el . Az IRAM00-tól7F-ig terjedőbájtos szakasza közvetlenül hozzáférhető . Ez abájtos RAM-terület aes család mindegyik tagjában megtalálható . Aben az IRAM-ot a80-tólFF-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öbbklónban szintén teljesbájtos IRAM van . A memória00-tól1F-ig terjedőbájtja megegyezik a négy regiszterbank bájtjaival ( a regiszterbankok a memóriába vannak leképezve ) . Minden regiszterbankegybájtos regisztert tartalmaz , ezeket R0–R7 jelöli . Egyszerre egy regiszterbank lehet aktív , a programállapotszóbitje jelöli ki az aktív bankot , amelynek regisztereit használhatják a programok . Az IRAM20–0x2F tárcímeken elérhetőbájtja , összesenbit , bitenként címezhető . Speciális regiszterek A speciális funkcióregiszterek ( SFR) ugyanabban a címtérben találhatók , mint az IRAM , a80-tólFF-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( amelyek címe atöbbszöröse ) szintén bitenként címezhető . Programmemória A programmemória ( IRAM és XRAM , avagy ritkábban PMEM ) max. méretű csak olvasható memória . Különálló címtartományban helyezkedik el , címei szintén ató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 ané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 abites akkumulátor és egybites regiszter összege ( PC vagy DPTR) . Különleges ugró és hívási utasításokkal ( AJMP és ACALL ) a programmemória -os szegmensein belüli címekre lehet ugrani vagy szubrutinokat hívni . Ezek az utasítások csakbájtosak , míg a nem korlátos ugró és szubrutinhívó utasításokbájtosak . Külső adatmemória Egy harmadik memóriaterület a külső adatmemória ( XRAM ) : ez szintén acímen kezdődik , címtartományabites , tehát 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 . Atöbb változata tartalmazza a szokásosbájt IRAM-ot és külön néhány KiB XRAM-ot a csipen . Az XRAM elsőbájtja a MOVX A,@R0 , MOVX A,@R1 , MOVX @ R0,A és MOVX @ R1,A utasításokkal érhető el . A teljesKiB elérhető a MOVX A,@DPTR és MOVX @ DPTR,A utasításokkal . A regiszterek Aregiszterei a memóriában is elérhetőek ( négy példányban , regiszterbankokba szervezve ) , kivéve abites 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ásokbites 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élbájttal rövidebb utasításokkal . Ezek az IRAM-ba vannak leképezve a00 és1F címek közé . Csak ez abájtos tartomány használható a PSW-ben a két bankváltó bit által meghatározott bankra . Anéhány , a speciális funkcióregiszterek területére leképzett regisztere ( a felsorolás nem teljes ) : 81 ) veremmutató , SP ( stack pointer) .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 . 82–83 ) adatmutató , DP ( data pointer) .bites regiszter , a PMEM és XRAM elérésére szolgál . D0 ) 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 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 ha az összeadás előjeles túlcsordulást produkál . PSW.3 : RS0 ( register select regiszterbank-kiválasztás bit . A regiszterbank-szám alacsony helyiértékű bitje. a08 vagy18 című bank kijelölésekor . PSW.4 : RS1 ( register select regiszterbank-kiválasztás bit . A regiszterbank-szám magas helyiértékű bitje. a10 vagy18 című bank kijelölésekor . PSW.5 : F0 ( flag 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 bitről a 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 . E0 ) A akkumulátor . A legtöbb utasításban előfordul , a műveletek eredménye ebben képződik . F0 ) 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ő , a20-tól2F-igIRAM tárhelyen és a80,88,90,\...,F8 számú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 Az utasítások mindvagybájtosak , az első bájt a műveleti kód ( opkód ) , ezt követivagybájtnyi operandus . Aes processzoránakutasítása van , ezekbőlegybájtos, kétbájtos éshárom bájtos hosszúságú . Az egybájtos utasítások nagy része aalapvető 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ű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 egybites á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 . : INC operandus : A megadott operandus növelésegyel . Aopkód egy " INC A " utasítás . : DEC operandus : A megadott operandus csökkentésegyel . Aopkód egy " DEC A " utasítás . : ADD A,operandus : Hozzáadja a operandust az A akkumulátorhoz . : ADDC A,operandus : Hozzáadja a operandust és a C bitet az akkumulátorhoz . Aopkód egy " ADDC A,A " utasítás , amely " RLC A " utasításként is írható . : ORL A,operandus : Logikai VAGY művelet az operandussal , az eredmény az A regiszterbe kerül . Aopkód egy " ORL cím , # adat utasítás . : ANL A,operandus : Logikai ÉS művelet az operandussal , az eredmény az A regiszterbe kerül . Azopkód egy " ANL cím , #adat utasítás . : XRL A,operandus : Logikai kizáró-vagy művelet az operandussal , az eredmény az A regiszterbe kerül . Aopkód egy " XRL cím , # adat utasítás . : MOV operandus , # adat : Közvetlen adat beírása az operandusba . Aopkód egy " MOV A ,#adat " utasítás . : MOV cím, operandus : Adatmozgatás egy IRAM tárhelyre vagy SFR regiszterbe . Aopkód nem használt ; helyette aös kód használatos . : 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ö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 aszerepel . 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 = egyébként 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 : 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 egybites célcímet . Nagyobb címekhez az LJMP és LCALL utasítások használhatók , ezekben a célcímbites . Ané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 Sok magas szintű programozási nyelv fordítóprogramja készült el aes 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 aegyedi 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 . A Small Device C Compiler ( SDCC ) egy népszerű nyílt forráskódú C compiler/fordítóprogram . További magas szintű programozási nyelvek is elérhetők , így C++ , Forth, BASIC , Object Pascal , Pascal , PL/M programozási nyelv és Modula-2 szintén rendelkezésre áll aeshez , 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 aarchitektú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 Aelődjét , aas 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és származékai még mindig használatban vannak különféle billentyűzetekben . Aes az eredeti Inteles redukált verziója : ebben nincs belső programmemória ( csak olvasható memória ( ROM ) ) . Külső ROM szükséges hozzá , amely aáltal végrehajtandó programot tartalmazza . Aes csipek gyakran olyanesek , 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 aROM-jában , vagy egyszerűen aesek túlkínálata és hiány aes 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 . Azaz eredetiegy továbbfejlesztett változata , amelyben a belső RAMbájt ( az elődben találhatóbájt helyett) ,KiB helyettKiB ROM , és egy harmadikbites időzítő is helyet kapott . Augyanezekkel a jellemzőkel rendelkezik , és ebből is hiányzik a belső ROM programmemória . A legtöbb modernkompatibilis mikrovezérlő szintén rendelkezik ezekkel a jellemzőkkel . Az Intelmárciusában megszüntette MCS-51-es termékvonalát ; más gyártók azonban tovább gyártják , rengeteg továbbfejlesztetttermék vagy „ szilícium szellemi tulajdon” jelenik meg rendszeresen . A537 és517 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 . A517-es hibatűrő mechanizmusokkal , analóg jelfeldolgozó eszközökkel és időzítő képességekkel van ellátva , lapkára integrált programmemóriát tartalmaz . További jellemzői : bájt lapkára integrált RAM közvetlenül címezhető bit a külső program- és adatmemória -ig bővíthető bites A/D átalakító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, megszakítási vektor három energiatakarékos üzemmód A származékok szállítói A MCS-51 kompatibilis processzorok jelenlegi szállítói között több mintfü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 . 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 : Szellemi tulajdonként való felhasználás Aesek 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 aes szilícium IP magokat , abites eszközöknél kisebb méretük és alacsonyabb fogyasztásuk miatt ( konkurensbites processzor alapú családok például az ARM Cortex-M sorozat vagy a MIPS architektúrájú BA22 eszközök ) . A modernmagok gyorsabbak , mint a korábbi tokozott változatok . A tervezők továbbfejlesztésekkel és javításokkal növelték ateljesítményét , míg megtartották a kompatibilitást az eredeti MCSutasításkészlettel . Az eredeti Intelfutási sebességeó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 aMHz , ami azt jelenti , hogy ezek a régiesek egymillió egyciklusos utasítást vagy kétciklusos utasítást képesek végrehajtani másodpercenként . Ezzel szemben a továbbfejlesztettes szilícium IP magok már egy órajelciklus/ gépi ciklus sebességen futnak , és órajelfrekvenciájuk elérheti aMHz-et is . Ilyen kiépítésben egy modernkompatibilis processzor utasítást hajthat végre másodpercenként . 8051-alapú MCU 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 Több változatotbites 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 amillió másodpercenkénti utasítás ( MIPS ) sebességet , integrált USB0 interfésszel rendelkezhetnek , és szellemi tulajdonként elérhetők . Továbbfejlesztettbites , binárisan kompatibilis mikrovezérlő : az MCS-151 család 1996-ban az Intel bejelentette az MCS-151 családot , ami egy legfeljebbszor gyorsabb változat . Aessel binárisan és utasításkészlet szintjén teljesen kompatibilis , de ebben már futószalagos CPU működik , belső kódsínebites é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 Az Inteles eszköze egy16/32 bites mikrovezérlő , bites ) címtartománnyal ésszor gyorsabb utasításciklussal , amelyetban mutattak be.bitesesk ént is működhet, bites lineáris címtartományt kezel , egybites ALU található benne, bites ésbites utasításkészlete mellett korlátozottbites készlettel is rendelkezik,8 bites regisztere, 16 bites regisztereteljesenbites regiszter , amelyek nincsenek átfedésben abitesekkel , és2x8 bites regisztert összefogóbites ) és32 bites regisztere van . Kiterjesztett utasításokkal rendelkezik – lásd még a programozói kézikönyvet – , későbbi változatai nagyobb teljesítményűek , és ezeket is IP magok formájában forgalmazzák . Processzorafokozatú 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 SDK-51 System Design Kit DS80C390 Jegyzetek Fordítás Források További információk Complete tutorial formicrocontrollers the source website for tutorials and simulator for BasicInterfacing Circuits Open source VHDLimplementation ( Oregano Systems ) Kapcsolódó olvasmányok Könyvek Intel MCS-51 Microcontroller Family User's Manual ; Intel ; publication number MCS-51 Macro Assembler User's Guide ; Intel ; publication number Bit Embedded Controllers ; Intel ; publication number Microcontroller Handbook ; Intel ; publication number Microcontroller Preliminary Architectural Specification and Functional Description ; Intel;pages ; Intel mikroprocesszorok 8 bites mikroprocesszorok Mikrovezérlők