Dezimal in verteilte Bits

Gast #3801669
Lesenswert?
• ▲
▼
Hallo,

ich zerbreche mir gerade den Kopf und finde keine elegante Lösung.

Folgende Aufgabenstellung:

5 Bit sind auf mehreren Port Pins verteilt.
Ich möchte aber einen Dezimalwert in die fünf Bits schreiben.

Jetzt wäre eine Lösung folgende:
1
#define SET(x,y)  (x)|=(1<<(y))  //Bit set
2

3
#define B0_PORT  PORTC
4
#define B0_PIN  4
5
#define B1_PORT  PORTA
6
#define B1_PIN  7
7
...
8

9

10
//b0
11
if ( (Dezimal%2==1) )  //ungerade rest immer 1
12
SET(B0_PORT,B0_PIN);
13

14
//b1
15
if ( (Dezimal==2) || (Dezimal==3) || (Dezimal==6) || (Dezimal==7) || ...
16
SET(B1_PORT,B1_PIN);
17

18
//usw.

Kennt ihr da eine elegantere Lösung ?
Lediglich das b0 konnte ich durch testen auf gerade oder ungerade 
"vereinfachen".

Vielen Dank und Gruß
technikus
#3801736
Lesenswert?
• ▲
▼
technikus schrieb:
>Ich kann Ihre Antwort aber nicht auf meine oben gestellte Fragen
>beziehen.

>> Folgende Aufgabenstellung:
>>
>> 5 Bit sind auf mehreren Port Pins verteilt.
>> Ich möchte aber einen Dezimalwert in die fünf Bits schreiben.

Lösung (pseudocode):
1
//Zahl = 0001 0101b 
2
PIN1 = Zahl
3
PIN2 = Zahl >> 1 
4
PIN3 = Zahl >> 2 
5
PIN4 = Zahl >> 3 
6
PIN5 = Zahl >> 4

(Das klappt bei µCs die die einzelnen Port-Pins über einen 
Bit-Band-Bereich direkt adressieren können)

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.