Sry für die vielen Posts. Aber des sollte bald klappen...komme schon ein bisschen unter Zeitdruck!

Hab jetzt den Code hier mal genommen für den Master. Der kommt bei Twi_wait_int() in die Loop und bleibt darin hängen. Mit oder ohne Slave scheint ihm dabei egal zu sein.

Code:
$regfile = "M16def.dat"                                     ' the used chip
$crystal = 16000000
$baud = 19200                                               ' frequency used

Declare Sub Twi_send_byte(byval Slave As Byte , Zeichen As Byte)

Dim Twi_control As Byte                                     ' Controlregister lokale kopie
Dim Twi_status As Byte
Dim Twi_data As Byte

Dim B As Byte                                               ' Zeichen von UART
Dim Error As Byte                                           ' Fehlermerker

' TWI init
Twcr = &B00000100                                           ' erstmal nur TWI aktivieren
Twsr = 0                                                    ' Status und Prescaler Register
Twbr = 72                                                   ' Bit Rate Register, 100kHz

' Startausgabe
Print "TWI Master Transmitter"

' Hauptschleife
B = 0
Do

    Incr B

    If B = 255 Then

      B = 0

    End If

    Print B ; " ";

    ' Den Wert zum Slave senden
    Call Twi_send_byte(&H40 , B)

    Print B ; " ";

    Wait 1

Loop

End

' Unterprogramme

' TWI send_byte
' sendet ein Byte und schliesst die Übertragung ab
Sub Twi_send_byte(slave As Byte , Zeichen As Byte)

    Print "Twi_send_byte() ";
    Error = 0                                               ' Fehler zurücksetzen

    ' Startbedingung
    Print "Startbedingung ";
    Twcr = &B10100100                                       ' TWINT

    ' warten bis TWINT gesetzt ist
    Gosub Twi_wait_int

    ' wenn Zugriff auf den Bus erlaubt, Slaveadresse ausgeben
    If Twi_status = &H08 Or Twi_status = &H10 Then
        Print "Slaveadresse ";
        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 "Slave hat sich gemeldet ";
            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
                Error = 0                                   ' kein Fehler
            Else
                Error = Twi_status                          ' Fehler
            End If

        Else
            ' kein slave
            Print "Kein Slave da ";
            Error = Twi_status                              ' Fehler
        End If

        ' Stopbedingung kommt hier immer im Ablauf, egal welcher Status
        Print "Stoppbedingung ";
        Twcr = &B10010100                                   ' TWINT löschen, Stop senden

    Else
        ' Bus belegt, wird er wieder freigegeben
        Twcr = &B10000100                                   ' TWINT löschen, Bus freigeben
        Error = Twi_status                                  ' Fehler
    End If

End Sub

' warten bis TWINT gesetzt ist, status auslesen
Twi_wait_int:

    Print "Twi_wait_int() ";
    Do
        Twi_control = Twcr And &H80
        'Print "Do - Loop " ;
    Loop Until Twi_control = &H80
    Print "Nach Do-Loop ";
    Twi_status = Twsr And &HF8                              ' status
Return
Also Ausgabe krieg ich:

Twi Master Transmitter
1
Twi_send_byte()
Startbedingung
Twi_wait_int


...und das wars. weiter kommt er nicht!