Gast
#605
Folgendes Problem habe ich: Der Hardware-UART des ATMega103 empfängt vom PC-Terminal-Programm eine Zeichenkette, die danach über einen Port parallel Byteweise ausgegeben wird. Zur Kontrolle lasse ich die Zeichenkette auch wieder zum PC zurück senden, was auch klappt. Damit nicht nur ein Zeichen (Byte) übertragen wird, muß ich anschließend wieder in die Empfangs-Schleife springen. Da kommt man offenbar nicht mehr raus, so das nachfolgende Programm-Teile nicht mehr abgearbeitet werden. Das Einfachste wäre, auf ein bestimmtes Zeichen zu reagieren, das mit einer Branch-Anweisung aus der EmpfLoop heraus geht. Die Empfangs-Datei kann nun aber alle möglichen Zeichen enthalten. Auch die schon von DOS her bekannte Datei-Ende Markierung (EOF) scheidet also aus. Da mein ATMega 4KByte Arbeitsspeicher hat, kann ich aber auch nicht erst mal alles reinholen und sehen, wenn nichts mehr kommt. (765968KByte). Bliebe da noch die Möglichkeit, feste Datei-Größen zu vereinbaren und einen Byte-Zähler mitlaufen zu lassen, der bei vorbestimmtem Überlauf das Verlassen der UART-Routine veranlasst. Der UART muß auf jeden Fall erst mal auf das PC-Programm warten, bis etwas kommt. Das Terminal-Programm selbst läßt sich nicht vom UART aus steuern, weil z.B.: nur die Hin und Rück-Sende Leitungen nebst Masse benutzt werden können. Das ist auf meinem Experimentier-Board schon vom Hersteller so vorgegeben. Welche Möglichkeiten gibt es noch, so etwas zu realisieren, bzw. wo sollte man eingreifen und wie. Feste Datei-Größen kann ich bereitstellen, bzw. sind in der vorgesehenen Anwendung auch nötig. 1.Programmteil: xxxxx EmpfLoop: ;xxxxx ; Hier müßte man wohl eingreifen? SBIS USR,RXC ; Teste RXC-bit auf vorliegendes Zeichen. JMP EmpfLoop ; Kein Zeichen vorhanden, warte. IN c,UDR ; Hole Zeichen vom UART ab. Mov sr20Inv,c ; Register c darf wegen SendLoop nicht invertiert werden. Com sr20Inv ; Zeichen Invertieren wegen LED's. ;Out PortB,sr20Inv ; Zeichen auf PortB-LED's anzeigen. Out PortC,sr20Inv ; Zeichen auf PortC-LED's anzeigen. Jmp SendLoop SendLoop: SBIS USR,UDRE ; Warte bis Sender bereit. JMP SendLoop ; Sender noch nicht frei. OUT UDR,c ; Sende Zeichen wieder zurück. JMP EmpfLoop 3.Programmteil: xxxxx Vielleicht hat jemand eine brauchbare Idee. Vielen Dank im Voraus. Wolfgang.