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