so, ich habe nun einen neuen Lösungsansatz:
Problem war dass bei einem langen Tastendruck mehrmals zuvor geschaltet wurde bis der lange Tastendruck zählt(also der kurze Tastendruck wurde vorher ausgewertet). Nun habe ich mit den Bedingungen Variablen gesetzt und diese werden 1 mal pro Sekunde an die Ports übertragen.

Manchmal kommt es vor, dass der Timer schon fast durchgelaufen ist, wenn eine Taste gedrückt wird. Wie muss ich das anstellen, dass der Timer erst losläuft, wenn eine Taste gedrückt wird?
Code:
'-------------------------------------------------------------------------------
'Konfiguration µC:
$regfile = "m8def.dat"                                      'AT-Mega8
$crystal = 16000000                                         'Quarz: 16 MHz
$baud = 38400                                               'Baudrate definieren

'-------------------------------------------------------------------------------
'Ein- Ausgänge:
Ddrb = &B11111111                                           '1 Ausgang, 0 Eingang => Pin PB7-0 als Ausgang
Ddrc = &B11111111                                           '1 Ausgang, 0 Eingang => Pin PB7-0 als Ausgang

Portb = 0
Portc = 0

'-------------------------------------------------------------------------------
'Timer0 = 8 Bit
'wird für RC5 Auswertung benötigt!!!
Config Rc5 = Pind.3                                         'Timer0 in Benutzung!!!
Portd.3 = 1                                                 '??????????????????????????????????

'16Bit Timer:
Config Timer1 = Timer , Prescale = 256
On Timer1 Timer1_irq
Const Timervorgabe = 64911                                  '100 mal pro Sekunde
Enable Timer1
Enable Interrupts


'-------------------------------------------------------------------------------
'Variablen:
'-------------------------------------------------------------------------------
Dim Address As Byte , Command As Byte , Command_old As Bit , Flag As Bit       'RC5

'Taste lange gedrückt
Dim Taste_lang As Word
'Taste 1-6 auf der FB
Dim T1 As Word , T2 As Word , T3 As Word , T4 As Word , T5 As Word , T6 As Word
'Lampe 1-12
Dim L1 As Bit , L2 As Bit , L3 As Bit , L4 As Bit , L5 As Bit , L6 As Bit , L7 As Bit , L8 As Bit , L9 As Bit , L10 As Bit , L11 As Bit , L12 As Bit ,
Dim L1s As Bit , L2s As Bit

Dim Sek As Byte                                             'wenn = 100 dann 1 sec um

'Lampen festlegen
L1 Alias Portc.5
L2 Alias Portc.4



'-------------------------------------------------------------------------------
'Vor Programmstart:

'alle Lampen aus:
L1 = 0
L2 = 0
L3 = 0
L4 = 0
L5 = 0
L6 = 0
L7 = 0
L8 = 0
L9 = 0
L10 = 0
L11 = 0
L12 = 0


'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Hauptprogramm Do...Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Print " geht los... "
Do


'-------------------------------------------------------------------------------
'Rc5 Code einlesen:
Getrc5(address , Command)
    'Print "Address: " ; Address
     'Print "Command: " ; Command



'-------------------------------------------------------------------------------
'RC5 Code umsetzen:

   If Address = 0 Then                                      'Adresse 0=TV FB

     If Command.7 = Command_old Then
     Incr Taste_lang
     Else
     Command_old = Command.7
     End If

     'Print "Command.7: " ; Command.7
     'Print "Taste_lang: " ; Taste_lang

        'Command = Command And &B01111111                    'reset toggle bit
        Reset Command.7                                     'reset toggle bit
        Select Case Command

           Case 0 : Print "CASE = 0"
           Case 1 : Incr T1
           Case 2 : Incr T2
           Case 3 : Incr T3
           Case 4 : Incr T4
           Case 5 : Incr T5
           Case 6 : Incr T6
           Case Else : Print "Fehler: " ; Command
         End Select





         If T1 > 0 Then                                     'wenn Taste 1 gedrückt wurde

               L1s = L1                                     'Iststatus übernehmen
               L2s = L2                                     'Iststatus übernehmen

                 If L1s = 0 And L2s = 0 Then
                     L1s = 1
                     Goto Sprung1                           'wenn Bedingung richtig, dann Restüberspringen bzw. bei lange drücken weitermachen
                 End If
                 If L1s = 1 And L2s = 0 Then
                     L1s = 0
                     Goto Sprung1
                 End If
                 If L1s = 1 And L2s = 1 Then
                     L2s = 0
                 End If

      Sprung1:


                  If Taste_lang => 2 Then                   'wenn lange gedrückt wird
                     Print "Taste_lang: " ; Taste_lang
                     If L1 = 1 And L2 = 0 Then
                     L1s = 1                                'immer beide setzen, falls davor anders gesetzt wurde(einzellampe)
                     L2s = 1
                     Goto Sprung2                           'wenn Bedingung richtig, dann Restüberspringen bzw. bei lange drücken weitermachen
                     End If
                     If L1 = 1 And L2 = 1 Then
                     L1s = 0
                     L2s = 0
                     Goto Sprung2                           'wenn Bedingung richtig, dann Restüberspringen bzw. bei lange drücken weitermachen
                     End If
                     If L1 = 0 And L2 = 0 Then
                     L1s = 1
                     L2s = 1
                     End If
                  End If

      Sprung2:

         End If                                             'ENDE von "wenn Taste 1 gedrückt wurde"







     'Print "-----------------------"
     'Print "Address: " ; Address
     'Print "Command: " ; Command
     'Print "-----------------------"



   Else                                                     'Wenn Adresse nicht = 0
      'Timer1 = Timervorgabe                                 'Timer1 zurücksetzen, damit erst bei Tastendruck gezählt wird
      'Print "timerzurück"
   End If




If Sek => 100 Then
Sek = 0
T1 = 0
T2 = 0
T3 = 0
T4 = 0
T5 = 0
T6 = 0
Taste_lang = 0

L1 = L1s
L2 = L2s

Print "L1: " ; L1
Print "L2: " ; L2

Sek = 0
End If



Loop
'-------------------------------------------------------------------------------

'-------------------------------------------------------------------------------
'Sprungmarken
'-------------------------------------------------------------------------------
Timer1_irq:
Timer1 = Timervorgabe

Incr Sek



Return