Einstieg: "Da blinkt etwas"
Das erste Programm hat außer dem Einbinden von „easyasm“ nur drei Programmzeilen.
Und trotzdem wird daraus ein vollständiger LED-Blinker.
Ein Klick auf das Compile-Symol (links unter dem Editorfenster) übersetzt das Programm
und überträgt es in den Mikrocontroller. Man sieht das Flackern der grünen LED während
der kurzen Übertragung. Dann startet das Programm.
Die grüne LED blinkt genau vier Mal. Nicht gesehen? Dann ist ein Neustart sinnvoll.
Dazu gibt es die Reset-Schaltfläche. Ein Klick genügt, und der Controller erhält ein
Reset-Signal. Das Programm startet neu und man kann die vier LED-Blinker sehen.
Ein Blick auf den Quelltext macht klar, was hier passiert. In der ersten Zeile wird
ein Zähler geladen. Ldi ist ein Assembler-Befehl und bedeutet „lade direkt“, gemeint
ist: Lade die als Konstante angegebene Zahl in das angegebene Register. Die Konstante
ist die Zahl 4. Das Register ist in diesem Fall das Register R18, aber das muss man
hier noch gar nicht wissen, denn EASYASM hat ihm den Namen „counter“ zugewiesen. Damit
wird die Zeile verständlich: Lade eine 4 in den Counter, damit das Programm viermal
blinkt.
Wenn das so ist, kann man an dieser Stelle ja mal etwas ausprobieren. Der Quelltext
soll so geändert werden, dass die grüne LED nun zehnmal blinkt. Die Zeile heißt also
nun:
ldi counter, 10
Neu Kompilieren und Übertragen, es blinkt zehnmal. Es gehen auch andere Zahlen, alles
zwischen 0 und 255 ist möglich. Mehr als 255 geht nicht, weil in das Register nur ein
Byte passt.
Ein Blick auf die zweite Zeile des Programms zeigt, was mit dem Counter passiert.
Er wird an das Blink-Makro übergeben. Die Zeile „blink green, counter“ erklärt sich
selbst. Blink ist das Makro, mit dem die LED zum Blinken gebracht wird, green und counter
sind zwei Konstanten, mit denen es arbeitet. Da kommt natürlich sofort eine Idee auf:
Ob es auch mit „red“ geht? Ausprobieren, es funktioniert! Das Blink-Makro kann also
wahlweise die grüne oder die rote LED blinken lassen.
Und am Ende steht „end“. Da fragt man sich natürlich, ab das ein echter Assembler-Befehl
ist oder ein Makro. Tatsächlich ist es ein Makro, das dem Mikrocontroller in eine
Endlos-Schleife zwingt, einfach nur damit er nicht irgendwelche vergessenen Befehle ausführt,
die zufällig noch im Flash liegen.
Was passiert eigentlich, wenn man mal einen Fehler macht? Man könnte es ja mal mit der Farbe
„blue“ versuchen, in der vagen Hoffnung, dass die Hardware dann entsprechend mutiert.
Aber wenn man das versucht, gibt es eine Fehlermeldung, einfach weil „blue“ nicht definiert ist:
Error ==> sbi ddrb, BLUE[1447243411997869161.asm,4] 007: Undefined constant ...