Hi@all,
ich bin dabei, einen LED-Blinker zu erstellen, bei dem eine LED 1s an
und 1s aus geht. Alles sehr einfach gehalten, also ohne Interrupts und
ohne Unterprogrammen.
Das Programm habe ich modulweise aufgebaut, d.h. die Zeitschleife, die
1s Zeit benötig habe ich zuerst erstellt.
Eben diese besteht ferner aus einer 16-bit Schleife, in der eine 8-bit
Zeitschleife durchgeführt wird. Mit meinem Takt (1MHz) und meinen
Befehlen sind die Wiederholwerte für die 8-Bit Schleife 166 und für die
16-bit Schleife 2000. Da der 16-bit Wert natürlich nicht in ein 8-bit
REgister passt, habe ich das Register R25:R24 als WH:WL mit der
.DEF-Direktive definiert.
Allerdings erzählt der Assembler mir beim zusammenbauen, dass er kein
Label/Variable/Konstante WL bzw. WH kennt.
Habt ihr diesbezüglich eine Idee?
Hier ein Code-Ausschnitt:
1 | .DEF Tmp1 = r16 ; Temp-Definition - allgemeines Register
|
2 | .DEF TCnt1 = r17 ; hier das Register gewählen
|
3 | .def WL = r24 ; unterer Teil des 16-bit Doppelregisters
|
4 | .def WH = r25 ; oberer Teil des 16-bit Doppelregisters
|
5 | ;---------- Wertnamen ----------------------------------------------------------
|
6 | .EQU G1 = 166 ; hier die Wiederholungszahl & damit die Zeit der
|
7 | ; inneren Schleife eingetragen
|
8 | .EQU G2 = 2000 ; hier die Wiederholungszahl der äußeren 16-bit
|
9 | ; Schleife eingetragen
|
10 | ;---------- Initialisierungen --------------------------------------------------
|
11 | ldi Tmp1, HIGH(G2) ; die große
|
12 | out WH, Tmp1 ; Zahl wird
|
13 | ldi Tmp1, LOW(G2) ; in das Doppel-
|
14 | out WL, Tmp1 ; register geladen
|