Gast
#662967
Hallo, ich möchte mit einem ATmega16 Daten über RS232 von einem PC verarbeiten. Die Daten sind Strings, mit einer maximalen Länge von 6 (z.B. 'V12345'). Dazu habe ich folgendes (Unter)Programm geschrieben:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
Das Programm sollte einen String einlesen, und ihn gleich wieder ausgeben. Sende ich mit Br@y Terminal ein 'A' bekomme ich zurück: 1 41 A (wie erwartet). | | ^--- Gesendetes Zeichen in ASCII (über Funktion uart_puts_hex) | ^----- Gesendetes Zeichen in HEX ^-------- Wert der Zählvariable uiCount (uart_puts_hex() siehe: Beitrag "anwendung uart_getc() von fleury") Sende ich aber ein 'AB' bekomme ich '1 41 A 1 42 B' zurück. Erwartet hätte ich aber '2 41 A 42 B'. Mir scheint, das mein Programm nur einen String der Länge 1 einliest, und beim nächsten Programmdurchlauf das nächste Zeichen. Sende ich 'ABCDE' ist das Verhalten genauso. Ich bekommen '1 41 A 1 42 B 1 43 C 1 44 D 1 45 E' zurück. Wie kann ich einen ganzen String einlesen, und nicht n mal 1 Zeichen? Ich kann sonst nicht unterscheiden, wann ein String zu ende ist bzw. wo der neue anfängt. Der Mega16 läuft mit 11,0592MHz. Die Boud rate ist 19200. Programmier mit 'WinAVR 20070525' und 'AVR Studio 4.12.498 Service Pack 4' Ich sollte noch erwähnen, dass ich "Gelegenheitsprogrammierer" bin. Meine Erfahrung geht daher eher gegen "wenig". Im diesem Forum habe ich dieses Problem leider nicht gefunden.