Hallo,

Ich habe test programm (Slave Transmit und Masterreceive Polling-betrieb )aus RN-Wissen aufgespielt und erfolgreich gehabt .

Jetzt will ich in Interrupt betrieb umsteigen

Untere sind meine code in Bascom :

Code:
$regfile = "m128def.dat"                                    ' the used chip
$crystal = 16000000                                         ' frequency used
$baud1 = 9600                                               ' keine baud rate angeben !
Config Sda = Portd.1                                        'Pins für I2C festlegen
Config Scl = Portd.0
Config Twi = 200000
Open "com2:" For Binary As #3
Dim Twi_control As Byte                                     ' Controlregister lokale kopie
Dim Twi_status As Byte
Dim Twi_data As Byte

Dim Count1 As Byte
Dim Count2 As Byte                                          ' Testwert,

Declare Sub Twi_init_slave


Enable Interrupts
Enable Twi
On Twi Transmit Nosave


' Werte zuweisen
Count1 = 1
Count2 = 2
Twi_data = 0
Call Twi_init_slave                                         ' TWI aktivieren


' ---------------Hauptschleife------------------
Do
    ' hier könnte ihr Code stehen

Loop

End


' ------------------Unterprogramme -------------------------------------


' TWI als slave aktivieren
Sub Twi_init_slave
    Twsr = 0                                                ' status und Prescaler auf 0
    Twdr = &HFF                                             ' default
    Twar = &H30                                             ' Slaveadresse setzen
    Twcr = &B11000101                                       ' TWI aktivieren, ACK einschalten

End Sub

Transmit:
       Twi_status = Twsr And &HF8
       Print #3 , "Twi status : " ; Twsr                    'Debug
       If Twi_status = &HA8 Then

            Twdr = Count1                                   ' neue Daten ausgeben
            Print #3 , "test1"

        End If
       ' Twcr = &B10000000
       '      Return

       If Twi_status = &HB8 Then
            Twdr = Count2                                   ' neue Daten ausgeben
            Print #3 , "test2"

       End If
     '  Twcr = &B10000000
      '      Return


        ' TWINT muss immer gelöscht werden, damit es auf dem Bus weiter geht
        Twcr = &B11000101                                   ' TWINT löschen,TWIE löschen  mit ACK
Return
Aber das Programm funktioniert leider nicht .Ich will count1 und count2 zu Master senden aber wenn ich debug in Master angeguckt , habe ich nur den Wert von Adresse gesehen ;und wenn ich das Status gelesen ,bekomme ich nur einen Wert A8 .Ich glaub , ich habe den Fehler in Slave-Transmit gemacht aber ich weiss nicht wo.Kannst du den code für mich kurz schauen oder eine Bspl mit Interrupt in TWI geben, damit ich von der lernen kann.

Masterreceive Programm habe ich in C geschrieben und scheint nicht
Problem zu sein


Code:
swicht (twi_state++)
{
..
case 23:
		        
				//i2c_write_byte(0x00);
				i2c_write_byte(SLAVE_ADRESSE+1);
				break;
		case 24:
				byte1=i2c_readAck();
				break;//1 byte lesen
		case 25:
		        byte2= i2c_readNak(); //letztes Byte lesen, darum kein ACK
                
				i2c_stop();
				//-------ende des zugefügeteil-----
                I2CTimeout = 10;
                twi_state = 0;
                break;
}

//Aus library
unsigned char i2c_readAck(void)
{
	TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWEA)|(1<<TWIE);
	

    return TWDR;

}// i2c_readAck 

unsigned char i2c_readNak(void)
{
	TWCR = (1<<TWINT) | (1<<TWEN)| (1<<TWIE);
	
	
    return TWDR;

}// i2c_readNak
Ich danke euch im Voraus

MFG