hallo, habe den bascom-code für mich umgesetzt, einen atmega32 mit 8mhz.

wenn ich die fb-taste 1x drücke erscheint auch der code von der fb.

dann geht es nicht weiter. ich kann die fb-drücken, es tut sich nichts.
bin ich irgendwie aus der schleife rausgeworfen worden.

wer erkennt hier den fehler?

Code:
$crystal = 8000000
$regfile = "m32def.dat"
$hwstack = 32
$swstack = 32
$framesize = 64


Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2

Dim Impuls_laenge As Word , Flanken_index As Byte , Flanken_anzahl As Byte , Bit_count As Byte
Dim Befehl As Word , Geraet As Word , Neg_befehl As Word , Neg_geraet As Word , Nrc17_start As Byte
Dim Daten_pruefung As Byte , Parity As Byte , Hersteller As Word , System As Byte , Produkt As Byte , Modus As Byte
Dim Imp_array(200) As Byte , Daten As Long , Daten1 As Long , Temp_daten As Long , Code_found As Byte
Dim Timer0_startwert As Word , I As Byte
Dim Print_pc As Byte
Dim Zeit As Byte

Zeit = 3
Const Std_pulse = 5
Const Std_pulse_min = Std_pulse - 2
Const Std_pulse_max = Std_pulse + 2

Config Timer0 = Timer , Prescale = 8                        'hier den Timer eintragen (8-bit)
On Ovf0 Tim0_isr
Enable Timer0
Timer0_startwert = 161                                      'bei mir 16000000/8/(256-56) entspricht 10Khz
Timer0 = Timer0_startwert                                   'Auflösung reicht und gefundene Werte entsprechen immer 100µs

Config Int0 = Change                                        'externer interrupt, bei mir Int0 auf portd.2
On Int0 Get_rc_isr
Enable Int0
Ddrd.2 = 0                                                  'ausgang des RC-empfängers
Portd.2 = 1

$baud = 19200                                               'Vorsicht: Wenn's langsam geht, kann dies die erkannten Flankenzeiten beeinflussen

Print_pc = 1                                                'auf 1 setzen, um über Print auszugeben

Enable Interrupts

Do
   If Code_found = 1 Then                                   'Jetzt geht es an die Erkennung des Codes
      Flanken_index = Flanken_anzahl
      Daten = 0
      Daten1 = 0
      Bit_count = 0
      Code_found = 0

'RC5 hat immer gerade Anzahl Flanken, bei mir immer zwischen 16 und 26
'Imp_array(1) enthält die Pause seit dem letzten Befehl, ist also uninteressant
'Imp_array(2) ist das Ende der ersten Start-1
'Imp_array(3) ist der Anfang der zweiten Start-1

      If Flanken_index > 15 And Flanken_index < 27 And Flanken_index.0 = 0 And Imp_array(2) > 6 And Imp_array(2) < 11 And Imp_array(3) > 6 And Imp_array(3) < 11 Then
         If Print_pc = 1 Then Print "RC5: "
         I = 4                                              '           Imp_array(4) ist das Toggle-bit
         Daten.0 = 1
         While I < Flanken_index                            '           Loop bis zur letzten Flanke, immer beim wichtigen Flankenwechsel in der Mitte des Impulses
            Shift Daten , Left                              '          Daten (Ergebnis) nach links schieben, 0 einfügen
            Daten.0 = Daten.1                               '            Das letzte Bit wie das vorletzte setzen
            If Imp_array(i) > 6 And Imp_array(i) < 11 Then  '           kurzer Impuls (also kein Wechsel 0->0 oder 1->1)
               Incr I                                       '           nächste Flanke
               If Imp_array(i) < 7 Or Imp_array(i) > 10 Then       '    kein kurzer Impuls => Fehler (wenn in der Mitte ein kurzer war, dann muss noch ein kurzer kommen)
                  Exit While                                '           Abbruch
               End If
            Elseif Imp_array(i) < 19 And Imp_array(i) > 15 Then       'langer Impuls (also Wechsel 1->0 oder 0->1)
               Toggle Daten.0                               '           also letztes bit umschalten
            Else
               Exit While                                   '           sonst Abbruch
            End If
            Incr I                                          '           nächste Flanke
            Incr Bit_count                                  '           zählt die Anzahl der korrekt gelesenen Bits
         Wend
         If I >= Flanken_index Then                         'Wenn kein Abbruch
            If Imp_array(i) < 19 And Imp_array(i) > 15 Then 'Falls am Ende noch ein bit-Wechsel 1->0 kommt
               Shift Daten , Left                           'Daten (Ergebnis) nach links schieben, 0 einfügen
               Incr Bit_count
            End If
            Temp_daten = Daten                              'Daten zwischenspeichern
            Befehl = Temp_daten And &B00111111              'Befehl sind die letzten 6 bits
            Shift Temp_daten , Right , 6                    'Befehls-bits rausshiften
            Geraet = Temp_daten And &B00011111              'Gerät sind die ersten 5 bits
            If Print_pc = 1 Then Print ": Ger=" ; Geraet ; ", Bef=" ; Befehl
            Cls
            Locate 1 , 1 : Lcd "RC5"
            Locate 2 , 1 : Lcd "Ger=" ; Geraet ; ", Bef=" ; Befehl
         End If
      End If

   End If
Loop

End

Tim0_isr:
   Timer0 = Timer0_startwert
   Incr Impuls_laenge                                       'bei jedem Überlauf um 1 erhöhen
   If Impuls_laenge = 200 Then                              'Kein Impuls für 20ms und in Get_rc_isr schon mindestens 14 Flanken gespeichert
      If Flanken_anzahl > 13 Then
         Code_found = 1                                     'Auswertung im Hauptprogramm starten
      End If
   End If
Return

Get_rc_isr:
   If Impuls_laenge > 0 Then
      Incr Flanken_anzahl
      If Flanken_anzahl > 200 Then Flanken_anzahl = 200
      If Impuls_laenge > 255 Then Impuls_laenge = 255
      Imp_array(flanken_anzahl) = Impuls_laenge
      Impuls_laenge = 0
   End If
Return