Hallo.
So, ich hab jetzt das programm nochmal komplett anders aufgebaut (ohne GOTOs) und es funktioniert auch. Jetzt wollt ich wissen, ob das vom "Stiel" her so OK ist. Wär nett, wenn einer von euch das mal kurz überfliegen könnte.

Code:
$regfile = "2313def.dat"
$crystal = 3686400
$baud = 9600

Dim Zaehler As Byte

Ddrd.2 = 1                                                  'motor rechts vorwärts
Ddrd.3 = 1                                                  'motor rechts rückwärts
Ddrd.4 = 1                                                  'motor links vorwärts
Ddrd.5 = 1                                                  'motor links rückwärts
Ddrb.6 = 1                                                  'enable rechts
Ddrb.7 = 1                                                  'enable links

Ddrb.0 = 0                                                  'taster links vorne
Ddrb.1 = 0                                                  'taster mitte vorne
Ddrb.2 = 0                                                  'taster rechts vorne
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1

Mrechtsvor Alias Portd.2
Mrechtsrueck Alias Portd.3
Mlinksvor Alias Portd.4
Mlinksrueck Alias Portd.5
Enablerechts Alias Portb.6
Enablelinks Alias Portb.7

Schalterlinks Alias Pinb.0
Schaltermitte Alias Pinb.1
Schalterrechts Alias Pinb.2

Config Timer0 = Timer , Prescale = 1024
Enable Timer0
Start Timer0
Enable Interrupts
On Timer0 Ontimer

Enablelinks = 1
Enablerechts = 1

Do
   If Schalterlinks = 1 And Schaltermitte = 1 And Schalterrechts = 1 Then
      Print "g"
      Gosub Gerade
   End If
   If Schalterlinks = 0 Then
      Print "L"
      Zaehler = 0
      Gosub Links
   End If
   If Schaltermitte = 0 Then
      Print "M"
      Zaehler = 0
      Gosub Mitte
   End If
   If Schalterrechts = 0 Then
      Print "R"
      Zaehler = 0
      Gosub Rechts
   End If
Loop

Gerade:
   Mlinksvor = 0
   Mlinksrueck = 0
   Mrechtsvor = 0
   Mrechtsrueck = 0
   Waitms 100
Do
   Mlinksvor = 1
   Mlinksrueck = 0
   Mrechtsvor = 1
   Mrechtsrueck = 0
   If Schalterlinks = 0 Or Schaltermitte = 0 Or Schalterrechts = 0 Then
      Return
   End If
Loop

Links:
   Mlinksvor = 0
   Mlinksrueck = 0
   Mrechtsvor = 0
   Mrechtsrueck = 0
   Waitms 100
Do
   If Schaltermitte = 0 Or Schalterrechts = 0 Then
      Return
   End If
   If Zaehler <= 33 Then
      Mlinksvor = 0
      Mlinksrueck = 1
      Mrechtsvor = 0
      Mrechtsrueck = 1
   Else
      Mlinksvor = 1
      Mlinksrueck = 0
      Mrechtsvor = 0
      Mrechtsrueck = 1
   End If
   If Zaehler = 70 Then
      Return
   End If
Loop

Mitte:
   Mlinksvor = 0
   Mlinksrueck = 0
   Mrechtsvor = 0
   Mrechtsrueck = 0
   Waitms 100
Do
   If Schalterlinks = 0 Or Schalterrechts = 0 Then
      Return
   End If
   If Zaehler <= 33 Then
      Mlinksvor = 0
      Mlinksrueck = 1
      Mrechtsvor = 0
      Mrechtsrueck = 1
   Else
      Mlinksvor = 1
      Mlinksrueck = 0
      Mrechtsvor = 0
      Mrechtsrueck = 1
   End If
   If Zaehler = 90 Then
      Return
   End If
Loop

Rechts:
   Mlinksvor = 0
   Mlinksrueck = 0
   Mrechtsvor = 0
   Mrechtsrueck = 0
   Waitms 100
Do
   If Schalterlinks = 0 Or Schaltermitte = 0 Then
      Return
   End If
   If Zaehler <= 33 Then
      Mlinksvor = 0
      Mlinksrueck = 1
      Mrechtsvor = 0
      Mrechtsrueck = 1
   Else
      Mlinksvor = 0
      Mlinksrueck = 1
      Mrechtsvor = 1
      Mrechtsrueck = 0
   End If
   If Zaehler = 70 Then
      Return
   End If
Loop

Ontimer:
   Incr Zaehler
Return
mfg Markus

Edit: Achja, ich hab jetzt keine Relais mehr, sondern nen L293D, deswegen sind die pinbelegungen jetzt etwas anders.