AVR-Einchip-Prozessor AT90Sxxxx
von ATMEL in praktischen Beispielen.
ANSI-Terminal programmierbarer Signalgenerator
Diese Anwendung stellt einen Rechteckgenerator für Signale von 5 bis 65.535 Mikrosekunden Dauer
und einstellbarer aktiver Dauer zur Verfügung. Die Angaben über die Dauer des Signals und
die aktive Dauer sind über ein ANSI-kompatibles Terminalprogramm über die serielle
Schnittstelle des STK200-Boards einstellbar.
Diese Anwendung erfordert:
das STK200-Board mit einem AT90S8515 an Bord; oder alternativ: ein 2313 mit SIO interface
(Neueinstellung von Teilen des Quellcodes sind dann ebenfalls erforderlich!),
ein Rechner mit einer freien COM-Schnittstelle und einem ANSI-kompatiblen Terminalprogram (wie z.B.
HyperTerminal für Windows),
Kabelverbindung zwischen dem Rechner und dem STK200-Board über mindestens eine
Zweidrahtverbindung.
Anwendung:
Starte das Terminalprogram and stelle die notwendigen Parameter ein: Direktverbindung über COM x,
9600 Baud, 8 Bit Daten, kein Paritätsbit, 1 Stop-Bit
Schalte das programmierte STK200-Board ein; das Terminal sollte auf schwarzen Hintergrund wechseln
und die Willkommen-Meldung ausgeben,
Gib die Dauer des Gesamtimpulses in Mikrosekunden ein (5 bis 65535) und schliesse mit der Eingabetaste
ab,
Gib die Dauer des aktiven Signals in Mikrosekunden ein (5 to 65534) und schliesse mit der Eingabetaste
ab,
Beobachte das Signal an Port D, Bit 2, des STK200-Boards!
Das Ändern des Quellcodes im Bereich der Textausgabe am Ende (vom Label 'ErrorStr' abwärts)
kann wegen zweier ernster Compiler-Bugs ziemlich üble Folgen haben.
Strings müssen immer eine gerade Anzahl von Zeichen haben!
Die Anzahl an Byte oder Char Konstanten pro Zeile muss ebenfalls geradzahlig sein!
Keine Strings und Konstanten auf einer Zeile mischen! Immer eine extra Zeile für beide Sorten!
Durchsuche nach dem Assemblieren das Listing nach der Meldung "Garbage at end of line!". Dies ist kein
fataler Fehler, also wird er nicht gemeldet und die Assemblierung abgebrochen! Alle nachfolgenden Labels
sind dann aber fehlerhaft.
Vergleiche das Label 'Check' am Ende des Compiler-Listings. Wenn es exakt auf sich selbst zeigt, ist
alles mit den Strings in Ordnung. Zeigt es nicht auf sich selbst, dann ist ein Fehler in den Strings und
in den Labeln. Das Programm tut dann nicht das, was es soll.
Die genannten Punkte sind durch einen Fehler des Compilers bei der Label-Adressierung bedingt. Eine
weitere, etwas seltenere Fehlerquelle, tritt bei der Verwendung von Semikolon in Textstrings oder in
Zeichenkonstanten auf. Fälschlicherweise fasst der Compiler dieses Zeichen auch innerhalb von Strings
oder Zeichenkonstanten als "Ende der Programmzeile" auf und ignoriert den Rest der Zeile. Zur Umgehung des
schwer zu findenden Fehlers das Semikolon als Dezimal- oder Hex-Konstante auf einer Extrazeile, zusammen
mit einem weiteren Buchstaben oder Zeichen, unterbringen.
Die goldene Regel der String-Programmierung: Strings IMMER hinter das Ende des ausführbaren
Codes platzieren. Bei Nichtbeachtung dieser Regel drohen verkehrte Programmlabels und der AVR macht
ziemlich interessante Dinge mit dem gefundenen falschen Code.