Hi,

ich hab einen Rs 485 Code in dem ich ein paar Zeilen nicht genau verstehe.

Sender:

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
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
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
So zu dem Code hab ich folgende Verständnisfragen:

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