So... der komplette code wäre dann:
Es ist ohne diese Verzögerung in serial0charmatch.
Das Funkmodul ist an sich schon in betrieb und ich kann dann wahlweise über Kabel oder Funk die Verbindung testen.
Der Hinweis auf die Register ist von mir noch nicht geprüft...
Da muss ich mich erst noch bissl einarbeiten... hab mich mit den Registern noch nicht wirklich beschäftigt.
Was ich auch etwas seltsam finde...
Wenn ich vom pc aus den port öffne und sende... ok. kommt an wie gedacht"... wenn ich den port aber trenne und
ein zweites mal öffne sind irgendwelche "zeichen" im buffer, die mir das ganze array zerschiessen.
wird beim trennen des ports auf der tx/rx-leitung noch was gesendet ??
Code:
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Programmname: UART-Schnittstelle.bas
'Letzte Änderung: 03.03.2013
'Funktion: Empfang von gesamt 18Byte,
' ausgabe als echo über seriell und lcd zur kontrolle
'Mikrocontroller: Mega8
'
'Input:
'Output:
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Den Atmega mit den passenden Daten füttern.
'-------------------------------------------------------------------------------
$regfile = "m8def.dat" 'eingesetzter Mikrocontroller
$crystal = 8000000 'eingestellte Taktfrequenz (8MHz)
$hwstack = 100 'Standardwert
$swstack = 100 'Standardwert
$framesize = 100 'Standardwert
$baud = 9600
'-------------------------------------------------------------------------------
'Ports/Pins/Configs
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Timer/OCR/PWM/ISR usw. setzen
'-------------------------------------------------------------------------------
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2
Config Serialin = Buffered , Size = 18 , Bytematch = 123 '123={
Enable Interrupts
'-------------------------------------------------------------------------------
'Variablen
'-------------------------------------------------------------------------------
Dim Temp_byte As Byte
Dim Datenblock(16) As Byte
Dim Indexposition As Byte
Dim Startzeichen As String * 1
Startzeichen = "{"
Dim Endzeichen As String * 1
Endzeichen = "}"
Dim Datenblock_komplett As Bit
Dim Datenblock_laenge As Byte
Datenblock_laenge = 16
Dim Lcd_position As Byte
Dim Datenblock_string As String * 16
'-------------------------------------------------------------------------------
'Hauptprogramm
'-------------------------------------------------------------------------------
Cls
Waitms 100
Do
If Datenblock_komplett = 1 Then
'UART-Datenblock in String füllen
For Indexposition = 1 To Datenblock_laenge Step 1
Insertchar Datenblock_string , Indexposition , Datenblock(indexposition)
Next
Disable Interrupts
'Ausgabe/Abarbeiten des UART-Datenblock
Cls
Waitms 100
For Indexposition = 1 To 3 Step 1
Lcd_position = Indexposition
Locate 1 , Lcd_position
Lcd Chr(datenblock(indexposition))
Next
For Indexposition = 3 To Datenblock_laenge Step 1
Lcd_position = Indexposition - 8
Locate 2 , Lcd_position
Lcd Chr(datenblock(indexposition))
Next
'Echo zurücksenden zur Kontrolle
Print Datenblock_string
Datenblock_string = ""
Datenblock_komplett = 0
Enable Interrupts
End If
Loop
End
'-------------------------------------------------------------------------------
'Interrupt
'-------------------------------------------------------------------------------
Serial0charmatch:
While Ischarwaiting() = 1
Temp_byte = Inkey()
Waitus 2000
Locate 2 , 13
Lcd Chr(temp_byte)
Wait 1
If Temp_byte = Asc(startzeichen) Then
Indexposition = 0
Datenblock_komplett = 0
Elseif Temp_byte = Asc(endzeichen) Then
Datenblock_komplett = 1
Else
Indexposition = Indexposition + 1
Datenblock(indexposition) = Temp_byte
End If
If Indexposition = Datenblock_laenge Then
Datenblock_komplett = 1
Clear Serialin
End If
Wend
If Indexposition < Datenblock_laenge Then
Do
Indexposition = Indexposition + 1
Datenblock(indexposition) = 22
Loop Until Indexposition = Datenblock_laenge
Datenblock_komplett = 1
Clear Serialin
End If
Return
Das bytematch ist 123 (also wie das Startzeichen { )
Nachtrag: ... bei dem jetzigen code... wenn ich die verzögerung rausnehm...
Ich sende {xyz1234567890123}
es kommt die ersten 2 vorgänge nur "leerstellen" ins array... ab dem dritten dritten mal ist dann
"y} " im Array
Lesezeichen