Hallo Burki,
habe schnell was in den Editor getippt....
Leider nicht testen können

edit:
so funktioniert es bei mir

mit Interrupt schaut es etwas kompliziert aus...


Code:
'****************************************************************************** 

'Abfrage der Eingänge Port3 und Port4 am RNBFRA-Board, wenn Interrupt Int2 durch Eingang ausgelöst wird 
'Powerport wird auf High geschalten, wenn Port3(Taste1) betätigt 
'Powerport wird auf Low geschalten, wenn Port4(Taste2) betätigt 
'Unterprogramme(Relais_on/ off schalten Power-Port 


$regfile = "m32def.dat" 
$baud = 9600 
$crystal = 8000000                                          'Quarzfrequenz 

Config Scl = Portc.0                                        'Ports fuer I2C-Bus 
Config Sda = Portc.1 

Config Pinb.2 = Input                                       'Interrupt Int2 (Pinb.2 als Eingang)
Portb.2 = 1                                                 'PullIp ein (Potential am Pin ist High)


'Eingangs-Port
Const Writeeingabeport_adr = &H7E                           'I2C Adr PCF 2 (Schreibadresse)
Const Readeingabeport_adr = &H7F                            'I2C Adr PCF 2 (Leseadresse)


'Power-Port 
Const Writepowerport_adr = &H72                             'I2C Adr PCF 1 (Schreibadresse) 
Const Readpowerport_adr = &H73                              'I2C Adr PCF 1 (Leseadresse) 

Dim I2cdaten As Byte                                        'Datenbyte aus PCF8574 
Dim Taste1 As Byte 					    'Taste 1    (Eingangsport-Port3)
Dim Taste2 As Byte  					    'Taste 2    (Eingangsport-Port4) 
Dim V As Byte 						    'Variable wird nur für Ausgabe benötigt 
Dim Flag As Bit 

I2cinit 						    'I2C Initialisieren 
I2cstart                                                    'I2C START 
I2cwbyte &H74                                               'Schreibbefehl an PCF3 schicken 
            'Led´s ein ,Motorendstufen ein, Port-Peripherie ein, RBN-Bus Sleep Modus aus (also Peripherie aktiv) 
I2cwbyte &B00000010                                         'Datenbyte an PCF3 
I2cstop 						    'I2C STOP

Config Int2 = Falling 
Enable Int2 
Enable Interrupts 
On Int2 Int2_isr 


Portd.6 = 0                                                 'Schrittmotoren erst mal ausschalten 

I2cdaten = 0						    'Variablen auf definierte Zustände setzen
Flag = 0 						    
V = 0 
                                                      
Taste1 = 247						    '247 entspricht Port3                                               
Taste2 = 251                                                '251 entspricht Port4


'******************** Hauptprogramm ******************************************** 

Do 

   If Flag = 1 Then Gosub Relais_on                         'Ist Flag=1 dann Unterprogramm "Relais_on" 
   If Flag = 0 Then Gosub Relais_off                        'Ist Flag=0 dann Unterprogramm "Relais_off" 
   Waitms 200 
Loop 


'********************* Unterprogramme ****************************************** 

Relais_on: 
   I2cstart                                                 'I2C START 
   I2cwbyte Writepowerport_adr                              'Schreibbefehl an PCF1 schicken 

   I2cwbyte &B11111111                                      'Datenbyte an PCF1 -> PowerPort 5 einschalten 
                         'binäre Darstellung, Port 6 auf High geschaltet 
   I2cstop                                                  'I2C STOP 

   Return                                                   'Rücksprung 


Relais_off: 
   I2cstart                                                 'I2C START 
   I2cwbyte Writepowerport_adr                              'Schreibbefehl an PCF1 schicken 

   I2cwbyte &B00000000                                      'Datenbyte an PCF1 -> PowerPort 5 ausschalten 
                         'binäre Darstellung, wenn Ports 1-8 auf Low geschaltet 
   I2cstop                                                  'I2C STOP 

   Return                                                   'Rücksprung 

Int2_isr: 
                                                             
   Disable Int2						    'Interrupt Int2 ausschalten 
   
   I2cstart                                                 'I2C START 
   I2cwbyte Readeingabeport_adr                             'Lesebefehl an PCF schicken 
   I2crbyte I2cdaten , Nack                                 'Datenbyte von PCF lesen, lese letztes Byte 
   I2cstop                                                  'I2C STOP 

   V = I2cdaten                                             'Datenübergabe an Variable V 

   If I2cdaten = Taste1 Then Flag = 1                       'Auswertung von Eingangsdaten(I2cdaten) und setzen von Flag 
   If I2cdaten = Taste2 Then Flag = 0 

   If V = 247 Then 
      Print "letzter Eingangswert= " ; V ; "  Relais= On "  'Vergleich-> ist V =247 dann geben an RS232 Werte aus 
      Print " "                                             'Leerzeile 
      Incr V                                                'Erhöhe V um 1, damit Anfangsbedingung nicht mehr erfüllt(sonst permanente Ausgabe) 
   End If 

   If V = 251 Then 
      Print "letzter Eingangswert= " ; V ; "  Relais= Off " 'Vergleich-> ist V =251 dann geben an RS232 Werte aus 
      Print " "                                             'Leerzeile 
      Incr V                                                'Erhöhe V um 1, damit Anfangsbedingung nicht mehr erfüllt(sonst permanente Ausgabe) 
   End If 
   
   Enable Int2                                              'Interrupt Int2 einschalten 

   Return						    'Rücksprung
Schicks mal durch den Bascom-Compiler...