Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage: Aus welchem Grund wird "WL" bzw. "WH" als nicht definiert gemeldet?


von Martin L. (mcm)


Lesenswert?

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

von chris (Gast)


Lesenswert?

tach,

naja du schiebst von ein register ins andere und das wird mit

  mov erledigt.

von chris (Gast)


Lesenswert?

Nachtrag

lass jeweils die 2te Zeile würde auch funzen

  ldi WH, HIGH(G2)  ; die große Zahl wird
  ldi WL, LOW(G2)  ; in das Doppelregister geladen

von Martin L. (mcm)


Lesenswert?

Ok, vielen Dank. Das war ein klassischer Denkfehler! Die Methode ist 
weitaus eleganter :).

SP (das Stackpointer-Register) dürfte dann aber ein 
Sonderfunktions-Register sein, oder?

von spess53 (Gast)


Lesenswert?

Hi

>SP (das Stackpointer-Register) dürfte dann aber ein
>Sonderfunktions-Register sein, oder?

Das ist ein IO-Register. Also genau so anzusprechen wie PORTx... .

MfG Spess

von Martin L. (mcm)


Lesenswert?

Alles klar, dann ist das jetzt verstanden. :)

Vielen Dank für die Hilfe!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.