Hallo,
ich versuche eine synchrone serielle Schnittstelle einzulesen. Dabei
sollten nacheinander 52 Bits gesendet werden, welche ich Bitweise in
eine "long long" Variable schreiben will.
1 | uint8_t i,zaehler=0;
|
2 | uint64_t data = 0;
|
3 |
|
4 | data |= ((PORTD & (1<<PIN_DATA)) << zaehler);
|
Das hat aber überhaupt kein sinnvolles Ergebnis gebracht.
Zum Testen wollte ich dann mal die Variable übers bitshiften mit Einsen
beschreiben.
1 | for (i=0; i<64; i++)
|
2 | {
|
3 | data |= (1 << i);
|
4 | }
|
Und um das Ergebnis überprüfen zu können, hab ich mir die Bytes an den
PC geschickt.
1 | char b1,b2,b3,b4,b5,b6,b7,b8;
|
2 |
|
3 | while (!(UCSRA & (1<<UDRE)))
|
4 | {}
|
5 | b1=data&0xff;
|
6 | UDR=b1;
|
7 | while (!(UCSRA & (1<<UDRE)))
|
8 | {}
|
9 | b2=(data>>8)&0xff;
|
10 | UDR=b2;
|
11 | .
|
12 | .
|
13 | .
|
Das lieferte mir allerdings auch nicht das erwatete Ergebnis, sondern:
011111110111111101111111011111110111111101111111011111110111111
Könnte mir jemand sagen wo das Problem liegt oder wie man es besser
machen kann.