Forum: Mikrocontroller und Digitale Elektronik ganz doofe Frage zum Thema Variablenwert auf PORT ausgeben?


von Rumfreund (Gast)


Lesenswert?

Hey,
ok vielleicht ist es auch nur mal Zeit für eine Pause aber ich habe 
folgendes Problem!

habe auf nem AVR-Controller
eine Variable
uint16_t test

dann möchte ich bit 0 bis 5 an PORTC und
bit 6 bis 11 an PORTD ausgeben.....

die restlichen Bits sind erstmal egal.

irgendwie XOR und NOR ich mir einen zurecht!

PORTD = (test) << PD0 | (test>>1) << PD1 ......... etc.

klappt nicht... hmmh?

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Rumfreund schrieb:
> ok vielleicht ist es auch nur mal Zeit für eine Pause aber ich habe
> folgendes Problem!

Pausen sind immer gut. :-)

Hast du dir schon mal diese tolle Seite durchgelesen?
Bitmanipulation

Da findest du wahrscheinlich alles, was du brauchst.

von Kai S. (kai1986)


Lesenswert?

Hallo,

du kannst die benötigten Bits mit einer Maske und einem binären UND 
"ausschneiden" und dann mit shiften auf die richtige Position bringen 
und dann einfach ausgeben.

Gruß Kai

von Thomas E. (thomase)


Lesenswert?

Rumfreund schrieb:
> Hey,
> ok vielleicht ist es auch nur mal Zeit für eine Pause aber ich habe
> folgendes Problem!
>
> habe auf nem AVR-Controller
> eine Variable
> uint16_t test
>
> dann möchte ich bit 0 bis 5 an PORTC und
> bit 6 bis 11 an PORTD ausgeben.....
>
> die restlichen Bits sind erstmal egal.
>
> irgendwie XOR und NOR ich mir einen zurecht!
>
> PORTD = (test) << PD0 | (test>>1) << PD1 ......... etc.
>
> klappt nicht... hmmh?
den Kot versteht ja auch kein Schwein. Schon gar nicht der Compiler.

1
PORTC = (uint_8)(test & 0x3F);
2
PORTD = (uint_8)((test >> 6) & 0x3F);

Freu dich nicht zu früh.
Du erklärst jetzt, für jeden verständlich, warum das so funktioniert. 
Das sind die absoluten Basics. Das musst du im Schlaf beherrschen.

mfg.

von Rumfreund (Gast)


Lesenswert?

Juups stimmt hatte die Maske vergessen.... nem Freund des Rums kann das 
schon mal an einem Freitagabend passieren.... das ist schlimmer als 
Schlaf ;)

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.