mikrocontroller.net

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


Autor: karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
DDRX|= (0 << Pxx);
heißt ausgeschrieben
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
DDRX = DDRX;
Ergo: nein, es geht nicht.  Bits werden mit einer UND-Verknüpfung
gelöscht,
DDRX &= ~(1 << Pxx);
ist also einzig die korrekte Form.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Felix Nachname (time2ride)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: karl (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.