Blamaster
03.02.2008, 19:33
Hi,
ich hab einen Rs 485 Code in dem ich ein paar Zeilen nicht genau verstehe.
Sender:
$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:
$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
ich hab einen Rs 485 Code in dem ich ein paar Zeilen nicht genau verstehe.
Sender:
$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:
$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