Danke euch beiden für die Antworten !
@PicNick, das mit dem Timer ist eine gute idee ! habe das jetzt mit eingebaut, und scheint auch zu laufen :-D
@Richard, das habe ich schon versucht (hab das Buch von Roland Walter hier)
aber leider hatte ich damit keinen erfolg, wenn ich das so einbaue, wird mein ausgehenden string verstümmelt, es fehlen dann CR/LF ! vielleicht liegt es daran das ja ein Interrupt ausgelöst wird wenn der sendebefehl noch nicht ganz raus ist. Zur info, ich Arbeit mit R485 in Half Duplex
ich habe jetzt mal folgendes probiert, scheint soweit auch zu laufen, jedenfalls hängt das Programm micht mehr wenn keine Antwort kommt
Code:
$regfile = "M88def.dat"
$crystal = 1000000
$hwstack = 100
$swstack = 100
$framesize = 100
Config Com1 = 4800 , Synchrone = 0 , Parity = Even , Stopbits = 1 , Databits = 7 , Clockpol = 0
Config Print = Portd.2 , Mode = Set
Config Pind.2 = Output
Config Timer0 = Timer , Prescale = 1024
'Enable Timer0
'Enable Interrupts
'On Timer0 Ontimer0
Led1 Alias Portb.0
Config Led1 = Output
Led2 Alias Portd.7
Config Led2 = Output
Led3 Alias Portd.4
Config Led3 = Output
Taster1 Alias Pind.5
Config Taster1 = Input
Taster2 Alias Pind.6
Config Taster2 = Input
'-----------------------Dim's--------------------------------------------------
Dim Test As String * 20
Dim A As Byte
Dim Kreisz As Byte
Dim Adresse As String * 2
'----------------------Haubtschleife-------------------------------------------
Do
For Kreisz = 1 To 10 Step 1
Adresse = Str(kreisz)
Adresse = Format(adresse , "00")
If Len(test) >= 18 Then
Test = ""
Led2 = 1
Else
Led2 = 0
End If
Gosub Mess
Next Kreis
Loop
'------------------Messwerte anfordern-----------------------------------------
Mess:
Waitms 100
Print "K" ; Adresse ; " " ; "M"
Do
A = Ischarwaiting()
If A = 1 Then
Led1 = 1
A = Inkey()
Test = Test + Chr(a)
End If
Loop Until Len(test) >= 18 Or Timer0 = 200
Led1 = 0
Timer0 = 0
Return
Lesezeichen