mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik .set Direktive


Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Andy (Gast)
Datum:

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

Autor: harry (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andy (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gerhard Schmidt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.