right|thumb|Intel P8051 mikrovezérlő thumb|Infineon gyártmányú SAB-C515-LN, a 8051 egyik változata
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 (bootloader) ú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).