LED-Schnittstelle ist das erste, was man versuchen würde, wenn man mit einem Mikrocontroller anfängt. Hier in diesem Tutorial werden wir eine LED mit dem 8051-Mikrocontroller verbinden und ein C-Programm schreiben, um die LED zu blinken. Wir haben einen sehr beliebten Mikrocontroller AT89S52 aus der 8051-Familie von ATMEL verwendet.
Bevor wir ins Detail gehen, sollten wir uns einen kurzen Überblick über den Mikrocontroller AT89S52 verschaffen. Es ist ein 40-poliger Mikrocontroller mit 4 Ports (P0, P1, P2, P3), jeder Port hat 8 Pins. Wir können jeden Port aus der Sicht der Software als 8-Bit-Register betrachten. Jeder Pin mit einer Eingangs- / Ausgangsleitung bedeutet, dass jeder Pin sowohl zur Eingabe als auch zur Ausgabe verwendet werden kann, dh zum Lesen von Daten von einem Gerät wie einem Sensor oder zum Bereitstellen seines Ausgangs für ein Ausgabegerät. Einige Pins haben die Dual-Funktionalität, die in der Klammer im Pin-Diagramm unten erwähnt wurde. Dual funktional wie für Interrupt, Zähler, Timer etc.
AT89S52 verfügt über zwei Speichertypen: erstens über RAM mit 256 Byte Speicher und zweitens über EEPROM (elektronisch löschbarer und programmierbarer Nur-Lese-Speicher) mit 8 KB Speicher. RAM wird zum Speichern der Daten während der Ausführung eines Programms und EEPROM zum Speichern des Programms selbst verwendet. EEPROM ist der Flash-Speicher, in den wir das Programm eingebrannt haben.
Schaltplan und Erklärung
Wir verwenden Pin 1 von Port 1, um die LED anzuschließen. In der Embedded C-Programmierung können wir mit P1_0 auf die PIN 1 von Port 1 zugreifen. Wir haben einen Quarzoszillator mit einer Frequenz von 11,0592 MHz an die PIN 19 und 18 angeschlossen, dh XTAL1 und XTAL2. Der Kristalloszillator wird verwendet, um Taktimpulse zu erzeugen, und der Taktimpuls wird verwendet, um den Mittelwert für die Zeitberechnung bereitzustellen, der für die Synchronisation aller Ereignisse obligatorisch ist. Diese Art von Kristallen wird in fast allen modernen digitalen Geräten wie Computern, Uhren usw. verwendet. Am häufigsten wird Kristall als Quarz verwendet. Es ist eine Resonanzoszillatorschaltung und Kondensatoren werden verwendet, um den Kristall zu schwingen, also haben wir hier 22pf Kondensatoren angeschlossen. Sie können über "Resonanzkreise" lesen, um mehr zu erfahren.
Das Schaltbild für die LED-Schnittstelle mit dem 8051-Mikrocontroller 89S52 ist in der obigen Abbildung dargestellt. Pin 31 (EA) ist mit Vcc verbunden, einem aktiven Low-Pin. Dies sollte mit Vcc verbunden werden, wenn wir keinen externen Speicher verwenden. Pin 30 (ALE) und Pin 29 (PSEN) werden verwendet, um den Mikrocontroller mit dem externen Speicher zu verbinden, und Pin 31 weist den Mikrocontroller an, einen externen Speicher zu verwenden, wenn er mit Masse verbunden ist. Wir verwenden keinen externen Speicher, also haben wir Pin31 mit Vcc verbunden.
Pin 9 (RST) ist die Rücksetz-PIN, mit der der Mikrocontroller zurückgesetzt wird und das Programm erneut von vorne beginnt. Es setzt den Mikrocontroller zurück, wenn er an HIGH angeschlossen ist. Wir haben eine Standard-Reset-Schaltung, einen 10-kOhm-Widerstand und einen 1-uF-Kondensator verwendet, um den RST-Pin zu verbinden.
Der interessante Teil hier ist, dass wir die LED in umgekehrter Richtung anschließen, was bedeutet, dass der negative Zweig mit der PIN des Mikrocontrollers verbunden ist, da der Mikrocontroller nicht genügend Strom liefert, um eine LED zu leuchten. Daher läuft die LED hier auf der negativen Logik, wie wenn Pin P1_0 1 ist Dann wird die LED ausgeschaltet und wenn der Pin-Ausgang 0 ist, wird die LED eingeschaltet. Wenn der PIN-Ausgang 0 ist, verhält er sich wie Masse und die LED leuchtet.
Code Erklärung
Der Header REGX52.h wurde hinzugefügt, um die grundlegenden Registerdefinitionen aufzunehmen. Es gibt viele Arten von Variablen und Konstanten in eingebettetem C wie int, char, unsigned int, float usw., Sie können sie leicht lernen. Hier verwenden wir int ohne Vorzeichen, dessen Bereich von 0 bis 65535 reicht. Wir verwenden "for loop" zum Erzeugen einer Verzögerung, so dass die LED für einige Zeit EIN (P1_0 = 0, negative LED-Logik) und AUS (P1_0 = 1) leuchtet, negative LED-Logik) für verzögerte Zeit. Wenn „for loop“ 1275-mal ausgeführt wird, ergibt sich im Allgemeinen eine Verzögerung von 1 ms. Daher haben wir die Funktion 'delay' zum Erstellen von DELAY erstellt und vom Hauptprogramm (main ()) aufgerufen. Wir können die Verzögerungszeit (in ms) überschreiten, während wir die Verzögerungsfunktion von der Hauptfunktion aus aufrufen. Im Programm bedeutet "While (1)", dass das Programm unendlich ausgeführt wird.
Ich erkläre kurz, wie 1275-maliger Lauf der "for" -Schleife eine Verzögerung von 1 ms ergibt:
In 8051 erfordert 1 Maschinenzyklus 12 Kristallimpulse, um ausgeführt zu werden, und wir haben 11,0592 MHz Kristall verwendet.
Zeitaufwand für 1 Maschinenzyklus: 12 / 11.0592 = 1.085us
1275 * 1,085 = 1,3 ms, 1275-fache "for" -Schleife ergibt fast 1 ms Verzögerung.
Die genaue Zeitverzögerung, die durch das Programm "C" erzeugt wird, ist sehr schwer zu berechnen, wenn vom Oszilloskop (CRO) gemessen wird, da (j = 0; j <1275; j ++) eine Verzögerung von fast 1 ms ergibt.
Wenn wir LED einfach mit dem 8051-Mikrocontroller verbinden, können wir verstehen, dass wir mit einer einfachen Codierung die Hardware durch Software (Programmierung) unter Verwendung eines Mikrocontrollers interagieren und steuern können. Außerdem können wir jeden Port und Pin des Mikrocontrollers durch Programmierung manipulieren.