Hallo!
Danke für Dein Tip. Hab mir mal die Appnote durchgelesen, aber so
richtig schlau werde ich nicht dadurch. Hab leider jetzt keine große
Zeit mehr, mich näher damit zu beschäftigen, vielleicht kann mir noch
jemand schnell was dazu sagen:
Auf dem S8515 funktionierte der Code in folgender Weise perfekt:
----------------------------
(...)
StartWait:
sbis USR, 7 ; Uart Byte empfangen?
rjmp StartWait ; *nein, warten...
in rTemp, UDR ; empfangenes Byte einlesen
sbic USR, 4 ; Framing-Error?
rjmp StartError ; *dann Springe zur Fehlerbehandlung
tst rTemp ; erhaltenes Byte auf $00 prüfen
(...)
--------------------------------
Übersetze ich diesen Code für den Mega8515, sieht das so aus:
-------------------------------
StartWait:
sbis UCSRA, 7 ; Uart Byte empfangen?
rjmp StartWait ; *nein, warten...
in rTemp, UDR ; empfangenes Byte einlesen
sbic UCSRA, 4 ; Framing-Error?
rjmp StartError ; *dann Springe zur Fehlerbehandlung
tst rTemp ; erhaltenes Byte auf $00 prüfen
(...)
-------------------------------
In der Appnote zum Austausch des S8515 gegen den Mega-Typen steht jetzt
folgendes:
"
The Error Flags (FE and DOR) and the ninth daa bit (RXB8) are bufered
with the data in the receive buffer. Therefore the status bits must
always be read before the UDR Register is read. Otherwise the error
status will be lost.
"
Dementsprechend, wenn ich das jetzt richtig verstehe, heißt das, das
meine Fehlererkennung nicht mehr funktioniert? Oder was? Muß ich den
Code umbasteln, daß ich erst auf Fehler prüfe und dann das empfangene
Byte einlese?
Da es bei meiner Anwendung um einen DMX-Empfänger handelt und die
DMX-Reset-Erkennung nur zuverlässig funktioniert, wenn ein FE-Error
erkannt wird, könnte es ja daran liegen, wenn ich das oben stehende
richtig verstehe...
Kann das jemand bestätigen? Hat schonmal jemand nen 90S8515 gegen den
Mega8515 ausgetauscht und damit Erfahrungen gemacht?
ciao,
Andi