Eigentlich sollte es ja egal sein, ob man bei einem mega8515 wartet bis das TXC oder UDRE Bit im UCSRA Register gesetzt wird. In der Simulation kommt das auch hin, in der Praxis kommen mit TXC nur etwa 9-10% der Daten an, was vermuten lässt das schon vor Ende der Übertragung neue Daten in UDR geladen werden. 10% sind nämlich genau 1 bit der Übertragung... Es scheint so, also wenn das TXC Bit bereits nach dem Startbit gesetzt und nicht erst am Ende der Übertragung... out udr, Daten warte: sbis UCSRA, udre rjmp warte cbi UCSRA, udre bzw. out udr, Daten warte: sbis UCSRA, txc rjmp warte cbi UCSRA, txc
wenn du ins datenblatt schaust, dann wirste genau diesen code hier finden... USART_Transmit: ; Wait for empty transmit buffer sbis UCSRA,UDRE rjmp USART_Transmit ; Put data (r16) into buffer, sends the data out UDR,r16 ret wie wärs, wenn du diese cbi einfach mal weglässt? probiers mal aus.. denn: "executed, or it can be cleared by writing a one to its bit location." ... liegt glaub ich an nand-struktur.. dave
jetzt geht es: mit sbi UCSRA, txc anstelle des cbi UCSRA, txc Weglassen geht nicht, da das Bit dann immer gesetzt bleibt, wenn der Interrupt aus ist.
also bei mir läufts auch so gut... (is die routine von hier) serial_out: sbis UCSRA,UDRE rjmp serial_out out UDR, temp1 ret vielleicht liegts auch daran, dass dus umgedreht hast. dave
nöö, geht die version bei dir nicht? so steht se im tutorial: serout: sbis UCSRA,UDRE ; Warten bis UDR für das nächste ; Byte bereit ist rjmp serout out UDR, temp ret ; zurück zum Hauptprogramm dave
Ok, es geht. Anscheinend wird das UDRE Bit automatisch gelöscht wenn UDR beschrieben wird.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.