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.
wär nett wenn mir jemand helfen könnte das mit dem vergleich und der checksumme hintzkriegen.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
mfg
xeus
Moddy: Code-Tags ausgebessert







Zitieren

Lesezeichen