Gast
#3211626
Hi, beim studieren des Datenblatt eines Atmega1281 bin ich über die Aussage "The TXCn Flag bit is automatically cleared when a transmit complete interrupt is executed, or it can be cleared by writing a one to its bit location" Okay zum löschen also eine 1 an die entsprechende Stelle schreiben sprich UCSR0A |= (1 << TXC0); Jetzt habe ich allerdings im GCC Tutorial hier im Forum folgende Aussage gefunden. "Bei bestimmten AVR Registern mit Bits, die durch Beschreiben mit einer logischen 1 gelöscht werden, muss eine absolute Zuweisung benutzt werden. Ein ODER löscht in diesen Registern ALLE gesetzten Bits!" TIFR2 = (1<<OCF2A); // Nur Bit OCF2A löschen Nun habe ich obige Zuweisung sprich UCSR0A |= (1 << TXC0); schon in einigen Codes genau so gefunden. Die Aussage aus dem Tutorial ist für mich auch schwer nachvollziehbar. Es handelt sich dabei doch um eine direkte Zuweisung an einen Port UCSR0A = (1 << TXC0); würde doch eigentlich dafür sorgen, dass im Register alle Bits auf 0 gesetzt werden nur das TXC0 bit halt erstmal auf eins und dann intern vom AVR wieder auf 0. Was das ein DDRA = (1 << DD0) dazu führt das alles alten registerwerte auf 0 gesetzt werden bis auf Bit0 bei UCSR0A = (1 << TXC0); aber nur Bit TXC0 und alle anderen unberührt bleiben ?