Hier der code, wie gesagt ich empfange ein packet mit 8 bytes, davon soll er das 2. mit '006' vergleichen.
desweiteren hab ich noch ein Problem mit der Checksummen berechnung, er läst mich bei einer bitverschiebung das ergebnis nicht in eine seperate variable schreiben.
Code:
$regfile = "m16def.dat"
$crystal = 20000000 'Quarz: 3.6864 MHz
$baud = 19200
Dim I As Byte
Config Lcdpin = Pin , Db4 = Porta.6 , Db5 = Porta.5 , Db6 = Porta.4 , Db7 = Porta.3 , E = Porta.7 , Rs = Porta.2 ' Natürlich so wie es wirklich angeschlossen ist (4-Bit-Modus)
Dim A As Byte
Config Lcd = 20 * 4 'Baudrate der UART: 9600 Baud
Config Pind.1 = Input
Config Pind.0 = Output
Config Pind.5 = Output
Config Pind.2 = Input
Dim Clc_l As Byte
Dim Clc_h As Byte
Dim New , New1 , New2 , New3 As Byte
Dim Tmp As Byte
Dim Bcclo As Byte
Dim Bcchi As Byte
Dim X As Byte
Dim Packets(10) As Byte
Dim Packete(8) As Byte
Declare Sub Sendewr
Declare Sub Empfangewr
Declare Sub Clc
Declare Sub Lcdout
Declare Sub Status
Dim Line1 As String * 20
Dim Line2 As String * 20
Dim Line3 As String * 20
Dim Line4 As String * 20
'PowerLED
Portd.5 = 1
'Init Packets
Packets(1) = 002
Packets(2) = 050
Packets(3) = 000
Packets(4) = 032
Packets(5) = 032
Packets(6) = 032
Packets(7) = 032
Packets(8) = 032
Packets(9) = 9
Packets(10) = 10
'LCD init
Initlcd
Line1 = "test"
Line2 = " S T A R T!"
Line3 = " com"
Line4 = "www.ich.de"
Gosub Lcdout
Do
'Taster 1
If Pind.2 = 1 Then
Line2 = " reset"
Line3 = " com"
Print "reset"
Gosub Lcdout
End If
'Taster 2
If Pind.4 = 1 Then
Gosub Sendewr
Gosub Empfangewr
'Gosub Status
End If
Loop
'SUBs
'Anfrage an WR stellen
Sub Sendewr
Line2 = " sende Anfrage"
Line3 = " com"
Printbin Packets(1) ; 10
Gosub Lcdout
'Gosub Clc
Return
End Sub Sendewr
'Status vom WR empfangen
Sub Empfangewr
Line2 = " warte auf Daten"
Gosub Lcdout
Inputbin Packete(1) , 8
Gosub Status
Return
End Sub Empfangewr
'Checksumme berechnen
Sub Clc
'Init
Bcclo = &H0XFF 'setze high
Bcchi = &H0XFF 'setze high
New = &B11011001 'lade byte
New = New Xor Bcclo
Tmp = Shift New , Left , 4 'Fehlermeldung
New = Tmp Xor New
Tmp = Shift New , Right , 5 'Fehlermeldung
Bcclo = Bcchi 'setze gleich
Bcchi = New Xor Tmp
Tmp = Shift New , Left , 3 'Fehlermeldung
Bcclo = Bcclo Xor Tmp
Tmp = Shift New , Right , 4 'Fehlermeldung
Bcclo = Bcclo Xor Tmp
'Gosub Lcdout
Return
End Sub Clc
'LCD Ausgabe
Sub Lcdout
Cls
Locate 1 , 1 '1. Zeile
Lcd Line1
Locate 2 , 1 '2. Zeile
Lcd Line2
Locate 3 , 1 '3. Zeile
Lcd Line3
Locate 4 , 3 '4. Zeile
Lcd Line4
Return
End Sub
'Status Auswertung
Sub Status
If Packete(2) = 006 Then 'Vergleich ob das 2.Byte den wert 6 trägt
Line3 = "kein Fehler"
Print "kein fehler"
Else
Line3 = " Fehler"
Print "fehler"
End If
Gosub Lcdout
Return
End Sub Status
End 'end program
wär nett wenn mir jemand helfen könnte das mit dem vergleich und der checksumme hintzkriegen.
mfg
xeus
Moddy: Code-Tags ausgebessert
Lesezeichen