Hallo,
ich habe für den DS18S20 eine Funktion geschrieben, die die einzelnen
Bits ausließt. Diese funktionert auch (wenn ich die 16 mal
hintereinander in einer Schleife ausführe und jedes mal den Ausgelesenen
Bit über uart an mein Terminal sende stimmt die Bitfolge mit der
Temperatur überein).
Nun wollte ich jeweils 8 bit ein eine vorzeichenlose integer Variable
abspeichern:
1 | bool ow_ReadBit(void);
|
2 |
|
3 | unsigned int ow_ReadByte(void) {
|
4 | uint8_t buffer = 0;
|
5 | for (uint8_t i = 0; i<8; i++) {
|
6 | buffer |= ow_ReadBit(); //LS Bit speichern
|
7 | for (int b = 0; b<7; b++) {
|
8 | buffer <<= 1; //bitfolge nach links schieben
|
9 | }
|
10 | }
|
11 | return buffer;
|
12 | }
|
Um zu sehen ob es funktioniert hat dient folgende Funktion:
1 | void ow_binToBinChar(unsigned int bin) { //unsinnigen namen bitte ignorieren
|
2 |
|
3 | for (int i = 0; i<8; i++) {
|
4 |
|
5 | if ((bin & 1) == 1) {
|
6 | sendchar('1');
|
7 | } else if ((bin & 1) == 0){
|
8 | sendchar('0');
|
9 | }
|
10 | bin >>= 1;
|
11 | }
|
12 | }
|
13 |
|
14 |
|
15 | // in der hauptfunktion steht:
|
16 | ow_binToBinChar(ow_ReadByte());
|
Nun kommt im terminal aber immer 00000001 an. Erwartet habe ich jedoch
10011000.
Könnt ihr mir einen Hinweis auf meinen Fehler geben? Ich komme da nicht
drauf :(
LG
Paul