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
Lesezeichen