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