-
-
Moderator
Robotik Einstein
geclearte bits sind null, ich habe es versucht an der USART auszulesen. eins geschrieben, nul,l gelesen.
das READ AS SET hat ne andere bedeutung (die eigentlich verdammt wichtig ist:
benutzt man CBI oder SBI, muss man sehr vorsichtig sein. diese befehle setzen nämlich nicht wirklih nur das eine bit, sondern:
lesen das register
verknüpfen es mit ODER mit dem bit
schreiben das register zurück
dadurch werden die interrupt-flags gelöscht!!!
"Note that the CBI and SBI instructions will operate on all bits in the I/O Register, " -> beachten sie, dass CBI und SBI auf alle bits des registers wirken.
"writing a one back" -> schreiben eine 1 zurück
"into any flag read as set" -> in jedes flag, das als gesetzt gelesen wurde
"thus, clearing the flag" -> und dadurch wird das flag gelöscht
das = ist schon richtig. sagen wir mal, wir haben ein status register, in dem 8 interrupt-flags drin sind:
0b00110101
4 flags sind aktiviert. wir wollen jetzt das bit 4, also die zweite eins von links löschen.
möglichkeit 1:
REG |= 0x10;
was ja das gelice bedeutet wie
REG = REG | 0x10;
also REG = 0b00110101 | 0b00010000
also REG = 0b00110101
jetzt werden 4 einsen geschrieben. und da eine 1 ja zum löschen den interrupt-flags verwendet wird, werden alle 4 interrupt-flags gelöscht, obwohl wir nur eines wollten...
zweite möglichkeit:
REG = 0x10;
also
REG = 0b00010000;
es wird nur eine 1 geschrieben. das bit wird gelöscht, alle anderen bits bleiben unverändert.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen