Hallo, hatte ein ähnliches Problem.

Ich poste hier mal meinen Code, vielleicht hilft er ja irgendjemand. Er ist eigentlich ziemlich scmutzig programmiert aber er läuft. Dazu noch eine kurze Erklärung zu meinem I2C signal: Startbit, Adresse des Slave, Länge des Datenpackets, Daten, Stopbit. BIT 7 wird zuerst übertragen, Die software wartet auf startbedingung, ließt dann aus, gibt auf RS232 aus, macht ne kleine pause (So häufig kommen keine daten bei mir), Stopbit wird nicht beachtet, da die länge ja übermittelt wird und ich so rechtzeitig aufhören kann.

Es ging darum diese daten zu loggen (RS232) Franks mini projekt hat mir ein bisschen weitergeholfen.

Code:
$regfile = "m128def.dat"
$crystal = 16000000
$baud = 57600

Config Portd = Input

Cl Alias Pind.0                                             'Clock an Pind.0
Da Alias Pind.1                                             'SDA an Pind.1

On Int1 Startchk
Config Int1 = Falling

Enable Interrupts

Dim Adr As Byte
Dim Leng As Byte
Dim Temp As Byte
Dim C As Byte
Dim I As Byte
Dim J As Byte
Dim St(10) As Byte

For I = 1 To 8   'String leer machen zum ersten mal
St(i) = " "
Next

Enable Int1

Do
nop
Loop
End


Startchk:
If Cl = 1 Then    'Startbedingung: fallende flanke an SDA&SCL=1
Disable Int1
Gosub Rxdata
End If
Waitms 1000
Enable Int1
Return

Rxdata:

'Adresse immer 70H
Adr = 0  'Wert zurücksetzten
C = 128
For I = 1 To 8
Do
Loop Until Cl = 0
Do
Loop Until Cl = 1
If Da = 1 Then Adr = Adr + C
C = C / 2
Next

'ack überspringen
Gosub Jmpack


'Länge des strings
Leng = 0   'Wert zurücksetzten
C = 128
For I = 1 To 8
Do
Loop Until Cl = 0
Do
Loop Until Cl = 1
If Da = 1 Then Leng = Leng + C
nop
C = C / 2
Next

'ack überspringen
Gosub Jmpack


'String
For J = 1 To Leng
Temp = 0
C = 128
For I = 1 To 8
Do
Loop Until Cl = 0
Do                            
Loop Until Cl = 1
If Da = 1 Then Temp = Temp + C
nop
C = C / 2
Next
St(j) = Temp

'ack überspringen
Gosub Jmpack
Next

Print Chr(12);
Print "Adress: " ; Hex(adr) ; "h  " ; "Length: " ; Leng ;
For I = 1 To Leng
Print Chr(st(i));
Next
Print

For I = 1 To 8      'String komplett leer machen
St(i) = " "
Next
Return

Jmpack:
'ack überspringen
Do
Loop Until Cl = 0
Do
Loop Until Cl = 1
Return