Hallo, folgende Ausgangssituation: Ich habe mir eine Schaltung gebastelt, mit der ich die AT89S-Serie von Atmel (8051er mit seriell programmierbarem Flash) programmieren kann. Dazu habe ich einen gewöhnlichen AT89C52 verwendet, der über die RS232-Schnittstelle Befehle bekommt und diese entsprechend auf dem AT89S-Typ ausführt. Ich arbeite mit Hardware-Handshake. Der Empfang läuft momentan über Polling. Alle Befehle werden mit dem CarriageReturn-Zeichen (0x0D) abgeschlossen, LF-Zeichen (0x0A) werden ignoriert. Nun habe ich folgendes Problem: Wenn ich die Befehle einzeln (quasi manuell) an meinen Controller sende, gibt es keine Probleme. Alle Befehle sind darstellbare ASCII-Zeichen. Wenn ich Befehle in einer Textdatei sammele und diese Datei runterschicke, habe ich beim "BlankCheck"-Befehl das Problem, dass einige der nachfolgenden Zeichen von meiner Schaltung ignoriert werden. Dies passierte beim Austesten mit HyperTerminal. Dies ist der einzige Befehl, bei dem es zu diesem Fehler kommt. Nun habe ich die Kommunikation auch mit TeraTerm probiert. Dort tritt der Fehler nur auf, wenn als Verzögerungszeit für das Senden einzelner Zeichen bzw. ganzer Zeilen 0 ms eingetragen ist. Wenn ich die Verzögerungszeit für Zeichen auf 1 ms stelle, funktioniert es. Kann mir jemand folgende Vermutung bestätigen: Der UART des Motherboards schickt (unabhängig vom Terminalprogramm) bereits die nächsten Bytes, bevor die PC-Software merkt, dass die CTS-Leitung deaktiviert ist. Da der BlankCheck-Befehl logischerweise sehr lange dauert, werden einige Zeichen von meiner Schaltung nicht erkannt. Jetzt wäre die einzige Lösung, die mir einfällt, meine Routinen für die serielle Schnittstelle auf Interrupt-Steuerung mit Buffer umzuschreiben, richtig? Oder hat mir vielleicht jemand noch ne Idee, woran es liegen könnte? Gruß Stefan
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.