Interfața cu LED-uri este primul lucru pe care ar fi încercat să-l faceți în timp ce începeți cu orice microcontroler. Deci, aici, în acest tutorial, vom interfața un LED cu microcontrolerul 8051 și vom scrie un program C pentru a clipi LED-ul. Am folosit un microcontroler AT89S52 foarte popular, din familia 8051, de la ATMEL.
Înainte de a intra în detaliu, ar trebui să ne facem o scurtă idee despre microcontrolerul AT89S52. Este un microcontroler cu 40 de pini și are 4 porturi (P0, P1, P2, P3), fiecare port are 8 pini. Putem considera fiecare port ca un registru pe 8 biți, din punct de vedere al software-ului. Fiecare pin având o linie de intrare / ieșire, înseamnă că fiecare pin poate fi utilizat atât pentru intrare, cât și pentru ieșire, adică pentru a citi datele din anumite dispozitive precum senzorul sau pentru a furniza ieșirea unui dispozitiv de ieșire. Unii pini au funcționalitatea Dual, care a fost menționată în paranteză în Pin Diagrama de mai jos. Dual funcțional ca pentru întreruperi, contoare, temporizatoare etc.
AT89S52 are două tipuri de memorie, primul este RAM care are 256 de octeți de memorie și al doilea este EEPROM (memorie ștearsă electronică șterse și programabilă) care are 8k octeți de memorie. Memoria RAM este utilizată pentru a stoca datele în timpul executării unui program și EEPROM pentru a stoca programul în sine. EEPROM este memoria flash pe care am folosit-o pentru a arde programul.
Diagrama și explicația circuitului
Folosim pinul 1 al portului 1 pentru a conecta LED-ul. În programarea încorporată C putem accesa PIN-ul 1 al portului 1 utilizând P1_0. Am conectat un oscilator de cristal cu o frecvență de 11,0592 MHz la PIN 19 și 18, adică XTAL1 și XTAL2. Oscilatorul de cristal este utilizat pentru a genera impulsuri de ceas, iar impulsul de ceas este utilizat pentru a furniza media pentru calcularea temporizării, care este obligatorie pentru sincronizarea tuturor evenimentelor. Acest tip de cristale utilizate în aproape toate echipamentele digitale moderne, cum ar fi computerele, ceasurile etc. Cristalul cel mai frecvent utilizat este cuarțul. Este un circuit de oscilator rezonant și condensatorii sunt folosiți pentru a oscila cristalul, așa că am conectat aici condensatori de 22pf. Puteți citi despre „circuite rezonante” pentru a afla mai multe.
Diagrama circuit pentru LED interfațare cu microcontroler 8051 89S52 este prezentată în figura de mai sus. Pinul 31 (EA) este conectat la Vcc, care este un pin activ activ. Acest lucru ar trebui să fie conectat la Vcc atunci când nu folosim nici o memorie externă. Pinul 30 (ALE) și pinul 29 (PSEN) sunt utilizate pentru a conecta microcontrolerul la memoria externă, iar Pinul 31 îi spune microcontrolerului să utilizeze memoria externă, atunci când este conectat la masă. Nu folosim nicio memorie externă, așa că am conectat Pin31 la Vcc.
Pinul 9 (RST) este PIN-ul de resetare, utilizat pentru resetarea microcontrolerului și programul începe din nou de la început. Resetează microcontrolerul atunci când este conectat la HIGH. Am folosit circuite de resetare standard, rezistor de 10 k ohm și condensator 1uF pentru a conecta pinul RST.
Acum partea interesantă aici este că conectăm LED-ul în sens invers, înseamnă picior negativ cu PIN-ul microcontrolerului, deoarece microcontrolerul nu furnizează suficientă putere pentru a aprinde un LED, deci aici LED-ul funcționează pe logica negativă ca atunci când, pinul P1_0 este 1 atunci LED-ul va fi dezactivat și când ieșirea pinului este 0, LED-ul va fi aprins. Când ieșirea PIN este 0, se comportă ca solul și LED-ul luminează.
Explicarea codului
Antetul REGX52.h a fost inclus pentru a include definițiile de bază ale registrului. Există multe tipuri de variabile și constante în C încorporat, cum ar fi int, char, nesemnat int, float etc., le puteți învăța cu ușurință. Aici folosim int nesemnat al cărui interval este de la 0 la 65535. Folosim „pentru buclă” pentru crearea întârzierii, astfel încât LED-ul să fie aprins pentru o perioadă de timp (P1_0 = 0, logică LED negativă) și și OFF (P1_0 = 1, logică LED negativă) pentru timpul întârziat. În general, când „pentru buclă” rulează de 1275 ori, dă întârziere de 1 ms, așa că am creat funcția „întârziere” pentru crearea DELAY și am apelat-o din programul principal (main ()). Putem trece timpul de întârziere (în ms) în timp ce apelăm funcția „întârziere” din funcția principală. În program, „În timp ce (1)” înseamnă că programul se va executa la infinit.
Vă explic pe scurt, cum de 1275 de ori rulează bucla „pentru” dă întârziere de 1 ms:
În 8051, un ciclu de mașină necesită 12 impulsuri de cristal pentru a se executa și avem un cristal de 11,0592Mhz.
Deci, timpul necesar pentru 1 ciclu de mașină: 12 / 11.0592 = 1.085us
Deci, 1275 * 1,085 = 1,3 ms, 1275 ori de buclă „for” oferă aproape 1 ms de întârziere.
Întârzierea exactă produsă de programul „C” este foarte dificil de calculat, atunci când se măsoară de la osciloscop (CRO), pentru (j = 0; j <1275; j ++) da întârziere de aproape 1 ms.
Deci, putem înțelege prin simpla interfață a LED-urilor cu microcontrolerul 8051, că printr-o codificare simplă, putem interacționa și controla hardware-ul prin software (programare) folosind microcontrolerul. De asemenea, putem manipula fiecare port și pin al microcontrolerului prin programare.