Hallo Daniel,
noch einige Anmerkungen zu deinem Code:
Die Sicherheitsabfrage zur Verhinderung < 0 würde ich so machen:
If Bytes_recieved > 0 Then Decr Bytes_recieved 'oder > 1, falls dein Array bei 1 anfängt
Du kannst dann sooft Backspace drücken wie du willst, das nächste gültige Zeichen kommt immer in die erste Position.

Ich würde auch noch eine Abfrage auf die Länge des Arrays machen, damit dir ein zu langer Input nicht die nachfolgenden Speicherzellen/Variablen überschreibt. Länge dazu in eine Konstante und die sowohl beim Dim als auch beim Incr benutzen.

Bascom setzt dies richtig um, ich finde es aber seltsam:
Input_uart_overlay(bytes_recieved) = ""
Wenn du willst, dass ein Zeichen gelöscht wird, würde ich es durch den Bytewert 0 (=Stringende) überschreiben.
Auch das kann man wieder in eine konstante setzen, damit man später noch direkt sieht, was da gemacht wird.

Denke daran, wenn du ein Zeichen abspeicherst, dass du auf die nachfolgende Position eine 0 schreibst, also das Stringende festlegst.

Rein von der Verarbeitungszeit musst du dir überlegen, ob du das Print in der ISR lässt. Dass dauert.
Evtl. ein Flag setzen und irgendwann im Hauptprogramm ausdrucken. Darf natürlich nicht länger dauern, als bis dein nächstes Zeichen eintrifft.