Hi damaltor,
nochmals ein großes Dankeschön für Deine "Unterrichtseinheit"!
Mir ist das 'Löschen von IRQ-Flags' heute Nacht im wieder durch den Kopf gegangen!:)
cu Helmut
Druckbare Version
Hi damaltor,
nochmals ein großes Dankeschön für Deine "Unterrichtseinheit"!
Mir ist das 'Löschen von IRQ-Flags' heute Nacht im wieder durch den Kopf gegangen!:)
cu Helmut
kein problem... dafür ist das forum doch da...
aber wenn du schon davon träumst solltest du dir evl gedanken machen XD
Hallo zusammen!
Gestern haben wir im Club mein "Kurzprogramm" getestet. Dazu mein Erfahrungsbericht:
Zuerst zum Flashen: Trotz _Leuchtstofflampen_-Licht nur 1 'c'-Error und ein paar 't's. Das Reduzieren des Vorwiderstandes von 470 auf 150 Ohm war _absolut_erfolgreich_! Kann ich nur
jeden empfehlen, der Probleme beim Flashen hat! (Vielleicht registriert dies auch AREXX!)
Die Sende-Routine hat mehrfach einwandfrei funktioniert: Deshalb ist KEINE Verzögerungsschleife
notwendig => also heraus damit! Auch das Warten auf TXC nach _jedem_ Zeichen-Senden ist völlig unnötig!
Die beiden hex-Werte (0x60 und 0x00) am Ende zeigten, dass beim Clearen von TXC (Bit 6 von UCRSA) auch das NUR-lesbare Bit 5, also UDRE, gelöscht wird!
Unser Programmier-Profi einer hiesigen Fa., die Industrie-Steuerungen baut, hat auch die Art und Weise bestätigt, wie solche IRQ-Flags allgemein gelöscht werden! (Bei manchen Microcontrollern genügt sogar irgendein Schreibzugriff!)
Bei der Diskussion zur Notwendigkeit der Verwendung der tot_count-Variablen (in Go()) haben wir uns richtig gestritten! Er teilte die Meinung von hier, dass sie notwendig wäre. (Ich trotzdem nicht!:( Also werde ich 'mal versuchen, meinen Standpunkt mit Fakten und Beweisen zu unterbauen!
Auch beim Code von Turn() waren wir sehr unterschiedlicher Meinung!
Zu den beiden letzten Punkten werde ich demnächste 'mal was posten müssen .... !:)
"bis die Tage"
cu Helmut
udre.. das müsste doch auch schreibbar sein. es wird doch 1 wenn udr leer ist, und kann manuell wieder gelöscht werden, oder?
Hi damaltor,
Nein, siehe mein Beitrag weiter oben:Zitat:
udre.. das müsste doch auch schreibbar sein. ...
Die Bits 1 und 0 sind wieder read/write! Sie haben ja auch nichts mit IRQ's zu tun!Zitat:
So jetzt zum Fall UCSRA (= USART Control and Status Register A):
Auf Seite 154 steht, dass nur das Flag TXC (=USART Transmit Complete, Bit #6) von den anwesenden IRQ-Flags les- UND schreibbar ist! (D.h., dass man die anderen {IRQ-}Bits #7, 5 - 2!) durch Schreiben NICHT verändern kann!
korrekt! Und das nutzt man dann in der Schleife bei SerWrite aus!Zitat:
... es wird doch 1, wenn udr leer ist, ...
Z.Bsp. in meiner abgespeckten Version:
"0x20" könnte man auch durch "(1<<UDRE)" ersetzen! (Das sieht dann professioneller aus!:))Code:void SerWrite(unsigned char data)
{ while(!(UCSRA & 0x20));
UDR = data;
}
NEIN, siehe oben! Das Löschen geht automatisch, d.h. der Controller macht's!:)Zitat:
... und kann manuell wieder gelöscht werden, oder?
Sonst würde ja obiger Code nicht funktionieren!
cu Helmut
hmkay...
*textfülller*