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

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

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

Config Pind.6 = Output                                      'Schrittmotoren Ein/Aus
Config Pinc.5 = Output                                      'Schrittmotor Links Richtung
Config Pinc.3 = Output                                      'Schrittmotor Links Step
Config Pinc.4 = Output                                      'Schrittmotor Rechts Richtung
Config Pinc.2 = Output                                      'Schrittmotor Rechts Step

Config Pinb.2 = Input                                       'Interrupt Int2
Config Portb.2 = 0
Config Portd.3 = 1

Config Int2 = Falling
Enable Int2
Enable Interrupts
On Int2 Int2_isr


Const Writeeingabeport_adr = &H7E                           'I2C Adr PCF 2
Const Readeingabeport_adr = &H7F                            'I2C Adr PCF 2

Dim I2cdaten As Byte                                        'Datenbyte aus PCF8574
Dim Taste1 As Word
Dim Taste2 As Word
Dim I As Word
Dim Flag As Bit

I2cinit
I2cstart
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

Portd.6 = 0                                                 'Schrittmotoren erst mal ausschalten

I2cdaten = 0
Flag = 0

Taste1 = 247                                                'Taste 1    (Eingangsport-Port3)
Taste2 = 251                                                'Taste 2    (Eingangsport-Port4)
I = 0

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

Do
   If Flag = 1 Then Gosub Motor1_2
   If Flag = 0 Then Gosub Motoren_aus
Loop


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

Motor1_2:
Portc.5 = 0                                                 'Richtung  Motor 1
Portc.4 = 1                                                 'Richtung  Motor 2
Portd.6 = 1                                                 'Motoren einschalten

Portc.2 = 0                                                 'Step rechts
Portc.3 = 0                                                 'Step links
Waitms 1
Portc.2 = 1                                                 'Step rechts
Portc.3 = 1                                                 'Step links
Waitms 1
Portd.6 = 0                                                 'Motoren ausschalten
Return

Read_data:
Return


Motoren_aus:
Portd.6 = 0                                                 'Motoren ausschalten
Return

Int2_isr:
   I2cstart
   I2cwbyte Readeingabeport_adr                             'Lesebefehl an PCF schicken
   I2crbyte I2cdaten , Nack                                 'Datenbyte von PCF lesen
   I2cstop
   Waitms 50
   Print I ; " Eingangsport Wert " ; I2cdaten ; " war beim Int2"
   Incr I
   If I2cdaten = Taste1 Then Flag = 1
   If I2cdaten = Taste2 Then Flag = 0
Return
so, das berühmte flag iss jetz doch drinne, also das läuft jetzt so ab: wenn die erste taste gedrückt wurde, springter in int2_isr, und überprüft dort, welche taste gedrückt wurde, wenns taste 1 war, dann sollers flag auf 1 setzen, ansonsten auf 0.
dann springter ja wie gewöhnlich wieder ins hauptprogramm, und sieht: aha, flag ist = 1, also lassen wa mal die motoren einmal drehen... das widerholt er bei dieser verion aber ja so lange bis das flag wieder auf 0 iss, und das geschieht erst, wenn die andere taste, also taste 2 gedrückt wurde.

so solltes wundabar funzen... wie immer :-P

Martin