Wenn ich das richtig sehe,
löschst Du den Buffer strcpy(mbuf, ""); direkt nach dem Senden.
Oder wofür ist das gut, ich bin da jetzt nicht sicher.

Wenn das serielle Ausschieben Interrupt gesteuert ist,
dann muss der Buffer aber noch erhalten bleiben bis wirklich alles ausgesendet wurde.

Bau mal vor dem Löschen also vor dem strcpy(mbuf, ""); zum testen noch eine Delay ein 10 ein.