Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Register und Bits im Mikrocontroller

Nach dieser Lektion: Ich kann einzelne Bits in einem Register lesen, setzen, löschen und umschalten.

Lektion, 50 Min.2 BefehleEmbedded-Systems-Lab: Register, Pins, PWM und Interrupts an einem simulierten Chip

Was ein Register in einem Chip ist

Ein Register ist ein winziger Speicher im Mikrocontroller. Jedes Bit darin steuert etwas, zum Beispiel ob ein Anschluss Strom führt.

Ein Chip dieser Art steckt in einem Fahrradlicht, einer Heizungsregelung und einem Rauchmelder. Wer Register lesen und ändern kann, steuert das Gerät. Das lernen Sie in dieser Lektion.

Am Ende dieser Lektion

Notiz

Ich kann einzelne Bits in einem Register lesen, setzen, löschen und umschalten.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Mikrocontrollerein kleiner Chip mit Prozessor, Speicher und Anschlüssen
Registerein kleiner Speicher im Chip, hier acht Bits breit
Biteine einzelne 0 oder 1, Bit 0 steht rechts
Maskeeine Zahl, die bestimmte Bits auswählt1 << 3
Simulatorein Programm, das ein Gerät nachbildet

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Register ist ein Byte mit acht Bits

Ein Register im Lab ist ein Byte, also acht Bits. Jedes Bit ist 0 oder 1. Man zählt die Bits von rechts: Bit 0 ist das ganz rechte, Bit 7 das ganz linke.

Alle Register zusammen sind die Schnittstelle zur Hardware. Ein Bit im richtigen Register kann zum Beispiel eine Lampe einschalten.

Beispiel: Bits und ihre Werte

Bit76543210
Wert des Bits1286432168421
Register 0b0000101000001010
Zählt mit82

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Das Lab zeigt einen ausgedachten Chip

Das Lab enthält einen Simulator: ein kleines Python-Programm, das einen ausgedachten 8-Bit-Chip nachbildet. Es ist kein echtes Gerät. Echte Chips haben andere Register und viele weitere Regeln.

Der Chip hat sieben Register: DDR, PORT, PIN, TCCR, TCNT, OCR und IFR. Nach einem Reset steht jedes auf 0. Die Skripte geben ihre Wörter auf Englisch aus, die Zahlen sind für alle gleich.

Alle sieben Register nach dem Reset zeigen

Befehl
docker exec jupyter python3 steps/registers.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Maske wählt aus, welches Bit sich ändert

Eine Maske ist eine Zahl mit einer 1 an jedem Bit, das Sie meinen. Die Maske für Bit 3 schreibt man 1 << 3: Die 1 wird um drei Stellen nach links geschoben.

Mit einer Maske ändern Sie ein Bit, ohne die anderen zu berühren. Das ist wichtig, denn in einem Register steuert jedes Bit etwas anderes.

Beispiel: vier Rechenarten für Bits

AufgabeRechnungVorherNachher
Bit 0 setzenwert | (1 << 0)0b000010100b00001011
Bit 1 löschenwert & ~(1 << 1)0b000010110b00001001
Bit 3 umschaltenwert ^ (1 << 3)0b000010010b00000001
Bit 0 lesen(wert >> 0) & 10b000000011

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Bits mit Masken ändern

Code: python
# Ein Register mit acht Bits, als Zahl geschrieben
port = 0b00001100
print("Start:           ", format(port, "08b"))
port = port | (1 << 0)        # ODER setzt Bit 0
print("Bit 0 gesetzt:   ", format(port, "08b"))
port = port & ~(1 << 2)       # UND mit der umgekehrten Maske löscht Bit 2
print("Bit 2 gelöscht:  ", format(port, "08b"))
port = port ^ (1 << 7)        # XOR schaltet Bit 7 um
print("Bit 7 umgeschaltet:", format(port, "08b"))
# Ändern Sie die Bitnummern und starten Sie erneut.

Das Lab-Skript zeigt dieselben Rechnungen

Das Skript bits.py setzt ein Register auf 0b00001010. Dann setzt es Bit 0, löscht Bit 1 und schaltet Bit 3 um. Danach schaltet es Bit 3 noch einmal um.

Die Zeilen heißen start, set bit 0, clear bit 1, toggle bit 3 und toggle again. Zweimal Umschalten bringt den alten Wert zurück.

Ein Register Schritt für Schritt ändern

Befehl
docker exec jupyter python3 steps/bits.py

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Einzelne Bits lesen

Code: python
# Ein einzelnes Bit lesen: verschieben, dann mit 1 maskieren
status = 0b01010000
for nr in range(8):
    bit = (status >> nr) & 1
    print("Bit", nr, "ist", bit)
# Welche Bits sind gesetzt? Prüfen Sie es mit Ihrer Antwort.

Ein häufiger Fehler

Warnung

Viele zählen die Bits von links und nennen das linke Bit Bit 0. In Registern ist Bit 0 aber das rechte, das mit dem Wert 1. Zählen Sie darum immer von rechts, bevor Sie eine Maske bauen.

Über dieses Lab und seinen Quellcode: Embedded-Systems-Lab: Register, Pins, PWM und Interrupts an einem simulierten Chip

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.