Vielleicht hilft Dir das weiter: Allerdings frage ich den Blinkerhebel nicht per Interrupt ab. Ich habe es nicht getestet, sollte aber wenn nur kleine Fehler enthalten.

Code:
'Komfortblinker

' PB1   Ausgang Relais (High-Active)
' PB2   Ausgang Relais (High-Active)
'
' PD2   Eingang Blinkerhebel (Low-Activ)(INT0)
' PD3   Eingang Blinkerhebel (Low-Activ)(INT1)
' PD7   TimeSet (Low-Activ)


'---------- uC-Konfig ----------


$regfile = "m8def.dat"                                      'ATMega8
$crystal = 1000000                                          'Quarz: 1 MHz

$hwstack = 40
$swstack = 40
$framesize = 60



'---------- Port-Konfig ----------

Ddrb = &B11111111                                           'Port B als Ausgang
Portb = &B00000000                                          'Port C komplett auf 0 setzen

Ddrd = &B00000000                                           'Port D als Eingang
Portd = &B11111111                                          'PullUp´s aktivieren


Ql Alias Portb.1
Qr Alias Portb.2
Il Alias Pind.2
Ir Alias Pind.3
Timeset Alias Pind.7

Dim Richtung As Byte
Dim Eingangalt As Byte
Ila Alias Eingangalt.1
Ira Alias Eingangalt.2
Const Links = 1
Const Rechts = 2

Dim Tickcount As Long
Dim Blinkzeit As Long
Dim Maxzeit As Long
Dim Dum1 As Eram String * 10                                'dummy
Dim Emaxzeit As Eram Long


Config Timer0 = Timer , Prescale = 64                       '10ms Takt

On Timer0 Timer_irq

Const Timervorgabe = 100


Enable Timer0
Enable Interrupts

Maxzeit = Emaxzeit
If Maxzeit < 1 Then
   Maxzeit = 300                                            '3 sekunden
End If
if Maxzeit > 1200 Then
   Maxzeit = 300
End If

Do
   If Timeset = 0 Then
      Gosub Zeitsetzen
      Goto Sprung
   End If
   Gosub Eingang
   Gosub Zeiten

Sprung:

Loop
End



Eingang:
   If Il <> Ila Then
      Ila = Il
      Waitms 50'entprellung
      If Ila = 0 Then
         If Richtung = Links Then
            Richtung = 0
         Else
            Richtung = Links
            Tickcount = 0
            Reset Qr
            Set Ql
         End If
      End If
   End If

   If Ir <> Ira Then
      Ira = Ir
      Waitms 50'entprellung
      If Ira = 0 Then
         If Richtung = Rechts Then
            Richtung = 0
         Else
            Richtung = Rechts
            Tickcount = 0
            Reset Ql
            Set Qr
         End If
      End If
   End If

   If Richtung = 0 Then
      If Il = 1 Then
         Reset Ql
      End If
      If Ir = 1 Then
         Reset Qr
      End If

   End If
Return

Zeiten:
   If Richtung > 0 Then
      If Tickcount > Maxzeit Then
         Richtung = 0
      End If
   End If


Return

Zeitsetzen:
   If Il <> Ila Then
      Ila = Il
      Waitms 25'entprellung
      If Ila = 0 Then
         Richtung = Links
         Tickcount = 0
         Reset Qr
         Set Ql
      Else
         Reset Ql
         Maxzeit = Tickcount
         Emaxzeit = Maxzeit
         Richtung = 0
      End If
   End If

   If Ir <> Ira Then
      Ira = Ir
      Waitms 25'entprellung
      If Ira = 0 Then
         Richtung = Rechts
         Tickcount = 0
         Reset Ql
         Set Qr
      Else
         Reset Qr
         Maxzeit = Tickcount
         Emaxzeit = Maxzeit
         Richtung = 0
      End If
   End If

Return


Timer_irq:
  Timer0 = Timervorgabe
  Tickcount = Tickcount + 1
  If Tickcount = 2147483647 Then Tickcount = 0              'sollte es eigentlich nie zu kommen

Return
edit: Maxzeitgrenze optimiert.
edit 2: Eingänge entprellt (05.06.08/11:54)