Inhaltsverzeichnis:

Einführung in die 8051-Programmierung mit AT89C2051 (Gastdarsteller: Arduino) - Gunook
Einführung in die 8051-Programmierung mit AT89C2051 (Gastdarsteller: Arduino) - Gunook

Video: Einführung in die 8051-Programmierung mit AT89C2051 (Gastdarsteller: Arduino) - Gunook

Video: Einführung in die 8051-Programmierung mit AT89C2051 (Gastdarsteller: Arduino) - Gunook
Video: 8051 Kurs 2024, November
Anonim
Einführung in die 8051-Programmierung mit AT89C2051 (Gastdarsteller: Arduino)
Einführung in die 8051-Programmierung mit AT89C2051 (Gastdarsteller: Arduino)

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
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

Aufbau des Programmierers
Aufbau des Programmierers
Aufbau des Programmierers
Aufbau des Programmierers
Aufbau des Programmierers
Aufbau 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

Installieren der Programmiersoftware
Installieren der Programmiersoftware
Installieren der Programmiersoftware
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

Programmieren des Chips
Programmieren des Chips
Programmieren des Chips
Programmieren des Chips
Programmieren des Chips
Programmieren des Chips
Programmieren des Chips
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

Montage
Montage
Montage
Montage
Montage
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

Code-Erklärung
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: