Ja, da ist ein Durcheinander.
Hol' dir von da die aktuellste Version
http://www.oldformation.at/electronic/download/down.htm
"MyI2C.ZIP"
Das ist recht ähnlich, aber eben nicht gleich.
das ist das Slave-Programm das 2313.bas als Muster

Du hast recht, Mytwi.lib ist schon vom Namen her ein Schmarrn gewesen.

Sowohl für das RNSI2C als auch für dieses 2313.bas verwend' ich nun endgültig:

MYI2C.BAS bzw. MYI2C.LIB




Code:
   Do
         Loadadr I2c_flag , Z
         Gosub I2c_get_addr                       ' I2C Adresse read
         Select Case I2c_addr
         Case Co1_adr:
            Loadadr I2c_flag , Z
            Gosub I2c_slave_rx_data           ' daten empfangen bis Stop/Rep
            Sent_flag = 1
            '------------------------------------
            ' DA1
            '------------------------------------

         Case Co1_adrr:
            '------------------------------------
            ' DA2
            '------------------------------------

            Loadadr I2c_flag , Z
            Gosub I2c_slave_tx_byte               ' daten senden bis NAK

         Case Else
            I2cinit
            '------------------------------------
            ' DA3
            '------------------------------------
         End Select
   Loop

DA2 is am sichersten, da hast du alle Zeit der Welt.
DA1 hast du Zeit, wenn kein Stop, sondern gleich wieder ein Start gekommen ist.



SOwohl für den RNSI2C.bas als auch für 2313.bas sollte der Master eine Schleife machen

Code:
   DO
     I2CSTART 
     I2CWByte    adresse 
     IF ERR = 0 THEN 
            I2CWBYTE    daten
            I2CWBYTE    daten
            I2CWBYTE    daten
            I2CWBYTE    daten
            I2CWBYTE    daten
     else
            WAITMS 20     '(in etwa) 
     END IF
     I2CSTOP

   LOOP UNTIL ERR = 0
Dann kann eigentlich so oder so nix passieren