4bit + 12bit in 2x 8bit

Gast #4269691
Lesenswert?
• ▲
▼
Hallo,

ich habe ein Gerät mit einer seriellen Schnittstelle, das man mit 4bit 
steuert und per 12bit Daten übergibt, man kann aber nur 8bit pro 
Transmission übertragen. Wie kann ich das am einfachsten trennen, sodass 
ich eine Methode schreiben kann, der ich einen char als Steuerbefehl und 
einen int mit den Datne übergeben kann`?

Danke + Gruß,
Konrad
#4269708
Lesenswert?
• ▲
▼
Ich nehme mal an Du willst die 1x4 Bit und die 1x12 Bit in einen 
Sendepuffer schreiben, der aus lauter Bytes besteht (Array). Dann würden 
die 1x4 Bits und weitere 4 Bits von den 12 in einem Byte stehen, und die 
übrigen 8 Bits von den 12 würden in einem weiteren Byte stehen.

Sowas macht man mit Bit Shifting. Gibt Tausende Beispiele dafür.

http://stackoverflow.com/questions/141525/what-are-bitwise-shift-bit-shift-operators-and-how-do-they-work
#4269709
Lesenswert?
• ▲
▼
Cmd 4 bit nach links schieben, und mit den obersten 4 bit des 
Datenwortes verodern -> 1. zu übertragendes Byte.

Dann die unteren 8 bytes des Datenwortes übertragen.
1
send(unsigned char cmd, unsigned int data)
2
{
3
  unsigned char b;
4

5
  b = (cmd << 4) | ((data >> 8) & 0x0f);
6
  send_byte(b);
7

8
  b = data & 0xff;
9
  send_byte(b);
10
}
#4269710
Lesenswert?
• ▲
▼
1. Die Daten an die richtige Stelle innerhalb eines Bytes schieben.
2. Die restlichen Bits ausmaskieren.
3. Die verschiedenen Teile miteinander verodern.

Also zum Beispiel so (je nach Byte/Bit-Reihenfolge anpassen):
1
void send(uint8_t byte);
2

3
void send_cmd(uint8_t cmd, uint16_t data)
4
{
5
  send(((cmd << 4) & 0xF0) | ((data >> 8) & 0x0F));
6
  send(data & 0xFF);
7
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.