Bit in ein Byte von rechts reinschieben

Hallo,

ich werte ja immernoch die BIT meines Funkthermometers aus. Leider kommt manchmal "Kram" heraus. Thermo zeigt 00,3° bei 0,00% Feuchte an :)

Ich benötige eine Idee, wie ich Bits in ein Byte von rechts reingeschoben bekommen. Bits, die über Bitposition 7 gehen sollen herausflliegen. Also so:

Kommt eine 1 habe ich 00000001 Kommt dann eine 0 habe ich 00000010 Kommt dann eine 0 habe ich 00000100 Kommt dann eine 1 habe ich 00001001 ... etc. ...

Grund: ich benötige die Startsequenz 1111 (oder ....00001111), was HEX 15 ist.

Ich habe also irgendwann 00001111 und kann was wie

if (startniblle==15) { .... }

machen...

Wie schiebe ich den kontinuierlichen Bitstrom herein? Danke. BTW: bitWrite () brachte mich nicht weiter....

Guck mal in der Reference nach "bitshift".

markbee

Anstatt zu shiften kann man auch Zahlen eliminieren indem man bitweise AND verknüpft. Um von B1111xxxx auf B1111000 zu kommen genügt &B11110000 Also

if (startniblle&B11110000 == B11110000)
{...}

Grüße Uwe

Sowas wie

buffer = (buffer << 1) | neuesBit;

oder so…

Btw schreibt man nibble so, das wären dann aber nur 4 Bit. :wink:

Ja, 4 BIT… buffer = (buffer << 1), ok. Wie bekomme ich dann aber mal eine 1, mal eine 0 herein?

Hintergrund: es kommt diese Bitreihe an:

000000000000000000 1111 111000100100 111010000000 11101001 1111

…0000 1111… ist das Startsignal für die nächsten 12 Bit, die die Temperatur darstellen.

Also die hier: 111000100100.

Dann kommt die Feuchte: 111010000000

Dann CRC oder “sowas”… Noch nicht entschlüsselt: 11101001.

Dann das Endesignal: 1111.

Ich möchte also den Strom so einlesen, das ich in ein Byte “0001111” habe. Dann weiß ich, dass ich die nächsten 12 als Temp (3x4 BIT nibble), und die nächsten 12 BIT (3x4BIT nibble) als Feuchte / Vorzeichen einlesen muss.

Ja, ich gebe es zu: ich bin kein Logikgenie :smiley:

Indem "neuesBit" mal "1" und mal "0" ist. ;)

paff Lesen und verstehen sind immernoch zwei Dinge. Du schriebst ja auch

buffer = (buffer << 1) | neuesBit;

und nicht

buffer = (buffer << 1)

:smiley: :smiley: :smiley: Danke Dir… werde ich gleich mal reinhacken.