Intel MCS-51 este o serie de microcontrolere cu un singur cip, având o arhitectură Harvard, ce a fost dezvoltată de compania americană Intel în 1980 pentru folosirea în sisteme embedded (sisteme cu microprocesoare integrate). Versiunile originale ale Intel au fost populare în anii 1980 și la începutul anilor 1990, dar astăzi au fost înlocuite de o gamă vastă de dispozitive compatibile cu 8051 ce sunt mai rapide și/sau îmbunătățite din punct de vedere funcțional, fabricate de mai mult de 20 de producători independenți inclusiv: Atmel, Infineon Technologies (fostă Siemens AG), Maxim Integrated Products (prin intermediul filialei sale, Dallas Semiconductor), NXP (fostă Philips Semiconductor), Nuvoton (fostă Winbond), ST Microelectronics, Silicon Laboratories (fostă Cygnal), Texas Instruments și Cypress Semiconductor.
Familia originală MCS-51 a lui Intel a fost dezvoltată utilizând tehnologie NMOS, dar versiunile ulterioare, identificate prin litera C în numele lor (ex.: 80C51) foloseau tehnologie CMOS și necesitau mai puțină putere de alimentare decât predecesoarele lor cu NMOS. Acest lucru le-a făcut mai potrivite pentru dispozitivele cu baterii.
Caracteristici importante și aplicații Oferă multe funcții (CPU, RAM, ROM, I/O, logică de întreruperi, timer, etc.) într-un singur pachet; pentru variantele 8051, 8031 și 8751 diferențele apăreau la memoria internă program. UCP pe 8 biți la 12 MHz Capabilități de prelucrare booleană (operator pe 1 bit) 64 K spațiu de adrese (date și program) 128 baiți memorie internă de date 4 KB memorie internă program (ROM, none, EPROM) 32 linii de intrare/ieșire organizate în 4 porturi 2 timere/numărătoare pe 16 biți 1 port serial (full duplex UART) 5 surse de întrerupere (2 externe) pe 2 niveluri de priorități Pentru variantele 8052, 8032 și 8752: 256 baiți memorie date, 8 KB memorie program, 6 surse de întrerupere, 3 timere.
O caracteristică deosebit de utilă a microcontrolerului 8051 este includerea unui motor de procesare boolean care permite operațiilor logice booleene la nivel de bit să fie efectuate în mod direct și eficient cu ajutorul registrelor interne și RAM-ului. Această caracteristică a ajutat la cimentarea popularității 8051 în aplicațiile de control industrial. O altă caracteristică importantă este că are patru seturi de registre separate, care pot fi utilizate pentru a reduce foarte mult latența de întreruperi, comparativ cu metoda mai comună de stocare a contextului de întreruperi într-o stivă.
UART-urile MCS-51 fac simplu de utilizat chip-ul ca o interfață serială de comunicații. Pinii externi pot fi configurați să se conecteze la regiștrii interni într-o varietate de moduri, și timer-ele interne pot fi de asemenea utilizate, permițând comunicații pe serială într-o serie de moduri, atât sincrone și asincrone. Unele moduri permit comunicații fără componente externe. Un mod compatibil cu un mediu multi-punct de comunicații RS-485 este realizabil, dar puterea reală a 8051 este de compatibilitate cu protocoalele ad-hoc existente (de exemplu, atunci când se controlează dispozitivele de control serial).
O dată ce un UART, și un timer dacă este necesar, au fost configurate, programatorul are nevoie doar să scrie o simplă rutină de întreruperi pentru a reumple registrul de send (de trimitere) ori de câte ori ultimul bit este deplasat afară de către UART și/sau să golească întregul registru receive (de primire), să copieze datele în altă parte. Programul principal efectuează apoi citiri seriale și scrie doar prin citirea și scrierea a 8 biți de date în stivă.
Microcontrolerele bazate pe MCS-51 includ de obicei unul sau două UART-uri, două sau trei timere, 128 sau 256 biți de memorie internă de date RAM (dintre care 16 bytes sunt bit-adresabili), până la 128 bytes de I/O, de la 512 bytes până la 64KB de memorie internă program și uneori o cantitate de memorie de date RAM extinsă (ERAM) localizată în spațiul de date extern. Nucleul 8051 original rula 12 cicluri de ceas pe ciclu mașină, cu majoritatea instrucțiunilor executându-se în unul sau două cicluri mașină. Cu o frecvență de ceas de 12 MHz, 8051 putea astfel să execute un milion de instrucțiuni de un ciclu pe secundă sau 500 000 de instrucțiuni de două cicluri pe secundă. Nucleele 8051 îmbunătățite, ce sunt astăzi folosite, rulează șase, patru, două sau chiar un ceas pe ciclu mașină și au frecvențe de ceas de până la 100 MHz, fiind astfel capabile de un număr mult mai mare de instrucțiuni pe secundă.
Caracteristici comune incluse în microcontrolere moderne bazate pe 8051 includ built-in timere de reset cu detectare brown-out, oscilatoare on-chip, memorie program Flash ROM auto-programabilă, cod bootloader în ROM, spațiu de stocare a datelor EEPROM non-volatilă, I²C, SPI, și interfețe USB host, magistrale CAN sau LIN, generatoare PWM, comparatoare analogice, convertoare A/D și D/A, RTC-uri, contoare și timere suplimentare, facilități de debugging in-circuit, mai multe surse de întrerupere, și moduri suplimentare de economisire a energiei.
Arhitectura internă
Microcontrolerele din familia MCS-51 au o arhitectură internă bazată pe cea a microprocesoarelor de uz general. Diferențele față de microprocesoarele de uz general au pornit de la faptul că se dorea o unitate de procesare cât mai ieftină și care să fie folosită în sisteme de conducere. Microprocesoarele Intel 8080 și 8085 au o arhitectură orientată spre procesare a datelor de uz general. Pentru realizarea unui sistem de conducere, o unitate centrală cu microprocesor de uz general, nu poate fi folosită fără a face apel și la anumite circuite externe specializate. Astfel, pentru introducerea timpului în sistem este nevoie de un circuit digital numit timer, pentru achiziția datelor din exterior trebuie prevăzută o interfață paralelă (porturi), pentru comunicație între diverse module ale sistemului de conducere este nevoie de o interfață serială. Se obține în final un sistem destul de complex, cu o dimensiune mare și fiabilitate redusă determinată de numărul destul de mare de circuite digitale folosite. Microcontrolerele elimină aceste neajunsuri prin includerea pe același cip a acestor circuite specializate, ceea ce a condus la o arhitectură internă mai complexă. Astfel, au rezultat structuri de conducere mult mai simple și mai puternice.
Un microcontroler 8051 este organizat în jurul unei unități centrale similare cu un microprocesor de uz general. Resursele hardware on-chip care nu se regăsesc la microprocesoarele de uz general sunt: facilitatea de operare directă pe bit a unității aritmetico-logice (acumulator) datorită integrării unui procesor boolean; organizarea internă a unei stive de maxim 128KB; existența unui set de instrucțiuni mai elaborat; capabilitatea de calcul binar și zecimal; 4 porturi bidirecționale a câte 8 linii fiecare; 2 timere pe 16 biți; port serial de mare viteză cu mai multe moduri de lucru; structură de întreruperi cu două nivele de prioritate;
Microcontrolerele sunt denumite și "embedded microprocessors" tocmai datorită acestei organizări interne hardware. Scopul de a obține un circuit cât mai compact a determinat o altfel de abordare a conceptului de magistrală față de microprocesoarele de uz general. După cum se observă din figură, un microcontroler scoate în exterior o serie de linii denumite porturi care, în funcție de aplicație, pot avea dublă întrebuințare. Datorită acestei facilități, microcontrolerele pot folosi numai resursele integrate pe cip (stand-alone) în sistemele de conducere de nivel mediu, sau, acolo unde aplicația o cere, aceste resurse pot fi completate cu memorie și porturi externe. Astfel, se poate crește spațiul de memorie ROM și/sau RAM sau pot fi conectate dispozitive I/E suplimentare - circuite specializate din familia 8080/8085 (PPI 8255, USART 8251, PIT 8253 etc.). Pentru a realiza comunicarea între aceste extensii și microcontroler, este nevoie ca o parte din liniile de port să fie redirecționate în alte scopuri. De exemplu, adresa pe 16 biți pentru accesul la memoria externă se furnizează cu ajutorul porturilor P0 și P2 care acum joacă rolul de magistrală de adrese. Magistrala de date este obținută din liniile portului P0. Pentru a face deosebirea între adresă și date, liniile portului P0 sunt multiplexate în timp.
MCS-51 are patru tipuri distincte de memorie - RAM intern, registre de uz special, memorie program și memorie externă de date.
Memoria RAM internă (IRAM) este localizată de la adresa 0 la adresa 0xFF, având o capacitate de 256 octeți. IRAM-ul de la 0x00 la 0x7F (primii 128 octeți) poate fi accesat direct, iar biții de la 0x20 la 0x2F sunt de asemenea bit-adresabili. IRAM-ul de la 0x80 la 0xFF (următorii 128 de octeți) trebuie accesat indirect, folosind sintaxa @R0 sau @R1, cu adresa de acces încărcată în R0 sau R1.
Registrele de uz special (SFR) sunt localizate de la adresa 0x80 la 0xFF și sunt accesate direct folosind aceleași instrucțiuni ca pentru partea inferioară (low) a IRAM. O parte din registrele SFR sunt de asemenea bit-adresabile.
Memoria program (PMEM), deși mai puțin folosită decât IRAM sau XRAM, este localizată începând cu adresa 0. Poate fi on- sau off-chip, depinzând de tipul de chip folosit. Memoria program poate fi doar citită (read-only), deși anumite variante ale 8051 folosesc memorie flash on-chip și oferă o metodă de reprogramare a memoriei. Pe lângă stocarea codului, memoria program poate stoca și tabele de constante ce pot fi accesate prin MOVC A, @DPTR, folosind registrul de uz special @DPTR.
Memoria de date externă (XRAM) de asemenea începe la adresa 0. Poate fi on- sau off-chip; ceea ce o face "externă" este că trebuie accesată folosind instrucțiunea MOVX (Move eXternal). Multe variante ale 8051 includ standardul de 256 bytes de IRAM plus câțiva KB de XRAM pe chip. Dacă mai multă memorie XRAM este necesară unei aplicații, XRAM-ul intern poate fi dezactivat, iar toate instrucțiunile XRAM vor fi descărcate de pe magistrala externă.
Descrierea pinilor circuitului 8051
Circuitul standard realizat în capsulă DIL prezintă 40 pini. Dintre aceștia, doi pini sunt rezervați tensiunii de alimentare (+5V și masă).
Controlerul conține 4 porturi paralele de câte 8 biți fiecare, ce pot fi folosite pentru generarea și, respectiv, receptarea semnalelor digitale (notate P0, P1, P2, P3). în funcție de modul de lucru în care lucrează, aceste porturi se pot configura și pot avea mai multe situații de lucru. Astfel, dacă se lucrează cu memorie ROM externă, 2 dintre aceste porturi se constituie în linii ce formează magistralele de adrese și de date. Portul P0 generează, multiplexat în timp, partea cea mai puțin semnificativă a informației de adresă (A0-A7) și, respectiv, gestionează magistrala de date (D0- D7). Pentru formarea magistralei de adrese, va fi nevoie să se plaseze în exteriorul MCU-ului un circuit de tip latch (de exemplu 74HCT573), cu scopul de a memora informația de adresă. Acționarea acestui circuit se face utilizând semnalul ALE. Portul P2, în aceleași situații, generează octetul cel mai semnificativ al informației de adrese (A8-A15). Cele 16 linii de adrese astfel formate, permit adresarea a 64 KB memorie. De fapt, se pot adresa 64KB memorie de programe (ce conține instrucțiuni) și, respectiv, 64KB memorie de date, deci în total 128 KB. Notațiile liniilor porturilor sunt Pi.j, cu i = 0, .., 3, iar j = 0, ..., 7.
Atunci când formează magistrala de adrese și date, liniile portului P0 mai sunt notate AD0- AD7, iar liniile lui P2 au denumirea A8-A15. Când nu se lucrează cu magistralele externe, cele 2 porturi P0 și P2 se pot folosi ca porturi de tip paralel. În această situație se atrage atenția asupra faptului că liniile portului P0 sunt de tipul “open drain”, fiind necesară plasarea în exterior de rezistențe către sursa de alimentare, în vederea asigurării polarizării.