Šviesos diodų sąsaja yra pirmas dalykas, kurį bandytume padaryti pradėdami naudoti bet kurį mikrovaldiklį. Taigi, šioje pamokoje mes sujungsime šviesos diodą su 8051 mikrovaldikliu ir parašysime C programą, kad mirksėtų šviesos diodas. Mes naudojome labai populiarią ATMEL mikrovaldiklį AT89S52 iš 8051 šeimos.
Prieš pradėdami detaliau, turėtume trumpai sužinoti apie mikrovaldiklį AT89S52. Tai yra 40 kontaktų mikrovaldiklis ir turi 4 prievadus (P0, P1, P2, P3), kiekviename prievade yra 8 kontaktai. Kiekvieną prievadą galime laikyti 8 bitų registru programinės įrangos požiūriu. Kiekvienas kaištis, turintis vieną įvesties / išvesties liniją, reiškia, kad kiekvieną kaištį galima naudoti ir įvedant, ir išvedant, ty norint nuskaityti duomenis iš tam tikro įrenginio, pavyzdžiui, jutiklio, arba pateikti išvestį į kurį nors išvesties įrenginį. Kai kurie smeigtukai turi dvigubą funkciją, kuri buvo paminėta skliausteliuose žemiau esančioje smeigtukų diagramoje. Dvigubai funkciškai kaip pertraukimui, skaitikliams, laikmačiams ir kt.
AT89S52 turi dviejų tipų atmintį: pirma yra RAM, turinti 256 Baitų atmintį, ir antra - EEPROM (elektroniniu būdu ištrinama ir programuojama tik skaitymo atmintis), turinti 8 tūkst. Baitų atminties. RAM naudojama duomenims saugoti vykdant programą, o EEPROM naudojama pačiai programai saugoti. EEPROM yra „flash“ atmintis, į kurią įrašėme programą.
Grandinės schema ir paaiškinimas
Šviesos diodui prijungti naudojame 1 prievado 1 kontaktą. Be įterptųjų C programavimo mes galime prieiti prie PIN 1 iš uosto 1 naudojant P1_0. Mes prijungėme 11,0592MHz dažnio kristalinį osciliatorių prie PIN 19 ir 18, ty XTAL1 ir XTAL2. Laikrodžio impulsams generuoti naudojamas kristalinis osciliatorius, o laiko skaičiavimo vidurkiui gauti reikalingas laikrodžio impulsas, kuris yra būtinas sinchronizuoti visus įvykius. Tokio tipo kristalai naudojami beveik kiekvienoje šiuolaikinėje skaitmeninėje įrangoje, pavyzdžiui, kompiuteriuose, laikrodžiuose ir kt. Dažniausiai naudojamas kristalas yra kvarcas. Tai rezonansinė osciliatoriaus grandinė, o kristalui virpinti naudojami kondensatoriai, todėl čia prijungėme 22pf kondensatorius. Norėdami sužinoti daugiau, galite perskaityti apie „rezonansines grandines“.
Grandinės schema LED sąsajos su 8051 mikrovaldiklių 89S52 yra parodyta pirmiau paveikslėlyje. 31 kaištis (EA) yra prijungtas prie Vcc, kuris yra aktyvus žemas kaištis. Tai turėtų būti prijungta prie „Vcc“, kai nenaudojame jokios išorinės atminties. Kaiščiai 30 (ALE) ir kaiščiai 29 (PSEN) naudojami prijungti mikrovaldiklį prie išorinės atminties, o kaištis 31 liepia mikrovaldikliui naudoti išorinę atmintį, kai jis prijungtas prie „Ground“. Mes nenaudojame jokios išorinės atminties, todėl prijungėme „Pin31“ prie „Vcc“.
9 kaištis (RST) yra iš naujo nustatytas PIN kodas, naudojamas atstatyti mikrovaldiklį, o programa vėl pradedama nuo pradžių. Jis atstato mikrovaldiklį, kai jis prijungtas prie HIGH. Norėdami prijungti RST kaištį, mes naudojome standartinę atstatymo schemą, 10 k omų rezistorių ir 1uF kondensatorių.
Dabar įdomi dalis yra ta, kad mes sujungiame šviesos diodą atvirkščiai, tai reiškia neigiamą koją su mikrovaldiklio PIN kodu, nes mikrovaldiklis nepateikia pakankamai energijos švyti LED, taigi čia šviesos diodas veikia pagal neigiamą logiką, pavyzdžiui, kai kaištis P1_0 yra 1 tada šviesos diodas bus išjungtas, o kai kaiščių išvestis yra 0, LED bus įjungtas. Kai PIN išvestis yra 0, ji elgiasi kaip įžeminta ir šviečia šviesos diodas.
Kodo paaiškinimas
Antraštė REGX52.h buvo įtraukta, kad būtų įtraukti pagrindiniai registro apibrėžimai. Įterptame C yra daugybė kintamųjų ir konstantų, tokių kaip int, char, nepasirašytas int, plūduriuojantis ir tt, galite juos lengvai išmokti. Čia mes naudojame nepasirašytą int, kurio diapazonas yra nuo 0 iki 65535. Mes naudojame „for loop“, kad sukurtume uždelsimą, kad šviesos diodas kurį laiką būtų įjungtas (P1_0 = 0, neigiama LED logika) ir ir OFF (P1_0 = 1)., neigiama LED logika) atidėtam laikui. Paprastai, kai „for loop“ veikia 1275 kartus, tai suteikia 1 ms vėlavimą, todėl sukūrėme „delay“ funkciją, kad sukurtume DELAY ir ją iškvietėme iš pagrindinės programos (main ()). Mes galime praleisti DELAY laiką (ms), iškviesdami „delay“ funkciją iš pagrindinės funkcijos. Programoje „Nors (1)“ reiškia, kad programa bus vykdoma be galo.
Trumpai paaiškinu, kaip 1275 kartų „for“ ciklo vykdymas suteikia 1 ms vėlavimą:
8051 m. Vienam mašinos ciklui vykdyti reikia 12 kristalų impulsų, o mes panaudojome 11,0592 MHz kristalą.
Taigi laikas, reikalingas 1 mašinos ciklui: 12/11,0592 = 1,085us
Taigi 1275 * 1,085 = 1,3 ms, 1275 kartų „už“ ciklas duoda beveik 1 ms vėlavimo.
Tikslų laiko uždelsimą pagal „C“ programą labai sunku apskaičiuoti, matuojant iš osciloskopo (CRO), kai (j = 0; j <1275; j ++) delsimas yra beveik 1 ms.
Taigi galime paprasčiausiai susieti LED su 8051 mikrovaldikliu, kad, naudodami paprastą kodavimą, mes galime sąveikauti ir valdyti aparatinę įrangą per programinę įrangą (programavimą) naudodami mikrovaldiklį. Be to, programuodami galime valdyti kiekvieną mikrovaldiklio prievadą ir kaištį.