Variablen Splitten

Gast #4845228
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
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
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.