Bei
CONFIG SERIALIN = BUFFERED ........
Wird der UART-interrupt von Bascom verwendet. Wenn du ihn auch definierst, kommt ihr euch in die Quere.
"ISCHARWAITING" sieht nach, ob im Buffer ungelesene Zeichen stehen.
Druckbare Version
Bei
CONFIG SERIALIN = BUFFERED ........
Wird der UART-interrupt von Bascom verwendet. Wenn du ihn auch definierst, kommt ihr euch in die Quere.
"ISCHARWAITING" sieht nach, ob im Buffer ungelesene Zeichen stehen.
aha ok, also muß ich das nicht umstellen, wäre aber sinnvoller....
jetzt wäre nur noch intressant warum das Programm schon beim 2. und nicht erst beim 7. richtigen Code durchläuft.
Da seh ich das Problem, daß du ja genau das Zeichen abcheckst, das noch NICHT gekommen ist
Zitat:
Buffer(Bufferindex) = INKEY() DA STEHT DAS ZEICHEN
incr Bufferindex ' !!!!!!!!!!!!!!!!!!!!!!!!
If Bufferindex > 7 Then
Goto Abfrage:
End If
End If
Abfrage:
If Buffer(bufferindex) = B Then BUFFERINDEX ZEIGT EIN ZEICHEN HINTER DAS, DAS GRAD GEKOMMEN IST
ja ich steh total auf der Leitung :roll:
Ich wäre sehr dankbar wenn mir jemand die komplette Lösung geben könnte.
BITTE !!!
M.f.G.
Jürgen
jetzt ist bei diesem Thema schon über ein Monat vergangen und ich komme nicht weiter.
Hab es mit ONRXD , Ischarwaiting/waitkey, ringpuffer usw. probiert.
Ich bekomme erst nach dem zweiten mal eine Antwort.
d.h. wenn der Code zum zweiten mal empfangen wird geht die Antwort raus.
Was mach ich falsch ???
Es ist wie wenn noch eine Bestätigung fehlen würde das jetzt der Code richtig im Speicher liegt.
Mit diesem Code funzt es noch am besten:
(es sind ein paar unnütze Zeilen drinn, kommt von der probiererei)Code:
$regfile = "m8def.dat"
$crystal = 3686400 'Quarz: 3.6864 MHz
$baud = 9600 'Baudrate der UART: 9600 Baud
Config Com1 = Dummy , Synchrone = 0 , Parity = Even , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialout = Buffered , Size = 20
Config Serialin = Buffered , Size = 20
Dim B As String * 7
Dim Check1 As String * 7
Dim Check2 As String * 7
Dim Check3 As String * 7
Dim Check4 As String * 7
Dim Check5 As String * 7
Dim Check6 As String * 7
Dim Check7 As String * 7
Dim Msg(7) As String * 1
Dim I As Byte
Dim C As Byte
Enable Interrupts
I = 0
Do
Anfang:
C = Ischarwaiting()
For I = 1 To 7
If C <> 0 Then
Msg(i) = Waitkey()
Next I
Check1 = Chr(msg(1)) + Chr(msg(2)) + Chr(msg(3)) + Chr(msg(4)) + Chr(msg(5)) + Chr(msg(6)) + Chr(msg(7))
Check2 = Chr(msg(7)) + Chr(msg(1)) + Chr(msg(2)) + Chr(msg(3)) + Chr(msg(4)) + Chr(msg(5)) + Chr(msg(6))
Check3 = Chr(msg(6)) + Chr(msg(7)) + Chr(msg(1)) + Chr(msg(2)) + Chr(msg(3)) + Chr(msg(4)) + Chr(msg(5))
Check4 = Chr(msg(5)) + Chr(msg(6)) + Chr(msg(7)) + Chr(msg(1)) + Chr(msg(2)) + Chr(msg(3)) + Chr(msg(4))
Check5 = Chr(msg(4)) + Chr(msg(5)) + Chr(msg(6)) + Chr(msg(7)) + Chr(msg(1)) + Chr(msg(2)) + Chr(msg(3))
Check6 = Chr(msg(3)) + Chr(msg(4)) + Chr(msg(5)) + Chr(msg(6)) + Chr(msg(7)) + Chr(msg(1)) + Chr(msg(2))
Check7 = Chr(msg(2)) + Chr(msg(3)) + Chr(msg(4)) + Chr(msg(5)) + Chr(msg(6)) + Chr(msg(7)) + Chr(msg(1))
B = Chr(&H00) + Chr(&H05) + Chr(&H08) + Chr(&H7d) + Chr(&H00) + Chr(&H70) + Chr(&H00)
If B = Check1 Or B = Check2 Or B = Check3 Or B = Check4 Or B = Check5 Or B = Check6 Or B = Check7 Then
Goto Klappen:
Else
Goto Anfang
End If
End If
Loop
Klappen:
Waitms 200
Printbin &H3F ; &H06 ; &H00 ; &H0C ; &H01 ; &H39 ; &H01 ; &H0C ;
Waitms 200
Printbin &H3F ; &H06 ; &H00 ; &H0C ; &H02 ; &H39 ; &H01 ; &H0F ;
Goto Anfang
End