LED-gränssnitt är det första man skulle försöka göra medan man kommer igång med någon mikrokontroller. Så här i den här handledningen ska vi gränssnitt en LED med 8051 mikrokontroller, och kommer att skriva ett C-program för att blinka LED. Vi har använt en mycket populär mikrokontroller AT89S52, av 8051-familjen, av ATMEL.
Innan vi går i detalj bör vi få en kort uppfattning om mikrokontrollern AT89S52. Det är 40-stifts mikrokontroller och har 4 portar (P0, P1, P2, P3), varje port har 8 stift. Vi kan betrakta varje port som 8-bitarsregister ur programvarusynpunkt. Varje stift som har en ingångs- / utgångsledning betyder att varje stift kan användas både för inmatning och för utmatning, dvs för att läsa data från någon enhet som sensor eller för att tillhandahålla dess utgång till någon utdataenhet. Vissa stift har dubbel funktionalitet, vilket har nämnts inom parentes i stiftdiagrammet nedan. Dubbelfunktionellt som för avbrott, räknare, timers etc.
AT89S52 har två typer av minne, det första är RAM som har 256 bitar minne och det andra är EEPROM (elektroniskt raderbart och programmerbart skrivskyddat minne) som har 8k byte minne. RAM används för att lagra data under körning av ett program och EEPROM används för att lagra själva programmet. EEPROM är det flashminne som vi använde för att bränna programmet in.
Kretsschema och förklaring
Vi använder stift en i port 1 för att ansluta lysdioden. I inbäddad C-programmering kan vi komma åt PIN 1 för port 1 genom att använda P1_0. Vi har anslutit en kristalloscillator med 11.0592 MHz-frekvens till PIN 19 och 18, dvs XTAL1 och XTAL2. Kristalloscillator används för att generera klockpulser och klockpuls används för att ge medelvärdet för tidsberäkning, vilket är obligatoriskt för att synkronisera alla händelser. Denna typ av kristaller som används i nästan alla moderna digitala apparater som i datorer, klockor etc. Vanligtvis används kristall kvarts. Det är en resonansoscillatorkrets och kondensatorer används för att oscillera kristallen, så vi har anslutit här 22pf kondensatorer. Du kan läsa om "resonanskretsar" för att veta mer.
Den kretsschema för LED gränssnitt med 8051 mikrokontroller 89S52 visas i figuren ovan. Stift 31 (EA) är ansluten till Vcc, som är en aktiv låg stift. Detta bör anslutas till Vcc när vi inte använder något externt minne. Stift 30 (ALE) och stift 29 (PSEN) används för att ansluta mikrokontroller till det externa minnet och Pin 31 ber mikrokontrollern att använda externt minne när den är ansluten till jord. Vi använder inget externt minne så vi kopplade Pin31 till Vcc.
Stift 9 (RST) är återställnings-PIN, som används för att återställa mikrokontrollern och programmet startar igen från början. Den återställer mikrokontrollern när den är ansluten till HIGH. Vi har använt standardåterställningskretsar, 10k ohm-motstånd och 1uF kondensator för att ansluta RST-stiftet.
Nu är den intressanta delen här att vi ansluter LED i omvänd ordning, betyder negativ ben med mikrokontroller PIN, eftersom mikrokontroller inte ger tillräckligt med ström för att lysa en LED, så här körs LED på den negativa logiken som när, pin P1_0 är 1 då kommer lysdioden att stängas AV och när stiftutgången är 0 kommer lysdioden att slås PÅ. När PIN-utgången är 0, fungerar den som marken och lysdioden lyser.
Kodförklaring
Rubrik REGX52.h har inkluderats för att inkludera de grundläggande registerdefinitionerna. Det finns många typer av variabler och konstanter i inbäddad C som int, char, osignerad int, float etc, du kan lära dig dem enkelt. Här använder vi osignerad int vars intervall är från 0 till 65535. Vi använder "for loop" för att skapa fördröjning, så att lysdioden kommer att vara PÅ under en tid (P1_0 = 0, negativ LED-logik) och och OFF (P1_0 = 1, negativ LED-logik) för fördröjd tid. I allmänhet, när "for loop" körs 1275 gånger, ger den en fördröjning på 1 ms, så vi har skapat en "delay" -funktion för att skapa DELAY och kallat den från huvudprogrammet (main ()). Vi kan fördröja fördröjningstiden (i ms) medan vi kallar "fördröjning" -funktionen från huvudfunktionen. I programmet betyder "While (1)" att programmet körs oändligt.
Jag förklarar kortfattat hur 1275 gånger "for" loop ger en fördröjning på 1 ms:
År 8051 kräver en maskincykel 12 kristallpulser att utföra och vi har använt 11.0592Mhz-kristall.
Så tid som krävs för en maskincykel: 12 / 11.0592 = 1.085us
Så 1275 * 1.085 = 1.3ms, 1275 gånger "for" loop ger nästan 1 ms fördröjning.
Den exakta tidsfördröjningen som produceras av "C" -programmet är mycket svår att beräkna, vid mätning från oscilloskop (CRO), för (j = 0; j <1275; j ++) ger fördröjning på nästan 1 ms.
Så vi kan förstå genom att helt enkelt koppla ihop LED med 8051 mikrokontroller, att med en enkel kodning kan vi interagera och styra hårdvaran genom programvara (programmering) med hjälp av mikrokontroller. Vi kan också manipulera varje port och stift av mikrokontroller genom programmering.