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:
Der Code wurde mit einem RN-Control, TeraTerm und einem FT232 Modul getestet und funktioniertCode:$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![]()
Wenn du mehrere Zeichen hintereinander empfangen willst (z.B. ein Befehlswort) musst du die einzelnen Zeichen durchnummeriert in einem String speichern.







Zitieren

Lesezeichen