Hallo, kann man das so machen, also vorallem "0 << DDBx" um einen Pin als Eingang zu definieren:
1 | |
2 | |
und fürt es zu dem selben Ergebniss wie:
1 | |
Gruß Rocco
|
Anzeige
|
DDRB = Eingänge und ausgänge durch BitschiebereiHallo, kann man das so machen, also vorallem "0 << DDBx" um einen Pin als Eingang zu definieren:
und fürt es zu dem selben Ergebniss wie:
Gruß Rocco Ja das kannst Du so machen, solange das Gleichheitszeichen auch wirklich eins ist und nicht z.B. "|=". Solche Konstrukte werden oft verwendet, um schnelle Modifikationen zu ermöglichen. MfG Mark
Gast
#2387218
Rocco L. schrieb: > kann man das so machen, also vorallem "0 << DDBx" um einen Pin als > Eingang zu definieren: Nein, geht nicht. Du kannst eine evtl. vorhandene 1 nicht mit einer 0 "wegODERN". Löschen immer über
Grüße
Gast
#2387220
Ha...hatte übersehen, dass da kein Oder dazwischen ist:
Also am besten so?:
gibts da nichts einfacheres, kürzeres, was in eine Zeile passt? Ich bin mir halt nicht sicher ob alle Pins die nicht 1 sind automatisch als Eingang erkannt werden, oder ob man das dem Atmega klar machen muss was Eingänge und was Ausgänge sind? Habe es jetzt so gelöst, aber so richtig gefallen tut es mir nicht, da es zu lang ist:
Gast
#2387265
Was ist den MOTOR_DDR? Variable? Wenn du nur das DDRB Register initialisieren willst, reicht die Zeile
Wenn du nicht Explizit eine "1" rein schiebst steht ne "0" drinnen. Mit der oberen Zeile wird PB1 und PB0 zum Ausgang, alle anderen sind Eingänge. Gruß Matthias
Gast
#2387269
Etwas unschön, aber auch möglich ware es den hex-Wert direkt in das Register zu schreibe. Einfach DDRB = 0x03; Gruß Rocco L. schrieb: > Habe es jetzt so gelöst, aber so richtig gefallen tut es mir nicht, da > es zu lang ist: > //B0 un B1 als Ausgänge, B2 und B3 als Eingänge: > MOTOR_DDR = 0xFF //erst mal alles Ausgänge > MOTOR_DDR &= ~((1 << DDB2) | (1 << DDB3)); Wenn MOTOR_DDR direkt dem entsprechenden Port entspricht, hast Du ein Problem. Du schaltest alle Pins auf Ausgang und treibst damit auf den Pins, die Du als Eingang haben willst, gegen die externe Beschaltung (wenn auch für kurze Zeit). Wenn es Dir 'nur' darum geht, zu dokumentieren das Du spezielle Pins als Eingang beschaltest, dann würde ich Deine erste Variante vorziehen. Du darfst an dieser Stelle halt nur eine echte Zuweisung haben (so wie Du es auch geschrieben hast). Wenn Du nachträglich einzelne Bits setzen oder löschen willst, dann mußt Du die Zuweisung mit "|=" zum Setzen von Bits und mit "&=" zum Löschen von Bits verwenden. In eine Zeile geht es natürlich auch, ist aber sehr unleserlich:
Danke, habs kapiert und umgesetzt. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|