So ich hab mal dein Programm bischen umgebaut.
Hier hast du den Code um den UART auszulesen.
Das ganze wird Interruptgesteuert gemacht, d.h. wenn ein Zeichen im Buffer liegt wird ein Interrupt ausgelöst, das Zeichen ausgelesen und in der Variable "Empfang_string" gespeichert und eine LED getoggled. Du kannst auch jede andere Variable für "Empfang_string" verwenden nur dann erhältst du im Terminal nur den ASCII-Wert des Zeichens. Du musst das Zeichen dann erst wieder in einen ASCII umwandeln.
Das Hauptprogramm läuft nun solange weiter bis ein Interrupt geschieht, bzw. bis ein Zeichen empfangen wurde. So hast du keine Warteverzögerungen

Hier das Programm:
Code:
$regfile = "M32def.dat"
$crystal = 16000000
$hwstack = 350
$swstack = 350
$framesize = 200

$baud = 19200

Config Portc.1 = Output
Config Portc.0 = Output

Dim I As Byte
Dim Empfang_string As String * 1

Portc.0 = 0
Portc.1 = 0

Enable Interrupts                                           'Interrupts Global zulassen
Enable Urxc                                                 'Interrupt URXC einschalten

On Urxc Empfangen                                           'Interrupt-Routine setzen


Do
   Toggle Portc.0
   For I = 0 To 200
      Waitms 1
   Next I

   Wait 1                                                   '1 Sekunde warten

Loop

End


' #############################################################
' #### UART Empfang
' #############################################################

Empfangen:

   Empfang_string = Waitkey()                               'Zeichen aus dem Buffer einlesen

   Print Empfang_string
   Toggle Portc.1

Return
Der Code wurde mit einem RN-Control, TeraTerm und einem FT232 Modul getestet und funktioniert
Wenn du mehrere Zeichen hintereinander empfangen willst (z.B. ein Befehlswort) musst du die einzelnen Zeichen durchnummeriert in einem String speichern.