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
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Mikrocontroller | ein kleiner Chip mit Prozessor, Speicher und Anschlüssen | |
| Register | ein kleiner Speicher im Chip, hier acht Bits breit | |
| Bit | eine einzelne 0 oder 1, Bit 0 steht rechts | |
| Maske | eine Zahl, die bestimmte Bits auswählt | 1 << 3 |
| Simulator | ein 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
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| Wert des Bits | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
| Register 0b00001010 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
| Zählt mit | 8 | 2 |
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
docker exec jupyter python3 steps/registers.pyHier 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
| Aufgabe | Rechnung | Vorher | Nachher |
|---|---|---|---|
| Bit 0 setzen | wert | (1 << 0) | 0b00001010 | 0b00001011 |
| Bit 1 löschen | wert & ~(1 << 1) | 0b00001011 | 0b00001001 |
| Bit 3 umschalten | wert ^ (1 << 3) | 0b00001001 | 0b00000001 |
| Bit 0 lesen | (wert >> 0) & 1 | 0b00000001 | 1 |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Bits mit Masken ändern
# 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
docker exec jupyter python3 steps/bits.pyHier 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
# 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.