mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik einzelne Bits setzen


Autor: Tilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend miteinander,

ich möchte einzelne Bits in Registern setzen. Wie kann ich das unter C
realisieren?

Danke.

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Register Register sind, die vom C-Compiler selbst verwendet
werden: gar nicht.
Wenn's irgendwelche anderen Register sind: Hängt vom
Compiler/Controller ab.
Ist das Register beispielsweise beschreibbar und kann zerstörungsfrei
ausgelesen werden, dann könnte sowas so aussehen:

  Register |= 0x80;

(das setzt Bit7 des Registers und lässt die anderen unberührt).

Autor: Tilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie kann ich denn erkennen, dass man das 7.Bit setzt?

Ist 0x80 die Adresse des 7.Bits?

Wird dieses 7.Bit von low (0) auf high (1) gesetzt?

Heißt deine Syntax nicht, dass der Variablen Register der Wert
(Adresse) 0x80 zugeordnet wird. Oder ist das falsch?

Autor: Quark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Tilo
vieleicht erwähnst Du bitte den Controller-Typ,
den C-Compiler etc.,  damit Dir überhaupt jemand helfen könnte.
Quark

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lern C.

Mit solchen Fragen gehst du uns auf die Nerven und von den Antworten
hast du ja doch nichts, weil dir die Grundlagen fehlen.
Ich weiß, es klingt hart. Aber es ist die Wahrheit.


Tipp: "|=" ist etwas anderes als "=". Und schau dir mal die Zahl
0x80 binär an.

Autor: Tilo Arnold (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bin grad beim Einstieg in die C-Programmierung.

Das 80hex gleich 1000 000 bedeutet, dass weiß ich schon.

Ich wusste nur nicht, dass man dafür das ganze Register maskieren muss.
Dachte es geht, wenn man nur ein einzelnes Bit setzt.

Ausserdem möchte ich ja auch was lernen, deshalb frage ich ja nach.

Kannst du mir denn nicht sagen, was "|=" bedeutet? In der Literatur
steht, dass das das "bitweise Oder" ist.

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Exakt. "a |= b" ist nur eine Kurzform für "a = a | b".

| ist in C das bitweise Oder.
Manuell ausgeführt bedeutet das: Beide Operanden (Zahlen) werden binär
übereinander geschrieben. Wenn an einer Stelle bei mindestens einem der
Operanden eine 1 steht, steht im Ergebnis auch eine 1. Sonst eine 0.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

die naechste Anlaufstelle ist das Wiki für dich. Dort befindet sich ein
gutes GCC Tutorial. Anonsten befinden sich unzaehlige Threads mit der
gleiche Frage im Forum. Bitte nutze die Suchfunktion.

Mfg
Dirk

Autor: Tom Reichelt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil hier gerade über das Setzen einzelner Bits in Registern gesprochen
wird.

Wie kann ich z.B. das Universalregister R3 der Registerbank 2 im
Mikrocontroller 80C537 setzen?

Das R3 besitzt ja die Adresse 13h.

R3|=0x87;

Dann müsste ja das R3 jetzt die Registerbelegung 10000111 besitzen.

Spricht man überhaupt das Universalregister R3 mit "R3" an?

Autor: Paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom: Ein Posting hätte gereicht.

Autor: Tom Reichelt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, was meinst du mit "Posting"?

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Das R3 besitzt ja die Adresse 13h.

> R3|=0x87;

> Dann müsste ja das R3 jetzt die Registerbelegung 10000111 besitzen.

Nö. Das tut's nur, wenn vorher 0 drinstand.
(Merke: |= ist nicht dasselbe wie =, aber den Tip hat Dir schonmal wer
gegeben)

Das ganze geht aber nur, wenn der vom Compiler erzeugte Code dieses
Register nicht selber verwendet.

Ein Posting ist ein Beitrag in diesem Forum. Jeder unnötige Beitrag,
jede Wiederholung eines Beitrages erhöht das Rauschen und senkt damit
den Nutzen dieses Forums.

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.