Variablen Splitten

Gast #4845228
Lesenswert?
• ▲
▼
Hi Leute,
ich muss bei einer Datenübertragung zwei 12 Bit Messwerte Übertragen, 
hab dazu aber nur drei 8 Bit Variablen zur Verfügung. Heißt ich muss die 
Variablen splitten und der Empfänger muss diese wieder zusammen bauen.

Ich habs jetzt schon etliche male durchgedacht aber ich komm da auf 
keinen Fehler.

Das Problem was auftritt ist dass der erste Messwert (unten ValueOne) 
beim Empfänger als zweiter Messwert (unten ValueTwo) erkannt wird.

Könnt ihr mal drübersehen ob ihr evt. einen Fehler entdeckt?

Das beschreiben des Buffers geschieht wie folgt.
1
unsigned char IC_TxBuffer[8];
2

3
void fillBuffer(void){
4
  unsigned char temp;
5
  unsigned int tempWord;
6
  temp = 0;
7
  tempWord = 0;
8

9
  //Befüllen der ersten zwei Bytes ist OK
10

11
  tempWord = getValueOne() & 0x0FFF; //getValueOne() returned unsigned int 
12
  
13
  temp = (tempWord & 0x0FF0) >> 4;
14
  IC_TxBuffer[2] = temp;
15

16
  temp = (tempWord & 0x000F) << 4;
17

18
  tempWord = getValueTwo() & 0x0FFF;
19
  
20
  temp |= (tempWord & 0x0F00) >> 8;
21
  IC_TxBuffer[3] = temp;
22

23
  temp = (tempWord & 0x00FF);
24
  IC_TxBuffer[4] = temp;
25

26
  //Befüllen der restlichen Bytes funktioniert auch
27

28
}


Das Einlesen der Messwerte folgt sofort...
Gast #4845239
Lesenswert?
• ▲
▼
Hier noch das Auslesen des Receive-Buffers
1
unsigned char IC_RxBuffer[8];
2

3
unsigned int valueOne;
4
unsigned int valueTwo;
5

6
void checkReceivedData(void){
7
  unsigned int tempWord;
8
  tempWord = 0;
9

10
  tempWord = IC_RxBuffer[2] << 4;
11
  tempWord |= (IC_RxBuffer[3] & 0xF0) >> 4;
12

13
  valueOne = tempWord;
14
  tempWord = 0;
15

16
  tempWord = (IC_RxBuffer[3] & 0x0F) << 8;
17
  tempWord |= IC_RxBuffer[4];
18
  
19
  valueTwo = tempWord;
20
}

mit freundlichen Grüßen
Max
Gast #4845246
Lesenswert?
• ▲
▼
irgendwie sieht das sehr kompliziert aus
1
unsigned char IC_TxBuffer[8];
2

3
void fillBuffer(void){
4
  unsigned int temp1;
5
  unsigned int temp2;
6

7
  temp1 = getValueOne() & 0x0FFF;
8
  temp2 = getValueTwo() & 0x0FFF;
9
  
10
  IC_TxBuffer[2] = (temp1 >> 4);
11
  IC_TxBuffer[3] = ((temp1 & 0x0F ) << 4)| (temp2 >> 8);
12
  IC_TxBuffer[4] = (temp2 & 0xFF);
13
}

so in der Art, müsste es auch gehen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren