Hallo Burki,
hab es noch einmal ganz einfach zusammen geschrieben.
Das erste Listing war einfach nur aus Codeschnipsel zusammenkopiert.
Schau es Dir mal an!
Code:
'******************************************************************************

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

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

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


'Power-Port
Const Writepowerport_adr = &H72                             'I2C Adr PCF 1
Const Readpowerport_adr = &H73                              'I2C Adr PCF 1

Dim I2cdaten As Byte                                        'Datenbyte aus PCF8574
Dim Taste1 As Byte                                          'Größe für Variable festlegen
Dim Taste2 As Byte                                          'Größe für Variable festlegen

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(vorsichtshalber :-) )

Taste1 = 247                                                'Taste 1    (Eingangsport-Port3)  Variable für den Eingang
Taste2 = 251                                                'Taste 2    (Eingangsport-Port4)  Variable für den Eingang


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

Do

   I2cstart
   I2cwbyte Readeingabeport_adr                             'Lesebefehl an PCF schicken
   I2crbyte I2cdaten , Nack                                 'Datenbyte von PCF lesen
   I2cstop                                                  'I2C STOP


   If I2cdaten = Taste1 Then Goto Relais_on                 'Vergleich-> ist Taste1 dann gehe zu Unterprogramm Relais_on
   If I2cdaten = Taste2 Then Goto Relais_off                'Vergleich-> ist Taste2 dann gehe zu Unterprogramm Relais_off

Loop


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

   Relais_on:

      I2cinit                                               'I2C Initilisieren
      I2cstart                                              'I2C START
      I2cwbyte Writepowerport_adr                           'Schreibbefehl an PCF1 schicken

      I2cwbyte &B00100000                                   'Datenbyte an PCF1 -> PowerPort 6 einschalten
                                                             'binäre Darstellung, Port 6 auf High geschaltet
      I2cstop                                               'I2C STOP
      Return                                                'Rücksprung in Hauptprogramm


   Relais_off:

      I2cinit                                               'I2C Initilisieren
      I2cstart                                              'I2C START
      I2cwbyte Writepowerport_adr                           'Schreibbefehl an PCF1 schicken

      I2cwbyte &B00000000                                   'Datenbyte an PCF1 -> PowerPort  ausschalten
                                                             'binäre Darstellung, wenn Ports 1-8 auf Low geschaltet
      I2cstop                                               'I2C STOP
      Return                                                'Rücksprung in Hauptprogramm
Sieht doch etwas übersichtlicher aus.

Beim RNBFRA-Board mußt man bei den Eingängen und Ausgängen alles über I2C-Routinen machen.
Aber wenn man mal das Ganze vereinfacht anschaut, fragt man in der Hauptschleife die Eingänge ab, vergleicht sie und stößt ein Unterprogamm an.
Nach dem Abarbeiten des Unterprogrammes, erfolgt ein Rücksprung in die Hauptschleife.