Bei dem folgenden Code übergebe ich 2 Worte (1001 und 2002) an Sub.
Wenn Sub beendet ist, schaue ich mir die ersten 4 Bytes des Datenfeldes mit Hyperteminal:
ADR1= 233
ADR2= 3
ADR3= 100
ADR4= 0
Der erste Wert stimmt: 256 * 3 + 233 = 1001
Der zweite Wert stimmt aber nicht: 256 * 0 + 100 = 100
Für den zweitenwert hätten es sein müssen:
ADR3= 210
ADR4= 7
So dass, 256 *7 + 210 = 2002
Wo ist denn mein Fehler?
Code:
$regfile = "m8def.dat"
$crystal = 11059200
$baud = 19200
Declare Sub Datensatzsichern_i2c(byval Datenwort_1 As Word , Byval Datenwort_2 As Word , Adrese_byte_write As Word)
Dim Dw1 As Word
Dim Dw2 As Word
Dim Naechste_puffer_adresse As Word
Dim Write_puffer(64) As Byte
Dim Temp_d As Byte
Naechste_puffer_adresse = 0
For Temp_d = 1 To 1
Dw1 = 1001
Dw2 = 2002
Call Datensatzsichern_i2c(dw1 , Dw2 , Naechste_puffer_adresse )
Next
Print "DW1= " ; Dw1
Print "DW2= " ; Dw2
Print "ADR1= " ; Write_puffer(1)
Print "ADR2= " ; Write_puffer(2)
Print "ADR3= " ; Write_puffer(3)
Print "ADR4= " ; Write_puffer(4)
Print "ADRN= " ; Naechste_puffer_adresse
Print " "
Do
Loop
Sub Datensatzsichern_i2c(byval Datenwort_1 As Word , Byval Datenwort_2 As Word , Adrese_byte_write As Word)
'Es wird ein Datenwort byte-richtig in ein Write_Puffer hineingeschrieben:
'Niederwertiges Byte des Datenwortes in niederwertige Write-Puffer-Adresse
'Write_Puffer fasst 64 Byte auf. Das erste Element des Write_Puffers wird mit 1 indexiert.
Incr Adrese_byte_write
Write_puffer(adrese_byte_write) = Low(datenwort_1)
Incr Adrese_byte_write
Write_puffer(adrese_byte_write) = High(datenwort_1)
Incr Adrese_byte_write
Write_puffer(adrese_byte_write) = Low(datenwort_2)
Incr Adrese_byte_write
Write_puffer(adrese_byte_write) = High(datenwort_2)
End Sub
Gruss
Ali
Lesezeichen