Forum: Mikrocontroller und Digitale Elektronik .set Direktive


von Andy (Gast)


Lesenswert?

Hallo.Ich weise am Anfang meines Programms mit der .set Anweisung einem
Label einen Wert zu.Wenn ich diesen Wert in einem Unterprogramm dann
wieder mit der .set Anweisung ändere,bezieht sich diese änderung
irgendwie nur auf das Unterprogramm.Wenn ich wieder ins Hauptprogramm
wechsle,gilt wieder der alte Wert(gesehen anhand der Simulation).Wäre
nett,wenn mir jemand sagen könnte,wie man eine Variable jederzeit
ändern kann,und diese änderung dann auch überall wirksam ist.
mfg
Andy

von harry (Gast)


Lesenswert?

je nach programmiersprache. bei manchen müssen variablen global
vereinbart werden, damit sie auch in subroutinen geändert werden
können. womit codest du denn?

von Andy (Gast)


Lesenswert?

Hallo.Hab ich vergessen.Programmiert wird in Assembler.Wie bekommt man
den in dieser Programmiersprache globale Variablen hin?
Andy

von harry (Gast)


Lesenswert?

oje, null plan von assembler.
ich bin ein fauler hund und strick alles in bascom.
macht wenig arbeit und funzt trotzdem (meistens)

gruss, faultier harry

von Peter D. (peda)


Lesenswert?

.set ist eine Preprozessoranweisung und hat bestimmt auch ein Äquivalent
in Basic.

Es ist zeilenorientiert, d.h. in allen Zeilen vor der .set-Anweisung
ist es unbekannt und in allen Zeilen danach ist es bekannt und hat den
zugewiesenen Wert.

Weist man dem gleichen Symbol in späteren Zeilen einen anderen Wert zu,
ist dieser wiederum nur in allen Zeilen danach gültig.

Das kann leicht zu Verwirrungen führen, deshalb sollte man für andere
Werte auch immer andere Symbolnamen verwenden.
Deshalb nimmt man in der Regel besser die .equ Anweisung, die eine
versehentliche Doppelzuweisung von Symbolen anmeckert.


Peter

von Andy (Gast)


Lesenswert?

Hallo.Danke für die antworten.Aber wegen zu wenig Speicher(AT1200)
müsste ich eine Variable benutzen,da ein grösseres Unterprogramm 2 mal
durchlaufen werden soll,aber mit zwei verschiedenen Werten.
Wenns gar nicht geht,muss ich wohl einen grösseren AT nehmen.
Andy

von Peter D. (peda)


Lesenswert?

Mit .set definierte Symbole sind doch keine Variablen und belegen
demzufolge auch keinen Speicherplatz !

Sie helfen nur einen Assemblertext lesbarer zu gestalten.


Variablen kannst Du im SRAM oder in Registern ablegen, z.B.

.def MY_VAR = r16



Peter

von Gerhard Schmidt (Gast)


Lesenswert?

Wie ich das sehe, soll ein Unterprogramm ZUR LAUFZEIT mit zwei
verschiedenen Werten aufgerufen werden. Das geht nur mit Peter's
Methode. .SET erzeugt keinen irgendwie geartetem Code, der zur Laufzeit
irgendetwas bewirken würde.

MfG
Gerd

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.