Sunteți pe pagina 1din 15

Universitatea „Ștefan cel Mare” din Suceava

Facultatea Inginerie Electrică şi Ştiinţa Calculatoarelor

Automate si Microprogramare
-Microcontrolerul 8051-
-Joc de lumini programabile-

Coordonator:
Conferenţiar univ. dr. ing. Mahalu George

Student:
Găină Dragoș-Iulian

Suceava
2021
Cuprin

s
Introducere.......................................................................................................................3
Microcontrolerul 8051.....................................................................................................4
Schema bloc a microcontrolerului..................................................................................6
CPU ( Unitatea centrală a procesorului):..................................................................6
Memoria:.......................................................................................................................6
Magistrala BUS:...........................................................................................................7
Blocul de întreruperi:...................................................................................................7
Oscilatorul:...................................................................................................................7
Temporizatorul:...........................................................................................................7
Regiștri:.........................................................................................................................7
Schema pinilor microcontrolerului 8051....................................................................8
Aplicații ale microcontrolerului 8051.............................................................................9
Aplicație: Joc de lumini programabile în limbajul C.................................................10
Concluzie.........................................................................................................................15
Bibliografie......................................................................................................................16

2
Introducere

În ziua de azi, automatele microprogramabile sunt unele din cele mai întâlnite
dispozitive folosite în automatizări dar și în alte domenii, acoperind domenii de aplicații de
complexități diferite, de la cele mai mici către cele mari. Aplicațiile de complexitate mică, sunt
realizate de obicei cu mini-automate, acoperind ceea ce în trecut, se făcea utilizând contacte și
relee, iar cele de complexitate mare folosesc automate având controlere (procesoare) puternice,
putând fi realizate si programe multifuncționale deosebit de performate.
Pentru sisteme de automatizări cu număr mare de echipamente identice se folosesc
sisteme dedicate, de obicei automate microprogramate sau sisteme înglobate. Un realizator de
automate industriale poate alege unul sau mai multe automate produse de numeroase firme:
Siemens, Allen-Bradley, ABB, Schneider Electric, Omron, Mitsubishi, Fuji etc.
Siemens este probabil, cel mai mare producător de automate programabile, care permit
programarea în diferite limbaje de programare bazate pe medii avansate de programare si pe
medii grafice. Nu trebuie însă să uităm si firmele de hardware si software precum: Mitsubishi,
Hitachi, Wecon etc.
La modul general, un controller este o structură destinată controlului unui proces sau,
mai general, unei interacțiuni caracteristice cu mediul exterior, fără să fie necesară intervenția
operatorului uman. Primele controlere au fost realizate cu tehnologii pur analogice, folosind
componente electronice discrete și/sau componente electromecanice (relee). Cele care folosesc
tehnica numerică modernă au fost la început bazate pe logici cablate și a unei electronici
analogice uneori complexe, motiv pentru care aveau dimensiuni mare, consumau multă energie si
fiabilitatea lor lasă de dorit.
Un microcontroler este un circuit integrat care conține în aceeași capsulă pe lângă
procesor și memorie( ROM, RAM) si circuite I/O specializate de tip porturi paralele, canale
timer, căi seriale și respectiv, circuite ce gestionează logica de întreruperi.
Pot exista variante ce conțin periferice nestandardizate cum ar fi convertoare AD și
respectiv, DA, ieșiri de tip PWM (Pulse width modulation ), circuite dotate cu semnale pentru
magistrale I2C. Au apărut și circuite ce sunt prevăzute cu locații de memorie EEPROM, pentru
stocarea de informații ce se mențin și după dispariția tensiunii de alimentare. Diversitatea și
multitudinea de periferice incluse îl fac apt pentru controlul diverselor aplicații.

