hi, ich möchte gerne mehr als 2 Bytes über UART an die Visaschnittstelle übertragen. Es kommen aber immer nur 2Bytes an. Kann mir jemand sagen warum?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
|
Anzeige
|
mehrere Bytes sendenhi, ich möchte gerne mehr als 2 Bytes über UART an die Visaschnittstelle übertragen. Es kommen aber immer nur 2Bytes an. Kann mir jemand sagen warum?
> Kann mir jemand sagen warum?
Weil du einfach was nach UDR0 schreibst, ohne zu prüfen, ob UDR0
überhaupt frei ist.
und wie mache ich das? Im Datenblatt hat's Beispielcode in C und Assembler. Kapitel 19.6.1
Gast
#965202
genau den code habe ich aus dem datenblatt übernommen. Den habe ich 1zu1 übernommen. es funktioniert aber nicht. Andre-Atmega168 wrote: > genau den code habe ich aus dem datenblatt übernommen. Den habe ich 1zu1 > übernommen. es funktioniert aber nicht. Leider hast du den aber auskommentiert. Außerdem wäre es vielleicht besser, wenn du auf das Leeren des UDR in einer Schleife wartest, und nicht sofort abbrichst (mit ret).
Gast
#965380
Die Befehlsfolge lds r16,UCSR0A sbrs r16,5 ; Senderegister nicht leer? ret überspringt den ret-Befehl, wenn der Puffer geleert ist. Du musst das ändern in eine Schleife, die so lange loopt, bis das Senderegister frei geworden ist. repeatUntilReady: lds r16,UCSR0A sbrs r16,5 ; Senderegister nicht leer? jmp repeatUntilReady sts UDR0,r18 Oder andersrum, ich kanns gerade nicht ausprobieren. Schau halt in anderen Programmen nach, wie es dort gemacht wird. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|