Hallo
um das I2C besser zu verstehen will ich zwei m16 verbinden und I2C über
die Hardware-TWI register steuern .

Der Master Transmitter sieht so aus:


Code:
I2c_senden:
   Set Twcr.twen                                            'TWI-Hardware wird aktiviert
   Twbr = 72                                                'Bitrate auf 100Khz bei 16Mhz CPU und Prescaler =0
   Twsr = 0                                                 'Prescaler auf 0
   Set Twcr.twsta                                           'TWI-Start wird erzeugt
   Bitwait Twcr.twint , Set                                 'wartet bis TWI-Start gesendet wurde
   'Print "sende TWI Start"
   If Update_twistatus() = &H08 Then                        'wenn start gesendet
      'Print "Start erfolgreich"
      'Print "sende SLA/W"
      Twdr = Slaveid And &B11111110                         'SLA-W wird geladen
      Reset Twcr.twsta
      Set Twcr.twint                                        'Twint wird gelöscht
      Bitwait Twcr.twint , Set                              'wartet bis Hardware fertig
      If Update_twistatus() = &H18 Then                     'wenn SLA-W empfang bestätigt
         'Print "SLA/W übertragen"
         'Print "sende Datenbyte"
         Twdr = Sendebyte                                   'daten werden geladen
         Set Twcr.twint
         Bitwait Twcr.twint , Set
         If Update_twistatus() = &H28 Then                  'wenn Datenempfang bestätigt
            Print "datenbyte übertragen"
         Else
            'Print "TWI-Fehler kein Daten Ack"
         End If
      Else
         'Print "TWI-Fehler kein SLA-R/W Ack"
      End If
      Set Twcr.twsto                                        'Stop Condion
      Set Twcr.twint                                        'wird gesendet
      Print "sende TWI Stop"
      Print ""
   Else
      Print "TWI-Fehler kein Start gesendet"
   End If
Return

Function Update_twistatus() As Byte
   Update_twistatus = Twsr And &B11111000                   'Twistatus wird gelsen prescaler wird maskiert
End Function
ich weiß zwar nicht ob er geht aber soweit konnt ichs aus dem datasheet entnehmen

nun jedoch zum Slave da hakt es etwas
hab folgenden code der nicht funktioniert

Code:
do
if twi_flag=1 gosub i2c_schreibe
loop
I2cschreibe:
   Reset Twi_flag
   If Update_twistatus() = &H60 Then
      Set Twcr.twea
      Set Twcr.twint
      Bitwait Twcr.twint , Set
      If Update_twistatus() = &H80 Then
         I2cbyte = Twdr
      Else
         I2cbyte = 0
      End If
      Set Twcr.twint
   End If
   While I2cbyte > 0
      Set Led2
      Waitms 100
      Reset Led2
      Decr I2cbyte
   Wend
Return

Function Update_twistatus() As Byte
   Update_twistatus = Twsr And &B11111000                   'Twistatus wird gelsen prescaler wird maskiert
End Function

Twi_isr:
   Set Twi_flag
Return
die LED2 soll dabei so oft blinken wie der empfangene Wert vom Master ist

Danke für Hilfe