Also bei den Testprogrammen rührt sich leider auch nichts.

Ich hab dann mal aus dem TWI-Multimasterbeispiel den Code verwendet und hab mittlerweile rausgefunden, dass bei diesem Code TWINT nicht gesetzt wird...
Jetzt halt die Frage: Warum wird TWINT nicht gesetzt?
Im Beispiel ist das letzte Bit (TWIE, Interrupt Enable) immer 0; muss dieses aber nicht 1 sein, damit TWINT (Interrupt) überhaupt gesetzt werden kann?


Ausschnitt:
Code:
Sub Twi_send_byte(byval slave As Byte , byval Zeichen As Byte)
  Print #4 , "Sub Started"
    Error = 0                 ' Fehler zurücksetzen

    ' Startbedingung
    Twcr = &B10100100         ' TWINT
  Print #4 , "Set Start Cond." ; hex(TWCR)
    ' warten bis TWINT gesetzt ist
    Gosub Twi_wait_int
  Print #4 , "TWINT OK"

    ' wenn Zugriff auf den Bus erlaubt, Slaveadresse ausgeben
    If Twi_status = &H08 Or Twi_status = &H10 Then
  Print #4 , "Bus Access"
        Twdr = Slave And &HFE ' slave adresse + Write
        Twcr = &B10000100     ' TWINT löschen, Byte senden

        ' warten bis TWINT gesetzt ist
        Gosub Twi_wait_int

        ' Slave hat sich gemeldet
        If Twi_status = &H18 Or Twi_status = &H20 Then
  Print #4 , "Slave OK"
            Twdr = Zeichen    ' Daten
            Twcr = &B10000100 ' TWINT löschen, Byte senden

            ' warten bis TWINT gesetzt ist
            Gosub Twi_wait_int

            ' Zeichen wurden gesendet
            If Twi_status = &H28 Or Twi_status = &H30 Then
    Print #4 , "Char Sent"
                Error = 0     ' kein Fehler
            Else
                Error = Twi_status       ' Fehler
            End If

        Else
            ' kein slave
            Error = Twi_status       ' Fehler
  Print #4 , "Error: " ; Hex(Error)
        End If
        ' STOPbedingung kommt hier immer im Ablauf, egal welcher Status
        Twcr = &B10010100     ' TWINT löschen, STOP senden
        ' nach einem STOP wird TWINT nicht mehr gesetzt,
        ' man darf/kann also nicht darauf warten !
    Else
        ' Bus belegt, wird er wieder freigegeben
        Twcr = &B10000100     ' TWINT löschen, Bus freigeben
        Error = Twi_status    ' Fehler
    End If
End Sub

Twi_wait_int:
    Do
        Twi_control = Twcr And &H80
    waitms 500
    Print #4 , "Wait... TWCR: " ; HEX(TWCR)
    Loop Until Twi_control = &H80
    Twi_status = Twsr And &HF8       ' status
    Print #4 , "ErrStat:" ; Hex(twi_status)
Return