Guten Abend miteinander, ich möchte einzelne Bits in Registern setzen. Wie kann ich das unter C realisieren? Danke.
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).
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?
@Tilo vieleicht erwähnst Du bitte den Controller-Typ, den C-Compiler etc., damit Dir überhaupt jemand helfen könnte. Quark
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.
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.
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.
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
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?
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.