3
Microcontrolerul 8051
Firma Intel a introdus familia de microcontrolere 8051 în anul 1980, ca o continuitate a
altor familii de microcontrolere (8035, 8048) realizate de aceștia. Începând cu anul 1989, firma
Philips produce și ea acest tip, iar alte firme au preluat producția de circuite aducându-le diverse
elemente suplimentare.
Microcontrolerul standard 8051 este realizat într-o capsulă cu 40 pini DIL sau 44 pini
PLCC. Pentru funcţionare are nevoie de o singură sursă de tensiune (+5V). Iniţial a fost realizat
în tehnologie NMOS (consum ≈ 125 ÷ 150 mA), iar ulterior au apărut şi variante CMOS
(consum mai mic ≈ 15 ÷ 30 mA) denumindu-se 80C51.
Familia 8051 cuprinde diverse variante ale circuitului standard:
- circuitul 8051 conţine 4Ko memorie PROM (one time programming) şi 128 octeţi
RAM;
- circuitul 8031 conţine 128 octeţi RAM şi nu are memorie ROM (ROMless);
- circuitul 8751 conţine 4 Ko memorie EPROM şi 128 octeţi RAM;
- circuitul 8052 conţine 8 Ko PROM şi 256 octeţi RAM;
- circuitul 8032 conţine 256 octeţi RAM şi nu are memorie ROM;
- circuitul 8752 conţine 8 Ko EPROM şi 256 octeţi RAM;
- circuitul 8754 conţine 16 Ko EPROM şi 256 octeţi RAM;
- circuitul 8758 conţine 32 Ko EPROM şi 256 octeţi RAM.
Toate aceste versiuni prezintă procesorul propriu-zis, 4 porturi paralele de câte 8 biţi,
un canal pentru comunicaţii seriale, 2 canale timer, logică de întreruperi ce gestionează 2
întreruperi externe şi 3 întreruperi interne .
Caracteristica microcontrolelelor din familia 8051 o constituie faptul că arhitectura
procesorului este de tip HARVARD. Într-o arhitectură HARVARD, spaţiul de memorie ce
conţine instrucţiuni diferă de spaţiul de memorie ce conţine date. De obicei, instrucţiunile se
păstrează în memoria ROM, iar datele în RAM. Există instrucţiuni separate pentru accesarea celor
două spaţii de memorie. Există şi posibilitatea suprapunerii celor două zone de memorie cu
micşorarea spaţiului total de adresare la 64 Ko.

4
Schema bloc a microcontrolerului

CPU ( Unitatea centrală a procesorului):


După cum știm majoritatea, unitatea centrală a procesorului este mintea oricărei mașini
de procesare, ea controlează și gestionează toate procesele care sunt efectuate de microcontroler.
Utilizatorul nu are putere asupra funcționării procesorului, acesta interpretând informația stocată
în memoria ROM.

Memoria:
Microcontrolerul are nevoie de un program care reprezintă un set de comenzi, care ii
spun microcontrolerului să facă anumite sarcini precise. Aceste programe au nevoie de un spațiu
de stocare unde să poată fi acumulate și interpretate de microcontroler informațiile pentru a putea
acționa asupra unui proces specific.
5
Memoria este împărțită în ROM( Read-only Memory ) adică memorie care doar poate fi
citită și memorie RAM (Random Acces Memory) care poate fi accesată aleator oferind oricând
acces direct la orice locație și adresă. Microcontrolerul 8051 conține 4KB memorie ROM si dar si
128 octeți RAM.

Magistrala BUS:
Reprezintă un grup de fire care au rolul de canal de comunicare sau transfer de date,
conținând de la 8, 16 sau chiar mai multe astfel de conexiuni, acestea fiind de două feluri:
 Magistrala de adrese: Microcontrolerul 8051 conține o magistrală de
adrese de 16 biți.
 Magistrală de date: Microcontrolerul 8051 conține o magistrală de date
de 8 biți.

Blocul de întreruperi:
Cum putem deduce și din numele acestuia, la apariția unei întreruperi, microcontrolerul
suspendă temporar execuția programului si execută rutina de tratare a întreruperii care deservește
întreruperea, după care continuă execuția programului.
Microcontrolerul 8051 are 5 surse de întreruperi, două sunt întreruperi periferice, două
sunt întreruperi cu temporizator și ultima este întrerupere de tip port serial.
 TF0 – Întrerupere Timer 1 Overflow
 TF1 – Întrerupere Timer 2 Overflow
 INT0 – Întrerupere Externă 1
 INT1 –Întrerupere Externă 2
 RI/TI – Întrerupere Port Serial

Oscilatorul:
Microcontrolerul este dotat cu un generator de tact intern, care generează cu ajutorul
impulsurilor provenite de la un cristal de cuarț, legat la exterior, semnale de tact care asigură
funcționarea armonioasă a întregului sistem intern .

