Hallo
danke erstmal für den Code!
Muss aber der | da wirklich hin?
Und was für eine Funktion hat der dann?
Werbung
Hallo
danke erstmal für den Code!
Muss aber der | da wirklich hin?
Und was für eine Funktion hat der dann?
Hallo
Mit dem |= wird das Bit zusätzlich zu den eventuell bestehenden gesetzt, nur mit = würden alle anderen Bits gelöscht.
Der Grund, warum die BackLEDs mit dem Löschen der Daten- und Datenrichtungsregister nicht ausgeht, ist folgender:
Wenn alle Pins hochohmige Eingänge (ohne PullUp) sind, fließt ein geringer Strom von Vcc über R18-D15-R19 bwz. R20-D16-R21 nach IC1-Pin13(PD7) und von dort weiter über R22-D13-D14 (die Odo-LEDs) nach GND. Wenn nun der IC1-Pin13 als Ausgang geschaltet und der Ausgang gesetzt wird, liegt der Pin auf Vcc und es fließt kein Strom mehr über die BackLEDs. Allerdings leuchten dann unsichtbar die Odo-LEDs hell.
Gruß
mic
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
ich erkläre es dir:
in dem register DDRD wird von allen pins am port d eingestellt in welche richtung die gehen (also eingang oder ausgang).
das sieht dann zB so aus: 00101101
wenn ich jetzt schrfeiben würde DDRD = 1<<3 dann wäre das register danach 00010000. alle anderen pins wären also umgeschaltet worden. schade.
mit dem | werden alle einsen erhalten, und nur die neue hinzugefügt. das ist besser. dann ist das register 00111101
Hallo H3llGhost!
Diese Operatoren "|=" und "<<" dienen in C der Bitmanipulation. Schau doch einfach mal hier:
http://www.galileocomputing.de/openbook/c_von_a_bis_z/
Im Bereich "Operatoren" gibts einen Unterbereich "Bit-Operatoren".
Gruß farratt
Aber ich will doch im Moment alles mit Assembler machen oder geht das da auch?
Hallo
Also ihr stellt euch mal wieder unmöglich an. 1<<3 bedeutet schlicht 8. PD7 steht für den siebten Pin des Port D (Zählung beginnt bei 0!) und weil 2^7 zufällig 128 ist, kann man es auch so formulieren:
Das sollte auch mit wenigen Assemblerkenntnissen umsetzbar sein.Code:DDRD|=128; // Kathoden der BackLEDs haengen auf PD7 PORTD=128; // high an PD7 schaltet die BackLEDs aus
Ob man beim DDRD = oder |= verwendet hängt davon ab, ob man die anderen Pins zusätzlich beeinflußen möchte oder nicht.
Gruß
mic
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Lesezeichen