Hi,
ich hab einen Rs 485 Code in dem ich ein paar Zeilen nicht genau verstehe.
Sender:
Empfänger:Code:$regfile = "m128def.dat" $crystal = 16000000 $hwstack = 32 $swstack = 20 $framesize = 40 $baud = 9600 Config Pinc.6 = Output Config Pine.2 = Output Config Graphlcd = 240 * 64 , Dataport = Portd , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6 Dim A(8) As Byte Dim B As Byte Bl Alias Portc.6 Rs485 Alias Porte.2 Bl = 1 Rs485 = 1 Cursor Off Cls Locate 1 , 1 Lcd "RS485 Sender" A(1) = 128 'ID A(2) = 254 'ID A(3) = 1 'Absender A(4) = 2 'Empfaenger Do For B = 0 To 255 A(5) = B A(6) = Crc8(a(1) , 5) 'Checksumme Locate 7 , 1 Lcd A(6) ; " " Gosub Send_data Waitms 250 Next B Loop End Send_data: Printbin A(1) ; 6 Return
So zu dem Code hab ich folgende Verständnisfragen:Code:$regfile = "m128def.dat" $crystal = 16000000 $hwstack = 32 $swstack = 20 $framesize = 40 $baud = 9600 Config Pinc.6 = Output Config Pine.2 = Output Config Graphlcd = 240 * 64 , Dataport = Portd , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6 Rs485 Alias Porte.2 Enable Interrupts Enable Urxc On Urxc Isrlabel Dim A As Bit Dim B As Byte Dim Zeiger As Byte Dim Db1(6) As Byte Dim Db2(6) As Byte Bl Alias Portc.6 Bl = 1 A = 0 Zeiger = 1 Rs485 = 0 Cursor Off Cls Locate 1 , 1 Lcd "RS485 Empfaenger" Do If A = 1 Then Locate 3 , 1 Lcd "Absender : " ; Db2(3) ; " " Locate 4 , 1 Lcd "Empfaenger: " ; Db2(4) ; " " Locate 5 , 1 Lcd "Datensatz : " ; Db2(5) ; " " Locate 7 , 1 Lcd "Checksumme: " ; Db2(6) ; " " A = 0 End If Loop End Isrlabel: Db1(zeiger) = Udr If Zeiger = 6 Then For B = 1 To 6 Db2(b) = Db1(b) Db1(b) = 0 Next B Zeiger = 1 A = 1 End If If Db1(1) = 128 Then Db2(1) = Db1(1) Db1(1) = 0 Incr Zeiger End If If Db2(1) = 128 And Db1(2) = 254 Then Incr Zeiger Return
For B = 0 To 255
A(5) = B
A(6) = Crc8(a(1) , 5) 'Checksumme
Locate 7 , 1
Lcd A(6) ; " "
Der Abschnitt ist doch nur für die Erstellung der Checksumme zuständig oder ?
Was bedeutet Printbin A(1) ; 6 (das ; 6) ?
Und beim empfänger:
Isrlabel:
Db1(zeiger) = Udr <----- Bedeutet das Db1 die 6 gesendeten Byte empfängt und zeiger die Zahl der empfangenen Bytes annimmt ?
If Zeiger = 6 Then
For B = 1 To 6 <---- Nicht ganz klar was hier passiert.
Db2(b) = Db1(b) <--- praktisch einfach ein umschaufeln des Inhalts von Db1(x) zu Db2(x) ?
Db1(b) = 0 <---- Leeren der Db1(x)
Next B <----- Sprich der Schritt wird sooft wiederholt bis das mit allen 6 Byte passiert ist ?
Zeiger = 1
A = 1
End If
If Db1(1) = 128 Then
Db2(1) = Db1(1)
Db1(1) = 0
Incr Zeiger
End If
If Db2(1) = 128 And Db1(2) = 254 Then Incr Zeiger
Return
Ich hoffe ihr könnt mir beim verstehen dieser codestücke etwas weiterhelfen.
mfg blamaster







Zitieren

Lesezeichen