Forum: Mikrocontroller und Digitale Elektronik Dezimal in verteilte Bits


von technikus (Gast)


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

von innerand i. (innerand)


Lesenswert?

Also grundsätzlich wird ihr "Dezimal" (sicher das sie keinen Integer 
meinen?) im µC binär gehalten. Sie brauchen also bloß die Bits an die 
richtige Stelle zu shiften und auf den Pin schreiben.

von technikus (Gast)


Lesenswert?

???

von technikus (Gast)


Lesenswert?

Meinetwegen ja auch ein int ;)
Es sollte nur ums Prinzip gehen.

Ich kann Ihre Antwort aber nicht auf meine oben gestellte Fragen 
beziehen.

von Christopher B. (chrimbo) Benutzerseite


Lesenswert?

Servus,
1
//b0
2
if ( (Dezimal&1) )
3
SET(B0_PORT,B0_PIN);
4
5
//b1
6
if ( (Dezimal&2) )
7
SET(B1_PORT,B1_PIN);
8
9
//b2
10
if ( (Dezimal&4) )
11
...

von innerand i. (innerand)


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)

von technikus (Gast)


Lesenswert?

@Chrostopher:
Danke!
Das einfache liegt oft so nah ;)

Gruß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.