Forum: Mikrocontroller und Digitale Elektronik DDRD |= (1<<PD3) | (0<<PD4)


von karl (Gast)


Lesenswert?

Hallo,

eine 1 mit DDRX |= (1 << Pxx) setzen ist klar, aber kann man auch mit 
DDRX|= (0 << Pxx) eine 0 setzen also das bit löschen, oder muss ich da 
explizit mit DDRX &= ~(1 << Pxx) die 1 löschen?

Danke und LG
Karl

von Gast (Gast)


Lesenswert?

Kurz überlegen was das | und das & macht und die Frage kannst du dir 
selbst beantworten.
Falls das nicht klappt auf einem Blatt Papier die Bits aufmalen.

von karl (Gast)


Lesenswert?

hmm und eine kleine antwort zum Thema war zu viel?
Ich habe es leider nicht so mit der Digitaltechnik bzw mit der bitweisen 
Verknüpfung. Vielleicht kann mir jemand sagen, ob das das gleiche ist, 
wie wenn man die Bits löscht...

mfg Karl

von Justus S. (jussa)


Lesenswert?

karl wrote:
> hmm und eine kleine antwort zum Thema war zu viel?
> Ich habe es leider nicht so mit der Digitaltechnik bzw mit der bitweisen
> Verknüpfung.

das solltest du schleunigst ändern, sonst wirst du irgendwann ganz schön 
gegen die Wand laufen..

was macht wohl ein ODER mit einer NULL ?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

karl wrote:
> Vielleicht kann mir jemand sagen, ob das das gleiche ist,
> wie wenn man die Bits löscht...

Nachdenken kann trotzdem nicht schaden:
1
DDRX|= (0 << Pxx);
heißt ausgeschrieben
1
DDRX = DDRX | (0 << Pxx);
Nun kann man eine 0 um noch so viele Bits nach links schieben: es
bleibt eine 0.  Also ist es dasselbe wie
1
DDRX = DDRX;
Ergo: nein, es geht nicht.  Bits werden mit einer UND-Verknüpfung
gelöscht,
1
DDRX &= ~(1 << Pxx);
ist also einzig die korrekte Form.

von Johannes M. (johnny-m)


Lesenswert?

karl wrote:
> hmm und eine kleine antwort zum Thema war zu viel?
Du hast eine Antwort bekommen!

> Ich habe es leider nicht so mit der Digitaltechnik bzw mit der bitweisen
> Verknüpfung.
Dann schau Dir den Artikel Bitmanipulation an!

von Felix N. (time2ride)


Lesenswert?

DDRX:
00000000 Anfangszustand

was macht "(1<<3)"?:
eine 1 um 3 Stellen schieben: aus 00000001 mach 00001000

was macht "|"?:
Bitweise ODER Verknüpfen:
00000000 = DDRX
00001000 = (1<<3)
--------
00001000 = Neuer Wert von DDRX

Jetzt das ganze rückwärts:
DDRX|= (0 << Pxx)
eine 0 um 3 Stellen schieben: aus 00000000 mach 00000000

ODER Verknüpfung:
00001000 = DDRX
00000000 = (0 << Pxx)
--------
00001000 = Neuer Wert (Ist gleich dem alten!) -> Nein man kann son keine 
Bits Löschen!

Statt dessen:
Damit die Anderen Bits bleiben wird folgendes gemacht:
in 11100011 soll das 2. Bit gelöscht werden:
~(1 << 1) macht ~(00000010) = 11111101
UND Verknüpfung:
11100011
11111101 Nur beim Zu löschenden Bit steht eine 0!
--------
11100001

Hintergrund, Boolsche Algebra, hier nötig:
1 UND 0=0 sowie 1 ODER 0 = 1

von karl (Gast)


Lesenswert?

vielen dank an euch, echt super beschrieben... besten dank... jetzt 
weiss ich wie es funktioniert...

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.