www.mikrocontroller.net

Forum: Compiler & IDEs bit aus char


Autor: O1 A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

es gibt schon einige Threads zu diesem Thema. Da ich Anfänger bin
verstehe ich da nicht viel.
Ich habe folgendes Problem. Ich möchte ein bit aus einem Byte
in eine BitVariable schreiben.

unsigned char CHR = 0x00;
bit BT = 0;

BT = CHR[7];

oder z.B.

BT = CHR[2]; usw.

hab die Lösung aus einem Tutorial. Der Compiler (codevision)
möcht´s aber nicht nehmen.
Hat jemand vielleicht einen Tipp für mich was ich falsch mache, oder
wie ich das vielleicht Lösen kann?

schonmal Danke

Grüße
ghd

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
O1 H. schrieb:

> Hat jemand vielleicht einen Tipp für mich was ich falsch mache, oder
> wie ich das vielleicht Lösen kann?

Zumindest fragst du im falschen Forum: das hier ist mit "GCC"
überschrieben -- und der GCC kennt keine Bitvariablen.

Allerdings kennt der GCC Bitfelder, denn die sind Standard-C.

Ein Byte ist kein Array, daher kann man es nicht indizieren.  Du
kannst höchstens einzelne Bits testen mit dem &-Operator:
  if (value & 0x80) {
    /* bit 7 ist gesetzt */
  } else {
    /* bit 7 ist gelöscht */
  }

Autor: O1 A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh, sorry.
Ist es möglich den Thrad an die richtige Stelle
zu verschieben?

OK.

also CHR & 0x80

wenn 1 dann mach das
wenn 0 dann mach das


aber was 0x80 soll verstehe ich nicht ganz.
Ist das das "obere" Bit 8?

vielen Dank.

Autor: Grrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch einer, der in 5 Minuten programmieren lernt.
Ja, ja, die 1-Stunden-Crash-Kurse sind einfach zu langweilig.
:-}

Autor: Christoph S. (mixer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
O1 H. schrieb:
> aber was 0x80 soll verstehe ich nicht ganz.
> Ist das das "obere" Bit 8?

Betrachte doch mal die Bits:
0x80 = 0b10000000

Autor: O1 A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK. Habs verstanden. Danke.

Autor: O1 A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grrr schrieb:
> Noch einer, der in 5 Minuten programmieren lernt.
> Ja, ja, die 1-Stunden-Crash-Kurse sind einfach zu langweilig.
> :-}

Na dann Poste doch mal ne einfache super geniale Lösung. :-)

Autor: Grrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
O1 A. schrieb:
> Na dann Poste doch mal ne einfache super geniale Lösung. :-)

Gerne. Hab den 4-Minutenkurs entwickelt. Aber den Rest an Neuronen 
kannst Du dann vergessen. He, he.

Autor: O1 A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Grrr schrieb:
> O1 A. schrieb:
>> Na dann Poste doch mal ne einfache super geniale Lösung. :-)
>
> Gerne. Hab den 4-Minutenkurs entwickelt. Aber den Rest an Neuronen
> kannst Du dann vergessen. He, he.

da ist wohl der Peter Perfect vom Himmel gefallen.
Kleiner MiesePeter was

Autor: Grrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
O1 A. schrieb:
> da ist wohl der Peter Perfect vom Himmel gefallen.
> Kleiner MiesePeter was

Ein kleines bischen bescheidener könntest DU jedenfalls sein.
Denn, das
0x80 = 0b10000000 ist,
ist nun wirklich das Einmal-Eins der Informatik.

Autor: Grrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber meine Bemerkung war überflüssig.
Es wäre besser ich hätte sie unterlassen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
O1 A. schrieb:

> also CHR & 0x80
>
> wenn 1 dann mach das

und das mag zwar intuitiv sein, führt aber trotzdem des öfteren in die 
Sackgasse, aus der Neulinge nicht mehr alleine herauskommen.

Besser ist die sichtweise

  wenn ungleich 0, dann mach etwas
  wenn 0, dann mach etwas anderes.


Diese Siecht der Dinge solltest du dir generell angewöhnen. Erspart dir 
viel Frust.

Und als nächstes lernst du die Tabelle der Hex-Digits und ihre 
zugehörigen Bitmuster auswendig

   Hex  Dezimal Binär         Hex Dezimal Binär
     0     0     0000          8     8    1000
     1     1     0001          9     9    1001
     2     2     0010          A    10    1010
     3     3     0011          B    11    1011
     4     4     0100          C    12    1100
     5     5     0101          D    13    1101
     6     6     0110          E    14    1110
     7     7     0111          F    15    1111

Eine Hex-Zahl wie 0x8A sind dann einfach die Bitmuster für 8 und für A 
aneinandergereiht. 0x8A ist also auf Bitebene 10001010

Wenn du µC programmieren willst, dann kennt man diese Tabelle auswendig, 
weil man viel mit Hex-Zahlen und ihrer Bitrepräsentierung zu tun hat.

Hinweis: Die Tabelle ist nicht wirklich schwer zu lernen. Da gibt es ein 
paar Zusammenhänge
* Alle ungeraden Zahlen haben an der letzten Stelle binär eine 1
* Alles über/gleich 8 hat an der ersten Stelle eine 1
* 7 und F merkt man sich leicht. Das eine ist 0111, das andere 1111
* Auch die 2-er Potenzen 1, 2, 4, 8 sind simpel. Nur 1 einziges
  1 Bit, welches immer um 1 Stelle nach links wandert
  0001   0010  0100  1000
* A, also dezimal 10, hat das Bitmuster '2 mal 10', also 1010
* und den Rest dazwischen kann man leicht im Kopf durch weiterzählen
  einer der besonderen vorhergehenden Zahlen bestimmen.

Autor: O1 A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Hilfe! Hilft mir sehr!
Und sorry nochmals wenn´s genervt hat, bin halt
kein experte.

Gruß

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.