Temporizatorul:
Principala funcție a unui temporizator, este aceea de a face o întârziere între două
evenimente. Microcontrolerul 8051 conține două temporizatoare de 16 biți, fiind capabile să
producă două întârzieri simultane, producând astfel o întârziere adecvată.
Putem folosi si procesorul pentru a genera o întârziere, dar procesorul va rămâne activ, nu
va mai realiza alte sarcini în perioada aceasta. De aceea existența unui temporizator va permite o
mai bună funcționare a acestuia, putând fi alocată toată puterea pentru realizarea procesului dorit.

Regiștri:
Regiștrii microcontrolerului sunt folosiți în mare parte pentru a stoca date si instrucțiuni
de scurtă durată. Acest microcontroler conține regiștri pe 8 biți, de la D0 la D7, unde D0 este cel
mai puțin semnificativ bit și D7 este bitul cel mai semnificativ. Putem spune că sunt împărțite în
două feluri de regiștri, cei cu scop general, cei mai folosite de către programatori, si regiștri cu
funcții speciale.
6
Regiștri cu funcții speciale se află în spațiul memoriei de date, de la adresa 80H la adresa
0FFH și pot fi accesați prin adresare directă

Schema pinilor microcontrolerului 8051.

Pinii 1-8: Cunoscuți ca Portul 1, acesta nu îndeplinește anumite funcții, fiind un port de
intrare/ieșire bidirecțional.
Pinul 9: Este pinul de resetare, având ca scop resetarea microcontrolerului la valorile
inițiale.
Pinii 10-17: Cunoscuți ca și Portul 3, deservește funcții precum întreruperi, intrarea
temporizatorului, indicatoare de control.
Pini 18-19: Acești pini sunt folosiți pentru a interfața
Pinul 20: Este pinul de masa al microcontrolerului.
Pinii 21-28: Cunoscuți ca și Portul 2, servesc ca un port de intrare/ieșire, adresele de
ordin mai mare ale magistralei de adrese, sunt de obicei multiplexate folosind acest port.
7
Pinul 29: Program Store Enable, utilizat pentru a interpreta semnale din memoria
exterioară a programului.
Pinul 30: Accesul extern, este utilizat pentru a permite sau interzice interfațarea
memoriei externe.
Pinul 31: Este pus in joc pentru a putea multiplica indicația datelor de adresă .
Pinii 32-39: Cunoscuți ca Portul 0, deservește ca port de intrare/ieșire.
Pinul 40: Este sursa de alimentare principală, in general +5V DC.

Aplicații ale microcontrolerului 8051.

Domeniile în care se folosesc microcontrolerele de tip 8051 sunt foarte vaste, în


principiu deoarece este simplu de folosit și ușor de incorporat. Câteva exemple sunt:
 Managementul energiei: Sisteme de măsurare competente.
 Ecrane tactile: Majoritatea producătorilor de microcontrolere integrează abilități
senzoriale în proiectele lor.
 Automobile: Sunt utilizate pe scară largă, mai ales în autovehiculele hibride,
pentru a controla variația motorului.
 Dispozitive medicale: Sunt întâlnite până și în medicină, în aparate precum
glucometrul și tensiometrele, având o fiabilitate foarte mare.

8
Aplicație: Joc de lumini programabile în limbajul C.

Pentru proiect am ales sa fac un joc de lumini programabile, având ca inspirație modelul
de la Laboratorul 4, pe care l-am adaptat îndeplinind unele din cerințele de la Teme de Studiu și
făcând o variantă mai simplificată a acestuia.

Din figura de mai sus spunem putem observa că aplicația constă în utilizarea
microcontrolerului 8051, un număr de 16 indicatoare luminoase dispuse cate 8 la exterior
conectate la portul 2 și 8 dispuse spre partea interioară conectate la portul 0.
Pentru a schimba jocurile de lumini am introdus 4 întrerupătoare, acționate pe rând

Vom trece la analiza si explicarea codului.

La început vom face definirea porturilor.

9
#include <htc.h>
#define ledint P0 //Indicatoarele luminoase interioare conectate la P0
#define ledext P2 //Indicatoarele luminoase exterioare conectate la P1
#define switch1 P10 // Întrerupătorul 1 conectat la Portul 1.0
#define switch2 P11 // Întrerupătorul 2 conectat la Portul 1.0
#define switch3 P12 // Întrerupătorul 3 conectat la Portul 1.0
#define switch4 P13 // Întrerupătorul 4 conectat la Portul 1.0

Vom crea o funcție “delay” care are rolul de a întârzia ( temporiza ).

void delay(){
int i,j=1;
for(i=0;i<j;i++);
}

