Rozhranie LED je prvá vec, ktorú by ste sa mohli pokúsiť urobiť, keď ste začínali s akýmkoľvek mikrokontrolérom. Takže tu v tomto výučbe ideme prepojiť LED s mikrokontrolérom 8051 a napíšeme program C na blikanie LED. Použili sme veľmi populárny mikrokontrolér AT89S52, z rodiny 8051, od spoločnosti ATMEL.
Predtým, ako sa pustíme do podrobností, mali by sme získať krátku predstavu o mikrokontroléri AT89S52. Je to 40-pinový mikrokontrolér a má 4 porty (P0, P1, P2, P3), každý port má 8 pinov. Každý port môžeme zo softvérového hľadiska považovať za 8 bitový register. Každý pin, ktorý má jedno vstupné / výstupné vedenie, znamená, že každý pin je možné použiť ako na vstup, tak aj na výstup, tj na čítanie údajov z nejakého zariadenia, napríklad zo senzora, alebo na zabezpečenie jeho výstupu pre niektoré výstupné zariadenie. Niektoré piny majú duálnu funkčnosť, ktorá bola spomenutá v zátvorke v Pin Pin nižšie. Dual funkčne ako prerušenie, počítadlá, časovače atď.
AT89S52 má dva typy pamäte, prvý je RAM, ktorý má 256 bajtov pamäte, a druhý je EEPROM (elektronicky vymazateľná a programovateľná pamäť iba na čítanie), ktorá má pamäť s veľkosťou 8 kB. RAM sa používa na ukladanie údajov počas vykonávania programu a EEPROM na ukladanie samotného programu. EEPROM je flash pamäť, do ktorej sme program napálili.
Schéma zapojenia a vysvetlenie
Na pripojenie LED používame pin 1 z portu 1. V zabudovanom programovaní C môžeme získať PIN 1 portu 1 pomocou P1_0. K PIN 19 a 18 sme pripojili kryštálový oscilátor s frekvenciou 11,0592 MHz, tj. XTAL1 a XTAL2. Krištáľový oscilátor sa používa na generovanie hodinových impulzov a hodinový impulz sa používa na určenie priemeru pre výpočet časovania, ktorý je povinný na synchronizáciu všetkých udalostí. Tieto typy kryštálov používané takmer v každom modernom digitálnom zariadení, ako napríklad v počítačoch, hodinkách atď. Najčastejšie sa používa kryštál kremeň. Je to rezonančný obvod oscilátora a kondenzátory sa používajú na kmitanie kryštálu, takže sme sem pripojili kondenzátory 22pf. Môžete si prečítať o „rezonančných obvodoch“ a dozvedieť sa viac.
Schéma zapojenia pre LED prepojenie s 8051 mikrokontrolérom 89S52 je zobrazené na vyššie uvedenom obrázku. Pin 31 (EA) je pripojený k Vcc, čo je aktívny nízky pin. Toto by malo byť pripojené k Vcc, keď nepoužívame žiadnu externú pamäť. Pin 30 (ALE) a pin 29 (PSEN) sa používajú na pripojenie mikrokontroléra k externej pamäti a pin 31 hovorí mikrokontroléru, aby používal externú pamäť, keď je pripojený k zemi. Nepoužívame žiadnu externú pamäť, takže sme pripojili Pin31 k Vcc.
Pin 9 (RST) je resetovací PIN, ktorý sa používa na resetovanie mikrokontroléra a program sa znova spustí od začiatku. Po pripojení k HIGH resetuje mikrokontrolér. Na pripojenie kolíka RST sme použili štandardné resetovacie obvody, odpor 10 kOhm a kondenzátor 1 uF.
Teraz je tu zaujímavá časť, že pripojíme LED opačne, čo znamená zápornú nohu s PIN mikrokontroléra, pretože mikrokontrolér neposkytuje dostatok energie na rozsvietenie LED, takže tu LED beží na negatívnej logike ako keď, pin P1_0 je 1 potom bude LED naladená VYPNUTÁ a keď je pinový výstup 0, potom sa LED rozsvieti. Ak je výstup PIN 0, správa sa ako uzemnenie a LED svieti.
Vysvetlenie kódu
Bola zahrnutá hlavička REGX52.h, ktorá obsahuje základné definície registrov. Vo vloženom jazyku C je veľa typov premenných a konštánt, ako napríklad int, char, unsigned int, float atď., Ľahko sa ich naučíte. Tu používame unsigned int, ktorého rozsah je od 0 do 65535. Na vytvorenie oneskorenia používame „for loop“, takže LED bude nejaký čas svietiť (P1_0 = 0, záporná logika LED) a a VYPNUTÁ (P1_0 = 1, záporná logika LED) pre oneskorený čas. Všeobecne, keď cyklus „for loop“ beží 1275-krát, dáva oneskorenie 1 ms, preto sme vytvorili funkciu „delay“ na vytvorenie DELAY a zavolali ju z hlavného programu (main ()). Pri volaní funkcie „delay“ z hlavnej funkcie môžeme uplynúť DELAY čas (v ms). „Zatiaľ čo (1)“ v programe znamená, že program bude prebiehať nekonečne dlho.
Stručne vysvetľujem, ako 1275-krát spustený cyklus „for“ dáva oneskorenie 1ms:
V roku 8051 vyžaduje 1 strojový cyklus na vykonanie 12 kryštálových impulzov a použili sme kryštál 11,0592 MHz.
Takže čas potrebný na 1 cyklus stroja: 12 / 11.0592 = 1,085us
Takže 1275 * 1,085 = 1,3 ms, 1275-krát slučky „pre“ dáva oneskorenie takmer 1 ms.
Presné vyprodukovanie časového oneskorenia programom „C“ je veľmi ťažké vypočítať pri meraní z osciloskopu (CRO), pretože (j = 0; j <1275; j ++) dáva oneskorenie takmer 1 ms.
Takže jednoduchému prepojeniu LED s mikrokontrolérom 8051 môžeme pochopiť, že s jednoduchým kódovaním môžeme interagovať a ovládať hardvér pomocou softvéru (programovania) pomocou mikrokontroléra. Taktiež môžeme programovať každý port a pin mikrokontroléra.