LED-grænseflade er den første ting, man vil prøve at gøre, mens man kommer i gang med enhver mikrokontroller. Så her i denne vejledning skal vi interface en LED med 8051 mikrocontroller og vil skrive et C-program for at blinke LED'en. Vi har brugt en meget populær mikrokontroller AT89S52, 8051-familie, af ATMEL.
Før vi går i detaljer, bør vi få en kort idé om mikrokontroller AT89S52. Det er 40-pin mikrocontroller og har 4 porte (P0, P1, P2, P3), hver port har 8 ben. Vi kan betragte hver port som et 8-bit register set fra softwareperspektivet. Hver stift med en indgangs- / udgangslinje betyder, at hver stift kan bruges til input såvel som til output, dvs. at læse data fra en enhed som en sensor eller til at levere dens output til en eller anden outputenhed. Nogle ben har den dobbelte funktionalitet, som er nævnt i parentes i pin-diagrammet nedenfor. Dobbelt funktionelt som ved afbrydelse, tællere, timere osv.
AT89S52 har to typer hukommelse, den første er RAM, som har 256 Bytes hukommelse, og den anden er EEPROM (Elektronisk sletbar og programmerbar skrivebeskyttet hukommelse), som har 8k bytes hukommelse. RAM bruges til at gemme dataene under udførelsen af et program, og EEPROM bruges til at gemme selve programmet. EEPROM er den flashhukommelse, som vi brugte til at brænde programmet ind i.
Kredsløbsdiagram og forklaring
Vi bruger pin en i port 1 til at forbinde lysdioden. I indlejret C-programmering kan vi få adgang til PIN 1 i port 1 ved hjælp af P1_0. Vi har tilsluttet en krystaloscillator med 11.0592MHz frekvens til PIN 19 og 18, dvs. XTAL1 og XTAL2. Krystaloscillator bruges til at generere urimpulser, og urimpuls bruges til at give gennemsnittet til timingberegning, hvilket er obligatorisk at synkronisere alle begivenhederne. Denne type krystaller, der anvendes i næsten ethvert moderne digitalt udstyr som i computere, ure osv. Mest anvendte krystal er kvarts. Det er et resonansoscillatorkredsløb, og kondensatorer bruges til at svinge krystallen, så vi har tilsluttet her 22pf kondensatorer. Du kan læse om “resonanskredsløb” for at vide mere.
Den kredsløbsdiagram for LED grænseflade med 8051 microcontroller 89S52 er vist i ovenstående figur. Pin 31 (EA) er forbundet til Vcc, som er en aktiv lav pin. Dette skal tilsluttes Vcc, når vi ikke bruger nogen ekstern hukommelse. Pin 30 (ALE) og pin 29 (PSEN) bruges til at forbinde mikrocontroller til den eksterne hukommelse, og Pin 31 fortæller microcontroller at bruge ekstern hukommelse, når den er tilsluttet jorden. Vi bruger ikke nogen ekstern hukommelse, så vi forbinder Pin31 til Vcc.
Pin 9 (RST) er reset-PIN-koden, der bruges til at nulstille mikrocontrolleren, og programmet starter igen fra begyndelsen. Den nulstiller mikrokontrolleren, når den er tilsluttet HIGH. Vi har brugt standard reset kredsløb, 10k ohm modstand og 1uF kondensator til at forbinde RST pin.
Nu er den interessante del her, at vi forbinder lysdioden i omvendt retning, betyder negativt ben med mikrokontroller-PIN, fordi mikrokontroller ikke giver nok strøm til at lyse en LED, så her kører LED'en på den negative logik som når pin P1_0 er 1 derefter vil LED blive indstillet OFF, og når pin output er 0, vil LED blive tændt. Når PIN-udgang er 0, opfører den sig som jorden, og LED lyser.
Kode Forklaring
Overskrift REGX52.h er inkluderet for at inkludere de grundlæggende registerdefinitioner. Der er mange typer variabler og konstanter i indlejret C som int, char, usigneret int, float osv., Du kan lære dem let. Her bruger vi usigneret int, hvis område er fra 0 til 65535. Vi bruger “for loop” til at skabe forsinkelse, så LED vil være tændt i nogen tid (P1_0 = 0, negativ LED-logik) og og OFF (P1_0 = 1, negativ LED-logik) for forsinket tid. Generelt når "for loop" kører 1275 gange, giver det forsinkelse på 1 ms, så vi har oprettet 'delay' -funktion til oprettelse af DELAY og kaldt det fra hovedprogrammet (main ()). Vi kan sende DELAY-tid (i ms), mens vi kalder "forsinkelse" -funktionen fra hovedfunktionen. I programmet betyder "While (1)", at programmet udføres uendeligt.
Jeg forklarer kort, hvordan 1275 gange kørsel af "for" loop giver forsinkelse på 1 ms:
I 8051 kræver 1 maskincyklus 12 krystalimpulser at udføre, og vi har brugt 11.0592Mhz krystal.
Så krævet tid til 1 maskincyklus: 12 / 11.0592 = 1.085us
Så 1275 * 1.085 = 1.3ms, 1275 gange "for" loop giver næsten 1ms forsinkelse.
Den nøjagtige tidsforsinkelse produceret af “C” -programmet er meget vanskelig at beregne, når man måler fra oscilloskop (CRO), for (j = 0; j <1275; j ++) giver forsinkelse på næsten 1 ms.
Så vi kan forstå ved blot at grænseflade mellem LED og 8051 mikrokontroller, at vi med en simpel kodning kan interagere og styre hardwaren gennem software (programmering) ved hjælp af mikrocontroller. Vi kan også manipulere hver port og pin af mikrocontroller gennem programmering.