Inhaltsverzeichnis:
- Schritt 1: Anforderungen
- Schritt 2: Erstellen des Programmierers
- Schritt 3: Installieren der Programmiersoftware
- Schritt 4: Programmieren des Chips
- Schritt 5: Montage
- Schritt 6: Code-Erklärung
- Schritt 7: Zusätzliche Ressourcen
Video: Einführung in die 8051-Programmierung mit AT89C2051 (Gastdarsteller: Arduino) - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:21
Der 8051 (auch als MCS-51 bekannt) ist ein MCU-Design aus den 80er Jahren, das bis heute beliebt ist. Moderne 8051-kompatible Mikrocontroller sind von mehreren Anbietern in allen Formen und Größen sowie mit einer Vielzahl von Peripheriegeräten erhältlich. In diesem anweisbaren betrachten wir die AT89C2051 MCU von Atmel.
AT89C2051 ist ein kleiner (2Kbyte Flash, 128byte RAM), günstiger (~$1,40 pro Chip) Mikrocontroller. Eigenschaften:
- 2,7-6V Betrieb
- 15 I/O-Leitungen
- 2 Timer (16 Bit)
- Interne und externe Interrupts
- UART
- Analoger Komparator auf dem Chip
- Bis zu 2MIPS mit 24MHz Takt
Schritt 1: Anforderungen
Anforderungen:
- Linux-PC (erforderliche Software: Arduino IDE, git, make, sdcc)
- Arduino UNO
- AT89C2051-Chip (DIP20-Paket)
- 20-polige ZIF-Buchse
- Optokoppler (vorzugsweise MOSFET-Ausgang)
- Arduino Prototyping-Schild
- 12V Netzteil
- 5V Netzteil
- 16MHz Quarzoszillator
- 2x 30pF Kondensator
- 100nF Kondensator
- Diode (zB: 1N400X)
- Widerstände (1K, 3K3)
- Protoboard
- Jumper
- Kupferkabel
Auf benötigte Software prüfen:
welche python3
welche machen welche sdcc welche git
Schritt 2: Erstellen des Programmierers
Dieser Abschnitt wird kurz sein, da ich vor einiger Zeit mein Programmierschild gebaut habe. Ich habe den Schaltplan und Bilder der zusammengebauten Platine beigefügt. Das PDF des Schaltplans finden Sie im Repository.
Sie müssen die Programmierplatine programmieren:
1. Klonen Sie das Repository.
git-Klon
2. Öffnen Sie die Datei AT89C2051_programmer/AT89_prog/AT89_prog.ino in der Arduino IDE.
3. Erstellen Sie die Skizze und laden Sie sie aus der Arduino-IDE hoch.
Schritt 3: Installieren der Programmiersoftware
1. Erstellen Sie eine virtuelle Python-Umgebung.
python3 -m venv venv
. venv/bin/aktivieren
2. Installieren Sie at89overlord. at89overlord ist ein Open-Source-Programmierer für den von mir geschriebenen AT89C2051-Chip. Seinen Quellcode finden Sie hier.
pip installieren at89overlord
3. Überprüfen Sie die Installation.
at89overlord -h
Schritt 4: Programmieren des Chips
1. Klonen Sie ein einfaches Blinkprojekt.
cd ~
git-Klon https://github.com/piotrb5e3/hello-8051.git cd hello-8051/
2. Erstellen Sie die Anwendung.
machen
3. Verbinden Sie Arduino mit dem PC, schließen Sie die 12-V-Versorgung an, setzen Sie den AT89C2051-Chip in die ZIF-Buchse.
4. Suchen Sie den seriellen Port von Arduino.
ls /dev/tty*
5. Laden Sie die erstellte IntelHex-Datei auf den Chip hoch. Wenn sich der Port Ihres Arduino von /dev/ttyACM0 unterscheidet, müssen Sie den richtigen Wert mit dem Befehlszeilenparameter -p übergeben.
at89overlord -f./hello.ihx
Schritt 5: Montage
Bauen Sie die Schaltung nach Schema zusammen. Eine PDF-Version finden Sie im Repository.
Sie sollten die grüne LED mit einer Frequenz von etwa 0,5 Hz blinken sehen.
Schritt 6: Code-Erklärung
#enthalten
#enthalten
Wir beginnen damit, den AT89X051-Header von sdcc einzubinden. Es enthält Makros für die Interaktion mit Registern, als wären es Variablen. Wir schließen auch stdint.h ein, das Definitionen der Integer-Typen uint8_t und uint16_t enthält.
// Angenommen, der Oszillator ist 16 MHz
#define UNTERBRECHUNGEN_PER_SECOND 5208
Ein Interrupt tritt auf, wenn der Timer0 überläuft. Es ist als einzelner 8-Bit-Timer konfiguriert, so dass dies alle 2^8 Prozessorzyklen passiert. Ein Prozessorzyklus dauert 12 Taktzyklen, und somit kommen wir zu 16000000/12/2^8 = 5208,33333.
flüchtig uint8_t led_state = 0;
flüchtig uint16_t timer_counter = INTERRUPTS_PER_SECOND;
Wir deklarieren die LED-Zustandssteuerungs- und Interrupt-Zählervariablen.
void Timer0_ISR(void) _interrupt (1) {
Timer_Zähler--; if (timer_counter == 0) {led_state =!led_state; timer_counter = INTERRUPTS_PER_SECOND; } }
Jedes Mal, wenn der Timer0 überläuft, wird der Zähler verringert. Wenn es gleich Null ist, wird es zurückgesetzt und der LED-Zustand wird geändert. Dies geschieht etwa einmal pro Sekunde, was zu einer LED-Blinkfrequenz von ~0,5 Hz führt.
int main() {
TMOD = 0x3; // Timer-Modus - 8bits, kein Prescaler. Freq = OSCFREQ/12/2^8 TL0 = 0; // Zähler löschen TH0 = 0; // Register löschen TR0 = 1; // Timer auf Ausführung setzen. ET0 = 1; // Interrupt setzen. EA = 1; // Globalen Interrupt setzen. while(1) { if (led_state) { P1 = 0xFF; aufrechtzuerhalten. Sonst {P1 = 0x00; } } }
Wir konfigurieren das Timer-Modul und warten auf Änderungen in der LED-Zustandssteuervariable. TMOD ist das Timer-Modus-Steuerregister. TL0 und TH0 sind Timer0-Steuerregister. ET0 ist das Enable-Timer0-Bit im Timer Control Register (TCON). TR0 und EA sind Bits im Interrupt-Enable-Register (IE).
Schritt 7: Zusätzliche Ressourcen
- AT89C2051 Datenblatt:
- C-Compiler für kleine Geräte (sdcc):
- 8051-Ressourcen:
- AT89C2051-Programmierer-Repository:
- hello-8051-Repository:
Empfohlen:
So verbinden Sie die Android-Anwendung mit AWS IOT und verstehen die Spracherkennungs-API: 3 Schritte
So verbinden Sie die Android-Anwendung mit AWS IOT und verstehen die Spracherkennungs-API: In diesem Tutorial erfahren Sie, wie Sie die Android-Anwendung mit dem AWS IOT-Server verbinden und die Spracherkennungs-API verstehen, die eine Kaffeemaschine steuert. Die Anwendung steuert die Kaffeemaschine über Alexa Sprachdienst, die c
Einführung in Manipulatoren: 8 Schritte (mit Bildern)
Einführung in Manipulatoren: Den richtigen Manipulator für eine Herausforderung zu entwickeln, ist einer der schwierigsten Teile des FIRST Robotics Competition (FRC). In meinen vier Studienjahren war das immer der größte Schwachpunkt meines Teams. Obwohl sich die Spielherausforderung in FRC von Jahr zu Jahr ändert
TI-83 oder 84 Einführung in die Programmerstellung: 5 Schritte
TI-83 oder 84 Einführung in die Programmerstellung: Hallo, dies ist eine Anleitung, die die Grundlagen der Programmierung auf Ihrem TI-83 84-Rechner erklärt. Außerdem könnte ich je nach Feedback andere instructables zu spezifischeren Dingen machen. Sorry für die Bilder, ich bin schlecht mit einer Kamera
So bauen Sie eine Uhr, die die Zeit an die Wand projiziert – wikiHow
So bauen Sie eine Uhr, die Zeit an die Wand projiziert: Dieses Instructable zeigt Ihnen, wie Sie eine Projektoruhr bauen. Mit diesem Gerät können Sie die Zeit an die Wand projizieren. Basierend auf einem kleinen LCD-Wecker (nicht zu klein, sondern kann nicht projiziert und bearbeitet werden) ist dies eine gute Möglichkeit
Einführung in VB Script: ein Anfängerleitfaden: Teil 2: Arbeiten mit Dateien: 13 Schritte
Intro to VB Script: a Beginners Guide: Teil 2: Arbeiten mit Dateien: Nun, in meinem letzten VBScript instructable, ging ich darüber nach, wie man ein Skript erstellt, um Ihr Internet abzuschalten, um Xbox360 zu spielen. Heute habe ich ein anderes Problem. Mein Computer wurde zu zufälligen Zeiten heruntergefahren und ich möchte jedes Mal protokollieren, wenn der Computer