www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Toggle Bit in Register


Autor: Julien M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

für eine Statusabfrage möchte ich folgendes realisieren.

bei jedem Aufruf des Programms soll ein Bit0 im Register (status)
seinen Wert ändern.

d.h.

1. Programmaufruf: 0x00000000
2. Programmaufruf: 0x00000001
3. Programmaufruf: 0x00000000

...

Eigentlich recht simpel, leider konnte ich keinen passenden Befehl
finden und auch die Suche ergab keine Treffer.

Software: Assembler
Hardware: ATmega8515

Gruß Julien

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
temp ist ein beliebiges Register, togglebit das zu toggelnde:

ldi temp, 1
eor togglebit, temp

Autor: Julien M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

jo hast recht, es ist so einfach wenn man darauf kommt. :)
Danke es funktioniert.

Autor: Santa Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wenn Du Dich fragst, ob es vielleicht auch ohne
"temp"-Hilfsregister geht: Ja, und zwar so:

inc  togglebit
andi togglebit, 1


Aber geht es auch ohne "temp" und ohne "1"-Konstante? Wieder ja!
Auch so kannst Du immer zwischen 0 und 1 hin- und herschalten:

dec  togglebit
neg  togglebit


Zwischen den beiden obigen Sequenzen gibt es jedoch einen theoretischen
Unterschied.  Falls togglebit bei Eintritt in die dec-neg-Sequenz weder
den Wert 0 noch den Wert 1 hat, dann hat es am Schluß einen Wert, der
ebenfalls weder 0 noch 1 ist (Beispiel: bei 73 rein kommt -72 raus).
Die dec-neg-Sequenz verhält sich also "Garbage-In-Garbage-Out"-mäßig.
 Die inc-andi-Sequenz ist dagegen "gutmütig": Am Ende steht in
togglebit stets entweder 0 oder 1, auch wenn togglebit vorher gleich 29
war.

Autor: Julien M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Allerdings stellt sich mir die Frage, ob all die lösungen noch
funktionieren wenn die restlichen Bits dieses Status-Registers auch
schon einen Wert angenommen haben.

Bsp. Statusregister

0x01001101

Bit 0 soll hierbei das Togglebit sein.
Hinweis: Die Bits 1-7 können durch andere Unterprogramme gesetzt bzw.
gelöscht werden. Ich denke man benötigt dafür eine Art Maske, die man
über dieses Register legt.

Gruß Julien

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was haltet Ihr vom XOR?

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die EOR BitX Variante funktioniert auch dann. Wenn Du ein anderes Bit
als Bit 0 oder mehrere toggeln willst, machst Du hinter dem EOR für
jedes zu toggelnde Bit eine 1 in die Bitmaske, also

EOR 0b00100011

es toggeln Bit 0, 1 und 5.

Autor: Santa Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Allerdings stellt sich mir die Frage, ob all die lösungen noch
>funktionieren wenn die restlichen Bits dieses Status-Registers auch
>schon einen Wert angenommen haben.

Die Frage habe ich eigentlich schon beantwortet: Nein, in diesem Fall
funktionieren meine Lösungen nicht. Für die Anforderung "ein oder
mehrere Bits sollen togglen und die restlichen sollen unverändert
bleiben" gibt es nur eine "elegante" Lösung, und das ist die
EOR-Variante (siehe Beitrag von TravelRec).

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.