După care vom continua cu funcția principală unde avem inițializat o variabilă
“switch_status”, care v-a lua o valoare în funcție de ce buton urmează să fie apăsat.

void main()
{ unsigned int switch_status =0;
unsigned int i;

while(1){ // Funcție repetitivă


if(switch1 == 0){
switch_status=1;
}else if(switch2==0){
switch_status=2;
}else if(switch3==0){
switch_status=3;
}else if(switch4==0){
10
switch_status=4;
}

Vom folosi instrucțiunea “switch” pentru a simplifica structurile condiționale, astfel în


funcție de statusul fiecărui întrerupător vom accesa unul din cazuri.
switch(switch_status){

case 1:
ledint=0x01;
ledext=0x80;
delay();
for(i=0;i<7;i++){
ledint=ledint<<1; //Left shift exemplu: 0010 << 1 => 0100
ledext=ledext>>1; //Right shift ex: 1011 >> 1 => 1101
delay();
}
break;
Cazul 1:
Pentru a înțelege mai bine, ledul interior va primi prima valoare, după care cu ajutorul
operatorului de deplasare spre stânga, bitul unu își va schimba poziția atingând valoarea maximă
de 0x80, astfel fiecare bec se va aprinde pe rând pană la ultimul, în sensul acelor de ceasornic.

Același lucru se v-a întâmpla și cu ledurile exterioare, acesta va primi pentru început
valoarea maximă de 0x80, după care cu ajutorul operatorului de deplasare spre dreapta, bitul unu
își va schimba poziția, astfel becurile se vor aprinde invers acelor de ceasornic.

11
case 2: //Blinking

ledint=~ledint;
ledext=~ledext;
break;
Cazul 2:
Cazul doi v-a face ca ledurile să clipească folosindu-se de operatorul de negație, ce are ca
rezultat complementul față de 1 a biților, astfel 1 devine 0, iar 0 devine 1.

case 3:
ledint=0xaa;
ledext=0x55;
delay();
ledint=0x55;
ledext=0xaa;
break;
Cazul 3:
Cazul trei face un joc de lumini intermitente, astfel 0x55 va aprinde ledurile 0-2-4-6 iar
0xAA pe cele de pe poziții impare, respectiv 1-3-5-7.

12
case 4:
ledint=0xff; //interion deschise (toate cele 8 leduri vor fi pornite)
ledext=0x00; //exterior inchise
delay();
ledint=0x00; //interior inchise
ledext=0xff; //exterior deschise
delay();
break;
Cazul 4:
Vom oferi un joc simplu de lumini, închizând pe rând becurile din exterior si pornindu-
le pe cele interioare , după care le vom închide pe cele interioare și le vom porni pe cele
exterioare.

default:
ledint=0x00;
ledext=0x00; // Toate becurile sunt stinse
break;
Cazul implicit: Toate becurile vor fi stânse.

}
}
}
13
Concluzie

Mediul Multisim ne oferă posibilitatea proiectării și simulării diferitelor aplicații dintr-o


gamă foarte variată de domenii, indiferent de gradul acestora de complexitate. Acesta ne o oferă
și un instrument de programare care ne este foarte de ajutor, folosindu-se atât de limbajul de
asamblare, care interacționează aproape direct cu procesorul , cât și posibilitatea programării într-
un limbaj de programare de nivel înalt precum limbajul C.
Sistemele cu microcontrolere se regăsesc în diferite domenii, de la medicină până la
automobile, proiectarea sistemelor cu astfel de microcontrolere fiind mai simplă, mai rapidă, mai
sigură cât și destul de flexibilă, fiind preferată de o multitudine de proiectanți de microsisteme.
Sistemul realizat de mine, atestă posibilitatea unor aplicații simple și ieftine, pentru
realizarea unor sisteme de avertizare luminoasă, cu jocuri de lumini, asemănătoare cu cele de la
instalația de pom. Putem extinde acest sistem, găsindu-i diverse alte întrebuințări.

14
Bibliografie

[1] George Mahalu, Aplicații Multisim, București: Matrix Rom, 2016.


[2]https://www.youtube.com/watch?
v=0SiUczzIJ8k&lc=z23rjrgblyr4x303xacdp43bndifhczagmruz3rzjltw03c010c
[3] https://www.elprocus.com/8051-microcontroller-architecture-and-applications/

15

S-ar putea să vă placă și