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

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