moin!
So hier nochmal der ganze code
Code:
Declare Function Srf08_firmware(byval Sf08_adr_0 As Byte) As Byte
Declare Sub Anfahren()
Declare Sub Fahrt()
Declare Sub Bremsen()

$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600

Const Sf08_adr_0 = &HE0                                     ' I2C Adresse
Const Sf08_c_range = 100                                    ' Reichweite
Const Sf08_c_gain = 1                                       'Empfindlichkeit
Const Sf08_adr_0_read = &HE1

Dim I As Integer
Dim Infahrt As Bit
Config Scl = Portc.0                                        'Ports fuer IIC-Bus
Config Sda = Portc.1

'Ports für linken Motor
Config Pinc.6 = Output                                      'Linker Motor Kanal 1
Config Pinc.7 = Output                                      'Linker Motor Kanal 2
Config Pind.4 = Output                                      'Linker Motor PWM
'Ports für rechten Motor
Config Pinb.0 = Output                                      'Rechter Motor Kanal 1
Config Pinb.1 = Output                                      'Rechter Motor Kanal 2
Config Pind.5 = Output                                      'Rechter Motor PWM
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Pwm1a = 0
Pwm1b = 0
Tccr1b = Tccr1b Or &H02                                     'Prescaler = 8


'###############################################################################
'###############################################################################
'##                                  MAIN                                     ##
'###############################################################################
'###############################################################################

I2cinit

'###############################################################################
'#    Setzten des Range Wertes                                                 #
'###############################################################################

I2cstart
I2cwbyte Sf08_adr_0
I2cwbyte 2
I2cwbyte Sf08_c_range
I2cstop

'###############################################################################
'#    Setzten des Gain Wertes                                                  #
'###############################################################################

I2cstart
I2cwbyte Sf08_adr_0
I2cwbyte 1
I2cwbyte Sf08_c_gain
I2cstop


Dim Lsb As Byte
Dim Msb As Byte
Dim Ival As Word
Dim D As Integer
Dim Firmware As Byte

'###############################################################################
'#    Messung auslösen                                                         #
'###############################################################################
Messen:
Do

I2cstart
I2cwbyte Sf08_adr_0
I2cwbyte 0
I2cwbyte 81
Waitms 70

Warteaufmessung:
   Waitms 1
   Firmware = Srf08_firmware(&He0)
   If Firmware = 255 Then Goto Warteaufmessung

'###############################################################################
'#    Ergebnis abholen                                                         #
'###############################################################################

I2cstart
I2cwbyte Sf08_adr_0
I2cwbyte 2

I2cstart
I2cwbyte Sf08_adr_0_read
I2crbyte Msb , Ack
I2crbyte Lsb , Nack
I2cstop

Ival = Makeint(lsb , Msb)

'###############################################################################
'#    Ergebnis anzeigen                                                        #
'###############################################################################

Print "Die Entfernung beträgt " ; Ival ; " Zentimeter."
Print "***************************************************"
Waitms 100

'###############################################################################
'#    Fahren                                                                   #
'###############################################################################


Print "***************************************************"
  If Infahrt = 0 Then
      Call Anfahren
    Infahrt = 1
  End If


  Do
    Call Fahrt
    Print "und messen..."
    Goto Messen
  Loop Until Ival < 50

    Call Bremsen
  Wait 3

Loop

End

'###############################################################################
'###############################################################################
'##                                  MAIN ENDE                                ##
'###############################################################################
'###############################################################################


Function Srf08_firmware(byval Sf08_adr_0 As Byte) As Byte

Local Sf08_adr_0_read As Byte

   I2cstart
   I2cwbyte Sf08_adr_0
   I2cwbyte 0                                               'Leseregister festlegen
   I2cstop

   I2cstart
   I2cwbyte &HE1
   I2crbyte Firmware , Nack
   I2cstop

   Srf08_firmware = Firmware
End Function


Sub Anfahren()
   'Linker Motor ein
   Portc.6 = 1                                              'bestimmt Richtung
   Portc.7 = 0                                              'bestimmt Richtung
   Portd.4 = 1                                              'Linker Motor EIN
   'Rechter Motor ein
   Portb.0 = 1                                              'bestimmt Richtung rechter Motor
   Portb.1 = 0                                              'bestimmt Richtung rechter Motor
   Portd.5 = 1                                              'rechter Motor EIN

   I = 0
   Do
      Pwm1a = I
      Pwm1b = I
      Waitms 40
      I = I + 5
   Loop Until I > 1023

End Sub

Sub Fahrt()
   'Linker Motor ein
   Portc.6 = 1                                              'bestimmt Richtung
   Portc.7 = 0                                              'bestimmt Richtung
   Portd.4 = 1                                              'Linker Motor EIN
   'Rechter Motor ein
   Portb.0 = 1                                              'bestimmt Richtung rechter Motor
   Portb.1 = 0                                              'bestimmt Richtung rechter Motor
   Portd.5 = 1                                              'rechter Motor EIN

   I = 1023
   Pwm1a = I
   Pwm1b = I
End Sub

Sub Bremsen()
   'Linker Motor ein
   Portc.6 = 1                                              'bestimmt Richtung
   Portc.7 = 0                                              'bestimmt Richtung
   Portd.4 = 1                                              'Linker Motor EIN
   'Rechter Motor ein
   Portb.0 = 1                                              'bestimmt Richtung rechter Motor
   Portb.1 = 0                                              'bestimmt Richtung rechter Motor
   Portd.5 = 1                                              'rechter Motor EIN

   I = 1023
   Do
      Pwm1a = I
      Pwm1b = I
      Waitms 40
      I = I - 30
   Loop Until I < 5

   Pwm1a = 0
   Pwm1b = 0

End Sub
ich hab dieses 'und messen...' nur mal in die schleife reingemacht um zu kontrollieren, ob er aus der 'Fahren-Sub' rausgeht...
das macht er soweit...
also muss das problem wirklich an dem vergleich liegen...
so dass er eben nicht erkennt wenn die entfernung kleiner 50 ist ( ival<50)

mfg

Jürchen