stationeers.de Mod-Werkstatt · Dominik1199
EN Anmelden
  1. Start
  2. IC10-Akademie
  3. Tag 19

Tag 19 von 365 · Einsteiger · Monat 1: Erste Schritte

Zählen und Schleifen

Ein Register als Zähler: Takte zählen, zurücksetzen, Schleifen mit Abbruchbedingung – und warum ein Zähler oft besser ist als sleep.

Lektion 10 Min. Woche 3

Das lernst du heute

  • Zähler hochzählen und zurücksetzen
  • Schleife mit Abbruchbedingung
  • Takte zählen

sleep macht den Chip taub. Willst du trotzdem Zeit messen, zählst du selbst mit. Die Hauptschleife mit yield am Anfang läuft genau einmal pro Takt – ein Register, das jedes Mal um eins wächst, ist eine Uhr.

Ein Zähler pro Takt

start:
yield
add r0 r0 1          # Takte seit dem Start
div r1 r0 2          # 2 Takte = 1 Sekunde
s db Setting r1      # Sekunden aufs Gehaeuse
j start

Alle Register stehen beim Einsetzen des Chips auf 0. Darum zählt r0 ohne eigenen Startwert von null los.

Zurücksetzen

Ein Zähler, der nie zurückgesetzt wird, wächst ewig. Zwei Wege:

l r2 d1 Activate     # Taste gedrueckt?
beqz r2 weiter       # nein: normal weiter
move r0 0            # ja: Zaehler auf null
weiter:

Oder automatisch nach einer festen Zahl: mod r0 r0 20 lässt den Zähler 0, 1, … 19, 0, 1 … laufen. So entsteht ein Takt, der sich alle zehn Sekunden wiederholt.

Schleife mit Abbruchbedingung

Eine Schleife muss nicht die Hauptschleife sein. Innerhalb eines Takts kann der Chip etwas wiederholen, bis eine Bedingung erfüllt ist – hier die Summe 1 + 2 + … + 10:

move r3 0            # Summe
move r4 1            # Laufzahl
summe:
add r3 r3 r4
add r4 r4 1
ble r4 10 summe      # bis einschliesslich 10

Das sind 30 Befehle, sie passen in einen Takt.

Achtung

Pro Takt laufen höchstens 128 Befehle. Braucht eine Schleife mehr, macht der Chip mitten darin Pause und setzt im nächsten Takt genau dort fort. Es gibt keinen Fehler, aber die Hauptschleife läuft dann nicht mehr einmal pro Takt – und jede Zeitmessung mit Takten stimmt nicht mehr.

Zähler statt sleep

Mit einem Zähler wartest du und bleibst trotzdem wach. Soll ein Licht nach dem Tastendruck zehn Sekunden brennen, setzt die Taste einen Zähler auf 20, und jeder Takt zieht eins ab. Solange er über null ist, bleibt das Licht an – und der Chip sieht in der Zwischenzeit jeden weiteren Tastendruck.

Schaubild

Takte und yield auf einer Zeitleiste Takt 0 · 0,0 s Takt 1 · 0,5 s Takt 2 · 1,0 s Takt 3 · 1,5 s 5 Befehle yield 5 Befehle yield 5 Befehle yield 128 Befehle ohne yield: Limit Gerätewerte ändern sich nur zwischen zwei Takten.
Jeder Durchlauf der Hauptschleife dauert genau einen Takt. Wer mitzählt, weiß, wie viel Zeit vergangen ist.

Übung

Aufgabe

Baue einen Betriebszähler: d0 ist eine LED-Anzeige, d1 eine Taste.

  • r0 zählt die Takte, eins pro Takt.
  • Die Anzeige zeigt die Laufzeit in Sekunden (Takte / 2).
  • Ein Druck auf die Taste (Activate = 1) setzt den Zähler auf 0 zurück.

Hinweise

Hinweis 1

Zählen: add r0 r0 1 direkt nach dem yield.

Hinweis 2

Taste lesen, mit beqz am Zurücksetzen vorbeispringen, wenn sie nicht gedrückt ist.

Hinweis 3

Anzeige: div r2 r0 2, dann s d0 Setting r2.

Quiz

4 Fragen. Ab 60 % ist das Quiz bestanden – die Auswertung macht der Server.

Tag abschließen

  • Übung im Simulator bestanden
  • Quiz mit mindestens 60 % bestanden

Ohne Konto wird der Fortschritt nur in diesem Browser gespeichert.

Fehler in dieser Lektion melden

Zum Melden bitte anmelden. Anmelden

Esc
↑ ↓ wählenEnter öffnen/ öffnet die Suche überall