Habe ein Problem mit dem Uartempfang. Wenn ich das Programm das erste mal starte läuft alles wie es soll. Ich sende über ein Terminal einen String und wenn ich Enter drücke wird dieser String ausgegeben und aus den ersten 3 Stellen des Strings eine ID rauskopiert und der Variablen "ID" übergeben. Läuft soweit perfekt.
Sende ich nun erneut einen String wird mir von der ID die letzte Stelle weggeschnitten. Es werden also nur noch 2 Stellen rauskopiert. Ich hab keine Erklärung für dieses Verhalten.
Der Code ist gekürzt aber natürlich lauffähig und produziert so wie er hier gepostet ist das genannte Problem. Bin absolut ratlos.
Code:$regfile = "m128def.dat" $crystal = 8000000 $baud = 9600 $baud1 = 9600 $framesize = 400 $swstack = 400 $hwstack = 400 Config Watchdog = 2048 Config Portf.5 = Output Config Portf.6 = Output Config Pinf.7 = Input Config Portf.1 = Output Config Porte.6 = Output Config Porte.5 = Output Config Porte.4 = Output Config Porta.0 = Output Config Portb.7 = Output Config Portb.6 = Output Config Portb.5 = Output Config Portc.7 = Output Config Portd.6 = Output Funkpinintertechno Alias Porta.0 Funkpinfs20 Alias Portb.7 Enablefs20tx Alias Portb.6 Enablefs20rx Alias Portf.1 Ledgruen Alias Porte.6 Ledrot Alias Porte.5 Ledblau Alias Porte.4 Speaker Alias Portb.5 Lanreset Alias Portc.7 Lanconfig Alias Portd.6 Ausgabebestaetigt Alias Portf.5 Starteausgabe Alias Portf.6 Befehlvorhanden Alias Pinf.7 Config Sda = Portd.1 'DS1307 wird configuriert' Config Scl = Portd.0 I2cinit Config Twi = 100000 Waitms 100 Dim Ds1307w As Byte , Ds1307r As Byte : Ds1307w = &B11010000 : Ds1307r = &B11010001 Config Com1 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Serialin1 = Buffered , Size = 60 , Bytematch = 13 Config Serialout1 = Buffered , Size = 60 Open "Com2:" For Binary As #2 'UART 2 wird aktiviert. Schicken mit Print #2 , "Text"' Clear Serialin1 Enable Interrupts Dim Buffer As Byte , UART2eingang As String * 82 Dim Zaehler As Long , A As Byte Dim Id As String * 3 Dim Abfrageuartfunk As String * 50 , Abfrageuartlan As String * 50 , Empfangenerstringuartlan As Byte , Empfangenerstringuartfunk As Byte Declare Sub Serial1charmatch() Config Timer0 = Timer , Prescale = 1024 'Timer für 1 sek takt' Enable Timer0 On Timer0 1seksub Timer0 = 0 Enable Interrupts Config Watchdog = 2048 Start Watchdog Lanconfig = 1 Lanreset = 1 Wait 1 'Warte 3 Sekunden bis das LAN Modul betriebsbereit ist' Reset Watchdog Wait 1 Reset Watchdog Wait 1 Reset Watchdog '##################### Hauptschleife #######################' Hauptschleife: Do Reset Watchdog If Ischarwaiting(#2) = 1 Then 'LAN Uart'' Gosub UART2auswertung End If If Empfangenerstringuartlan = 1 Then 'Flag ist 1 wenn über Serialcharmatch ein string fertig empfangen wurde' Empfangenerstringuartlan = 0 Gosub Scriptauswertunglan 'Werte diesen String aus' End If Loop '############################# 1 Sekundentakt Schleife ########################' 1seksub: Incr Zaehler If Zaehler > 29 Then Zaehler = 0 : Timer0 = 0 Gosub 1sektakt End If Return '################## Alles was hier steht wird jede Sekunde ausgeführt #####################' 1sektakt: Return '############## UART Auswertung LAN Modul TCP ###############' UART2auswertung: Disable Interrupts Buffer = Inkey(#2) If Len(uart2eingang) < 50 Then UART2eingang = UART2eingang + Chr(buffer) Else UART2eingang = "" Clear Serialin1 End If Enable Interrupts Return Sub Serial1charmatch() Disable Interrupts Abfrageuartlan = UART2eingang Empfangenerstringuartlan = 1 'Flag gesetzt, es wurde etwas empfangen, werte in der Hauptschleife aus' Enable Interrupts Clear Serialin1 UART2eingang = "" End Sub '####################### Scriptauswertung Lan Modul UART ####################' Scriptauswertunglan: Id = Mid(abfrageuartlan , 1 , 3) Print #2 , "abfrageuartlan: " ; Abfrageuartlan Print #2 , "ID: " ; Id Print #2 , "" 'leerzeile' Return End







Zitieren

Lesezeichen