Hi Sternthaler,
ja, ich traue mich noch ...
Tolllll!
Auch ich konnte aus beiden Beiträgen downloaden.
Danke für die Rückmeldung! Aber Ihr wisst ja, so'n Newby weiß 'halt noch nicht alles ... !
Nun, zu mehr Erstem:
Note:
3. Some of the Status Flags are cleared by writing a logical one to them. *1*
Note that the CBI and SBI instructions will operate on all bits in the I/O Register,
writing a one back into any flag read as set, thus clearing the flag. *2*
The CBI and SBI instructions work with registers 0x00 to 0x1F only.
---------
Hier hört mein Englisch tatsächlich auf. Die weitere Erklärung von CBI und SBI mit 'read as set' kann ich tatsächlich nicht mehr umsetzen.
Zu *1*:
Verstehe ICH so: Normal ist, dass "Clear" *zurücksetzen auf Null bedeutet*, aber es gibt auch
den Fall, dass "Zurücksetzen" einfach *Schreiben einer Eins* bedeutet! (Die Du dann auch als solche lesen kannst: 'read as set'!)
Zu *2*:
CBI und SBI sind Maschinesprache-Befehle Clear - bzw. Set Bit im unteren Bereich (0x00 to 0x1F only) der IO-Register!
Zu *1* habe ich mein kleines Prog. ergänzt und lese das IO-Register "UCSRB" vor und nach dem "Clearen" aus! (Es muss natürlich heißen: "sollte", da ich das Prog. noch nicht testen kann!)
Code:
...
void b2h(byte d)
{ byte h=(d/16)+0x30;
if(h>0x39) h+=7;
SerWrite(h);
h=(d & 0x0f)+0x30;
if(h>0x39) h+=7;
SerWrite(h);
}
....
b2h(UCSRA);
SerWrite(' ');
UCSRA |= 0x40; // 'clear' transmitter flag
Sleep(0xFF);
b2h(UCSRA);
....
cu Helmut
Nachtrag:
Sorry, ich habe das Forum nicht besucht und dann gepostet, sondern verkehrt herum! !
So muss ich doch noch "nachtarocken"!
zu @damaltor:
hi damaltor,
Du hast das *1* "fast" besser beschrieben, als ich!
Das mit dem gelöschten Flag, wusste ich leider (noch!
) nicht!
Aber mein kleines Prog. müsste das ja auch zeigen! (Ich will's morgen testen!)
zu @radbruch:
hi mic,
Deine Behauptung mit "=" kann ICH _nicht_teilen_: !
Wenn Du mit "=" eine Zuweisung machst, so wird die Variable mit diesem Wert belegt!
(Außer bei CBI, ..., also den Bit-Operatoren! Aber das schreibst man je in Assambler anders!)
Wenn man nun "|=" meint, so heißt das, dass die (vordere) Variable mit dem hinteren Wert
"geodert wird". Und wenn da nur ein Bit gesetzt ist, dann wird nur an _dieser_Stelle_ ein
Bit gesetzt! (Bei mehreren natürlich eben diese.)
"&= ~" ist das Gegentum dazu: hier löscht Du das im hinteren Teil als "Eins" gesetzte Bit,
bzw. mehrere!
cu Helmut
PS: bei b2h() (also Byte/Char to hex) sollte/könnte man noch "0x" davor senden.
Lesezeichen