LED-liitäntä on ensimmäinen asia, jonka yritetään tehdä samalla, kun aloitat minkä tahansa mikro-ohjaimen käytön. Joten tässä tässä opetusohjelmassa aiomme liittää LED: n 8051-mikrokontrollerilla ja kirjoitamme C-ohjelman vilkkumaan LED-merkkivaloon. Olemme käyttäneet ATMEL: n erittäin suosittua mikro-ohjainta AT89S52, 8051-perheestä.
Ennen kuin menemme yksityiskohtiin, meidän pitäisi saada lyhyt käsitys mikro-ohjaimesta AT89S52. Se on 40-nastainen mikrokontrolleri ja siinä on 4 porttia (P0, P1, P2, P3), jokaisessa portissa on 8 nastaa. Voimme pitää jokaista porttia 8-bittisenä rekisterinä ohjelmiston näkökulmasta. Jokaisella nastalla, jolla on yksi tulo / lähtölinja, tarkoitetaan, että jokaista nastaa voidaan käyttää sekä tuloon että lähtöön, toisin sanoen datan lukemiseen jonkin laitteen, kuten anturin, tai toimittamaan lähdön jollekin lähtölaitteelle. Joillakin nastoilla on kaksoistoiminto, joka on mainittu suluissa alla olevassa kaaviokuvassa. Dual toiminnallisesti kuten keskeytyksille, laskureille, ajastimille jne.
AT89S52: lla on kahden tyyppinen muisti, ensimmäinen on RAM, jolla on 256 tavua muistia, ja toinen on EEPROM (elektronisesti poistettava ja ohjelmoitava vain luku -muisti), jossa on 8 kt tavua muistia. RAM-muistia käytetään tietojen tallentamiseen ohjelman suorituksen aikana ja EEPROM-muistia itse ohjelman tallentamiseen. EEPROM on flash-muisti, johon käytimme ohjelman polttamista.
Piirikaavio ja selitys
Käytämme LEDin liittämiseen portin 1 nastaa. Vuonna sulautettujen C ohjelmointi voimme käyttää PIN 1 portti 1 avulla P1_0. Olemme liittäneet PIN-koodeihin 19 ja 18 eli XTAL1 ja XTAL2 kideoskillaattorin, jonka taajuus on 11,0592 MHz. Kideoskillaattoria käytetään kellopulssien tuottamiseen, ja kellopulssia käytetään antamaan keskiarvo ajastuksen laskemiseen, joka on pakollinen kaikkien tapahtumien synkronoimiseksi. Tämän tyyppisiä kiteitä käytetään melkein kaikissa moderneissa digitaalisissa laitteissa, kuten tietokoneissa, kelloissa jne. Yleisimmin käytetty kristalli on kvartsi. Se on resonanssioskillaattoripiiri ja kondensaattoreita käytetään kiteytämään kiteitä, joten olemme liittäneet tähän 22pf-kondensaattorit. Voit lukea "resonanssipiireistä" tietääksesi enemmän.
Piirikaavio LED vuorovaikutuksessa 8051 mikro 89s52 on esitetty edellä kuviossa. Tappi 31 (EA) on kytketty Vcc: hen, joka on aktiivinen matala tappi. Tämän pitäisi olla kytketty Vcc: hen, kun emme käytä mitään ulkoista muistia. Nastaa 30 (ALE) ja nastaa 29 (PSEN) käytetään mikro-ohjaimen kytkemiseen ulkoiseen muistiin ja nasta 31 käskee mikro-ohjainta käyttämään ulkoista muistia, kun se on kytketty maahan. Emme käytä ulkoista muistia, joten yhdistimme Pin31 Vcc: hen.
Nasta 9 (RST) on nollaus PIN, jota käytetään mikro-ohjaimen nollaamiseen ja ohjelma käynnistyy uudelleen alusta. Se nollaa mikrokontrollerin, kun se on kytketty HIGH-liitäntään. Olemme käyttäneet RST-nastan kytkemiseen tavanomaisia palautuspiirejä, 10 k ohmin vastusta ja 1uF-kondensaattoria.
Nyt mielenkiintoinen osa on se, että LED kytketään päinvastoin, mikä tarkoittaa negatiivista jalkaa mikro-ohjaimen PIN-koodilla, koska mikro-ohjain ei tarjoa tarpeeksi virtaa LEDin hehkuttamiseen, joten tässä LED toimii negatiivisella logiikalla kuten silloin, kun nasta P1_0 on 1 sitten LED viritetään POIS ja kun nastalähtö on 0, LED syttyy. Kun PIN-lähdön arvo on 0, se käyttäytyy kuin maa ja LED palaa.
Koodin selitys
Otsikko REGX52.h on sisällytetty sisältämään rekisterin perusmääritykset. Upotetussa C: ssä on monenlaisia muuttujia ja vakioita, kuten int, char, unsigned int, float jne., Voit oppia ne helposti. Tässä käytämme allekirjoittamatonta int-arvoa, jonka alue on 0 - 65535. Käytämme "for loop" -viivettä viiveen luomiseen, jotta LED palaa jonkin aikaa (P1_0 = 0, negatiivinen LED-logiikka) ja ja OFF (P1_0 = 1, negatiivinen LED-logiikka) viivästyneelle ajalle. Yleensä kun “for loop” -toiminto kestää 1275 kertaa, se antaa viiveeksi 1 ms, joten olemme luoneet "delay" -toiminnon DELAY: n luomiseksi ja kutsuneet sitä pääohjelmasta (main ()). Voimme siirtää DELAY-ajan (ms), kun kutsumme “delay” -toiminnon päätoiminnosta. Ohjelmassa "Vaikka (1)" tarkoittaa, että ohjelma suoritetaan loputtomasti.
Selitän lyhyesti, kuinka 1275 kertaa "for" -silmukan suorittama viive on 1 ms:
Vuonna 8051 yksi konesykli vaatii 12 kidepulssia suorittamiseen ja olemme käyttäneet 11,0592 MHz: n kiteitä.
Joten yhden konekierron vaatima aika: 12 / 11,0592 = 1,085us
Joten 1275 * 1,085 = 1,3 ms, 1275 kertaa "for" -silmukalle antaa lähes 1 ms viiveen.
Tarkkaa aikaviiveen tuottamista “C” -ohjelmalla on erittäin vaikea laskea, kun mitataan oskilloskoopista (CRO), jolloin (j = 0; j <1275; j ++) antaa viiveeksi lähes 1 ms.
Joten voimme ymmärtää yksinkertaisesti liittämällä LED: n 8051-mikrokontrolleriin, että yksinkertaisella koodauksella voimme vuorovaikutuksessa ja hallita laitteistoa ohjelmiston (ohjelmoinnin) avulla mikrokontrolleria käyttäen. Voimme myös manipuloida kutakin mikrokontrollerin porttia ja nastaa ohjelmoinnin avulla.