Neuling schrieb:
> IN temp, PORTX
> ANDI temp, 0b11101111
> OUT ...
> geht es zwar, aber die Position der Null ist festgelegt und nicht per
> (Präprozessor-)Variable definierbar.
ABer 0b11101111 ist ja nichts anderes als die binäre Umkehrung (aus 0
mach 1, aus 1 mach 0) von 0b00010000. Und das wiederrum ist ja nichts
anders als (1<<PD4).
D.h. du brauchst die Operation die im Präprozessor einfach diese
Umkehrung macht. Das wiederrum macht das Symbol '~'.
Aber. Wenn du sowieso in Assembler nur 1 BIt an einem Port setzen bzw.
löschen willst, warum benutzt du dann nicht ganz einfach die
Spezialbefehle, die Atmel ihren AVR Prozessoren spendiert hat?
Siehe AVR-Tutorial
(0<<PD4) ist soweit keine sinnvolle Operation. Denn was macht denn das
<< ?
Das ist eine Schiebeoperation.
Bei (1<<PD4) wäre das sinnvoll. PD4 ist ja nichts anderes als eine
andere Schreibweise für 4. D.h. da steht
und das bedeutet einfach nur, dass eine binäre 1
um 4 BIts nach links geschoben wird
1 | 0000 0001 Original
|
2 | 0000 0010 1 mal verschoben
|
3 | 0000 0100 2 mal verschoben
|
4 | 0000 1000 3 mal verschoben
|
5 | 0001 0000 4 mal verschoben
|
d.h. das 1 Bit im Original wandert sukzessive nach links.
Jetzt mach das mal mit 0 << PD4
1 | 0000 0000 Original
|
2 | 0000 0000 1 mal verschoben
|
3 | 0000 0000 2 mal verschoben
|
4 | 0000 0000 3 mal verschoben
|
5 | 0000 0000 4 mal verschoben
|
da entsteht genau dasselbe wie im Original. Einen Wert von 0 nach links
zu verschieben ist daher eine sonnlose Operation, weil sich nichts
ändert. Das Ergebnis ist genauso einfach 0, wie es das Original war.