Zitat Zitat von mat-sche Beitrag anzeigen
... den Serial1bytereceived Interrupt bekomme ich mit, wann ein Zeichen in den Buffer gelegt wird. Dann starte ich einen Timer, über den ich dann das Ende abwarte. Also wenn kein Zeichen mehr rein kommt, dann läuft mein Timer über, setzt mir eine Variable und in einer Do - Loop lese ich dann den Buffer ein, setze den Counter wieder auf Null und leere den Buffer. Hier hatte ich das Problem, dass ich mit dem Overlay immer alle Zeichen im Buffer eingelesen habe und das wollte ich nicht.
Ich mag halt lieber die direkte Verarbeitung in der URXC ISR. Dann hast du selber die Kontrolle. Benutzt du Config SerialIn ... dann kannst du erst danach eingreifen.
Deinen Timer könntest du dabei so lassen wie er ist, nur rufst du die ISR direkt auf, wenn ein Zeichen empfangen wurde. Das ist auch nichts anderes als ByteMatch=All.

Zitat Zitat von mat-sche Beitrag anzeigen
Wenn wir schon einmal dabei sind, in der Serial1bytereceived Interruptroutine sollte ich laut der Hilfe vorher die Register sichern push/popAll. Ich weiß nun nicht genau warum dies gemacht werden soll und ob es nötig wäre. Kann mir jemand von Euch dies erklären?
Wie schon geschrieben, erzeugt Bascom bei Verwendung von Config SerialIn automatisch ein ISR, die beim Empfang jedes Zeichens aufgerufen wird. Die steht aber nicht in deinem QuellCode. Von dort aus wird dein Label angesprungen.
Da Bascom Register während des Programmablaufs verwendet und man nie weiß, bei welchem Befehl der Interrupt auftrat, muss man alle Register sichern, die in der ISR verwendet werden. Dies macht der Compiler auch für seine ISR.
Wenn dann aber zu deinem Label gesprungen wird und dort weitere Befehle verwendet werden, müssen deren benutzte Register auch wieder gesichert werden. Die Empfehlung ist dann pushall, falls man nicht weiß, welche Register dies sind.