LED-grensesnitt er det første du vil prøve å gjøre mens du kommer i gang med en hvilken som helst mikrokontroller. Så her i denne opplæringen skal vi grensesnitt en LED med 8051 mikrokontroller, og vil skrive et C-program for å blinke LED. Vi har brukt en veldig populær mikrokontroller AT89S52, av 8051-familien, av ATMEL.
Før vi går i detalj, bør vi få en kort ide om mikrokontroller AT89S52. Den er 40-pinners mikrokontroller, og har 4 porter (P0, P1, P2, P3), hver port har 8 pinner. Vi kan betrakte hver port som 8-biters register, sett fra programvaren. Hver pinne som har en inngangs- / utgangslinje, betyr at hver pin kan brukes til både inngang og utgang, dvs. for å lese data fra en enhet som en sensor, eller for å levere utgangen til en eller annen utdataenhet. Noen pinner har Dual funksjonalitet, som er nevnt i parentes i Pin Diagram nedenfor. Dual funksjonelt som for avbrudd, tellere, tidtakere etc.
AT89S52 har to typer minne, den første er RAM som har 256 byte minne og den andre er EEPROM (elektronisk slettbart og programmerbart skrivebeskyttet minne) som har 8k byte minne. RAM brukes til å lagre dataene under kjøring av et program og EEPROM brukes til å lagre selve programmet. EEPROM er flashminnet som vi brukte til å brenne programmet inn.
Kretsdiagram og forklaring
Vi bruker pin en i port 1 for å koble til LED-lampen. I innebygd C-programmering kan vi få tilgang til PIN 1 for port 1 ved å bruke P1_0. Vi har koblet en krystalloscillator med 11.0592MHz frekvens til PIN 19 og 18, dvs. XTAL1 og XTAL2. Krystalloscillator brukes til å generere klokkepulser, og klokkepuls brukes til å gi gjennomsnittet for tidsberegning, som er obligatorisk for å synkronisere alle hendelsene. Denne typen krystaller som brukes i nesten alle moderne digitale apparater som datamaskiner, klokker osv. Mest brukte krystall er kvarts. Det er en resonansk oscillatorkrets og kondensatorer brukes til å svinge krystallet, så vi har koblet til her 22pf kondensatorer. Du kan lese om "resonanskretser" for å vite mer.
Det koblingsskjema for LED samvirking med 8051 mikrokontroller 89S52 er vist i ovennevnte figur. Pin 31 (EA) er koblet til Vcc, som er en aktiv lav pin. Dette bør kobles til Vcc når vi ikke bruker noe eksternt minne. Pin 30 (ALE) og pin 29 (PSEN) brukes til å koble mikrokontroller til det eksterne minnet, og Pin 31 ber mikrokontrolleren om å bruke eksternt minne når den er koblet til bakken. Vi bruker ikke noe eksternt minne, så vi koblet Pin31 til Vcc.
Pin 9 (RST) er reset-PIN-koden, som brukes til å tilbakestille mikrokontrolleren og programmet starter fra begynnelsen. Den tilbakestiller mikrokontrolleren når den er koblet til HIGH. Vi har brukt standard reset kretsløp, 10k ohm motstand og 1uF kondensator for å koble RST-pinnen.
Nå er den interessante delen her at vi kobler lysdioden i omvendt retning, betyr negativ bein med mikrokontroller-PIN, fordi mikrokontroller ikke gir nok strøm til å gløde en LED, så her kjører LED-en på den negative logikken som når, pin P1_0 er 1 deretter vil LED bli avstemt og når pin-utgangen er 0, vil LED bli slått PÅ. Når PIN-utgang er 0, oppfører den seg som bakken og LED lyser.
Kode Forklaring
Overskrift REGX52.h har blitt inkludert for å inkludere de grunnleggende registerdefinisjonene. Det er mange typer variabler og konstanter i innebygd C som int, char, usignert int, float etc, du kan lære dem enkelt. Her bruker vi usignert int, hvis område er fra 0 til 65535. Vi bruker "for loop" for å lage forsinkelse, slik at LED vil være PÅ i noen tid (P1_0 = 0, negativ LED-logikk) og og OFF (P1_0 = 1, negativ LED-logikk) for forsinket tid. Vanligvis når "for loop" går 1275 ganger gir den forsinkelse på 1 ms, så vi har opprettet en "delay" -funksjon for å lage DELAY og kalt den fra hovedprogrammet (main ()). Vi kan overføre DELAY-tid (i ms) mens vi kaller "forsinkelse" -funksjon fra hovedfunksjonen. I programmet betyr "While (1)" at programmet vil kjøres uendelig.
Jeg forklarer kort hvordan 1275 ganger "for" loop gir forsinkelse på 1 ms:
I 8051 krever en maskinsyklus 12 krystallpulser å utføre, og vi har brukt 11.0592Mhz krystall.
Så tid som kreves for 1 maskinsyklus: 12 / 11.0592 = 1.085us
Så 1275 * 1.085 = 1.3ms, 1275 ganger “for” loop gir nesten 1ms forsinkelse.
Den nøyaktige tidsforsinkelsen som produseres av "C" -programmet er veldig vanskelig å beregne når man måler fra oscilloskop (CRO), for (j = 0; j <1275; j ++) gir forsinkelse på nesten 1 ms.
Så vi kan forstå ved ganske enkelt å koble LED med 8051 mikrokontroller, at med en enkel koding kan vi samhandle og kontrollere maskinvaren gjennom programvare (programmering) ved hjelp av mikrokontroller. Vi kan også manipulere hver port og pin av mikrokontroller gjennom programmering.