Povezava z LED je prva stvar, ki bi jo poskusili narediti že pri začetku s katerim koli mikrokrmilnikom. Torej, v tej vadnici bomo povezali LED z mikrokrmilnikom 8051 in napisali program C za utripanje LED. Uporabili smo zelo priljubljen mikrokrmilnik AT89S52 iz družine 8051 podjetja ATMEL.
Preden se spustimo v podrobnosti, bi morali na kratko predstaviti mikrokrmilnik AT89S52. Je 40-pinski mikrokrmilnik in ima 4 vrata (P0, P1, P2, P3), vsaka vrata imajo 8 nožic. Vsako vrata lahko s programskega vidika obravnavamo kot 8-bitni register. Vsak zatič, ki ima eno vhodno / izhodno črto, pomeni, da je vsak zatič mogoče uporabiti tako za vhod kot za izhod, tj. Za branje podatkov iz neke naprave, kot je senzor, ali za zagotavljanje izhoda neki izhodni napravi. Nekateri zatiči imajo dvojno funkcionalnost, ki je bila omenjena v oklepaju v spodnjem diagramu. Dvojno funkcionalno, na primer za prekinitve, števce, časovnike itd.
AT89S52 ima dve vrsti pomnilnika, prvi je RAM, ki ima 256 bajtov pomnilnika, drugi pa EEPROM (elektronsko izbrisljiv in programabilen samo za branje pomnilnik), ki ima 8k bajtov pomnilnika. RAM se uporablja za shranjevanje podatkov med izvajanjem programa, EEPROM pa za shranjevanje samega programa. EEPROM je bliskovni pomnilnik, v katerega smo uporabili program.
Shema vezja in razlaga
Za priključitev LED uporabljamo prvi zatič na vratih 1. Pri vgrajenem programiranju C lahko s pomočjo P1_0 dostopamo do kode PIN 1 vrat 1. Na PIN 19 in 18 smo povezali kristalni oscilator frekvence 11.0592MHz, tj. XTAL1 in XTAL2. Kristalni oscilator se uporablja za generiranje urnih impulzov, urni impulz pa za zagotavljanje povprečja za izračun časa, ki je obvezen za sinhronizacijo vseh dogodkov. Ta vrsta kristalov se uporablja v skoraj vsaki sodobni digitalni opremi, na primer v računalnikih, urah itd. Najpogosteje uporabljeni kristal je kremen. To je resonančno oscilatorno vezje in kondenzatorji se uporabljajo za nihanje kristala, zato smo tukaj priklopili 22pf kondenzatorje. Če želite izvedeti več, lahko preberete o "resonančnih tokokrogih".
Shema vezja za povezavo LED z mikrokrmilnikom 8051 89S52 je prikazana na zgornji sliki. Zatič 31 (EA) je povezan z Vcc, ki je aktivni nizki zatič. Ta mora biti povezan z Vcc, kadar ne uporabljamo nobenega zunanjega pomnilnika. Pin 30 (ALE) in pin 29 (PSEN) se uporabljata za povezavo mikrokrmilnika z zunanjim pomnilnikom, pin 31 pa mikrokrmilniku sporoča, naj uporablja zunanji pomnilnik, ko je povezan z zemljo. Ne uporabljamo nobenega zunanjega pomnilnika, zato smo Pin31 priključili na Vcc.
Pin 9 (RST) je PIN za ponastavitev, ki se uporablja za ponastavitev mikrokrmilnika in program se znova začne od začetka. Mikrokrmilnik ponastavi, ko je priključen na HIGH. Za priključitev zatiča RST smo uporabili standardno vezje za ponastavitev, 10k ohmski upor in kondenzator 1uF.
Zdaj je zanimiv del, da LED povežemo obratno, pomeni negativno nogo z PIN-om mikrokrmilnika, ker mikrokrmilnik ne zagotavlja dovolj moči, da bi svetil LED, zato tukaj LED deluje na negativni logiki, na primer kdaj je pin P1_0 potem se LED izklopi in ko je izhod pin 0, se LED vklopi. Ko je izhod PIN 0, se obnaša kot zemlja in LED sveti.
Razlaga kode
Vključen je naslov REGX52.h, ki vključuje osnovne definicije registra. V vdelanem C je veliko vrst spremenljivk in konstant, kot so int, char, unsigned int, float itd., Se jih lahko naučite enostavno. Tu uporabljamo nepodpisani int, katerega obseg je od 0 do 65535. Za ustvarjanje zakasnitve uporabljamo “for loop”, tako da bo LED nekaj časa svetil (P1_0 = 0, negativna LED logika) in in OFF (P1_0 = 1, negativna LED logika) za zakasnjen čas. Na splošno, ko »for zanka« teče 1275-krat, daje zamudo 1 ms, zato smo ustvarili funkcijo »delay« za ustvarjanje DELAY in jo poklicali iz glavnega programa (main ()). Med klicanjem funkcije zakasnitve iz glavne funkcije lahko prenesemo čas DELAY (v ms) V programu "While (1)" pomeni, da se bo program izvajal neskončno.
Na kratko pojasnjujem, kako 1275-kratni zagon zanke "for" povzroči zamudo 1ms:
Leta 8051 za izvedbo enega strojnega cikla potrebujemo 12 kristalnih impulzov in uporabljamo kristal 11.0592 MHz.
Torej čas, potreben za 1 strojni cikel: 12 / 11.0592 = 1.085us
Torej 1275 * 1,085 = 1,3 ms, 1275-krat zanke "for" pomeni skoraj 1 ms zamude.
Natančno časovno zakasnitev, proizvedeno s programom "C", je zelo težko izračunati, če merimo z osciloskopom (CRO), saj (j = 0; j <1275; j ++) daje zakasnitev skoraj 1 ms.
Tako lahko preprosto povežemo LED z mikrokrmilnikom 8051, da lahko s preprostim kodiranjem komuniciramo in upravljamo strojno opremo s programsko opremo (programiranje) z uporabo mikrokrmilnika. Prav tako lahko s programiranjem upravljamo z vsemi vrati in zatiči mikrokrmilnika.