Hallo,

ich habe ein Programm zur Ansteuerung eines mit LEDs bestückten Schildes für einen Mega8 erstellt.
In diesem Programm zähle ich mit einem Timerüberlauf eine Variable hoch, mit der ich dann über Select Case verschiedene Muster ansteuere (Lauflicht usw.)
Zur Zeit ändere ich die Lichtmuster mit einem BCD-Codierschalter und möchte nun auf die Bedienung mit einer IR-Fernbedienung mit RC5 Code umstellen.

Das Problem ist nun, das mir der Befehl Getrc5 natürlich das Programm extrem ausbremst und die Abfolge der LED Ansteuerung unansehnlich macht.

Meine Frage ist nun, ob es eine Möglichkeit gibt Getrc5 einzubinden unohne das des Programm ausgebremst wird?
Ich habe es schon versucht mit dem Int0 Interrupt (an dem auch der IR-Sensor angeschlossen ist), leider ohne Erfolg.

Code mit dem Versuch habe ich mal angehängt. Unabhängig von meinem Code bin ich natürlich auch an anderen Lösungsansätzen interessiert.


Danke schon einmal für eure Hilfe

Code:
$regfile = "m8def.dat"
$crystal = 8000000


Config POrtB.1 = Output
Config PORTB.2 = Output
Config portb.3 = Output
Config portb.4 = Output
Config portb.5 = Output
Config portC.0 = Output
Config portC.1 = Output

Config PORTD.5 = Input                                      'BCD 1
Config PORTD.6 = Input                                      'BCD 2
Config PORTD.7 = Input                                      'BCD 4
Config PORTB.0 = Input                                      'BCD 8
Config PORTD.2 = Input                                      'Eingang Int0 für RC5 Auswertng

PortD.2 = 1                                                 'PullUp einschalten



Config Timer2 = TIMER , PRESCALE = 1024                     'Timer2 zur erzeugung der Blink- und Blitzsteuerwelle
Config RC5 = PinD.2
Config INT0 = CHANGE

On Int0 Int0_isr
On OvF2 Tim2_isr

Enable Interrupts
Enable Timer2
Enable INT0

Dim dbzaehler as word                                       'Zähler für Blitzer
Dim Ausgangsbyte1 as byte                                   'Zusammenfassung der Ausgänge
Dim BCDstellung as Byte                                     'Byte für Stellund ses BCD Schalters
Dim Fernbedienung as Bit                                    'Merker für eingegangenes Fernbedienungssignal
Dim Adresse as Byte                                         'Adresswariable von Fernbedienung
Dim Komando as Byte                                         'Komandovariable von Fernbedienung
Dim SteuerZeichen as Byte                                   'Variable für empfangendes Fernbedienungszeichen


Const Timerwert = 177                                       'Konstante für Voreinstellung Timerregister Timer0

Timer2 = Timerwert                                          'Timerregister voreinstellen

'Vergabe von Aliasnamen
Ring1 Alias PortB.1
Ring1A Alias PortB.2
Ring2 Alias PortB.3
Ring2A Alias PortB.4
Ring3 Alias PortB.5
Ring3A Alias portC.0
Ring4 Alias portC.1

BCD1 Alias PIND.5
BCD2 Alias PIND.6
BCD4 Alias PIND.7
BCD8 Alias PINB.0

'Voreinstellen von Variablen
dbZaehler = 0
Fernbedienung = 0
Ausgangsbyte1 = &B00000000

Do

If Fernbedienung = 1 then
  GetRC5(Adresse , Komando)
  If Adresse = 30 then
   SteuerZeichen = Komando and &B01111111
   Fernbedienung = 0
   Enable INT0
  End IF
 End IF

 BCDstellung.0 = BCD1
 BCDstellung.1 = BCD2
 BCDstellung.2 = BCD4
 BCDstellung.3 = BCD8

If BCDstellung = 0 then
 Ausgangsbyte1 = 0
End IF

'******************************************************************************
If BCDstellung = 1 or Steuerzeichen = 1 then
 'Lauflicht bis alle Ringe an, dann 2x alle blinken und wieder von vorne
 Select Case dbzaehler
  Case 30 : Ausgangsbyte1 = &B00000011
  Case 60 : Ausgangsbyte1 = &B00001111
  Case 90 : Ausgangsbyte1 = &B00111111
  Case 120 : Ausgangsbyte1 = &B01111111
  Case 150 : Ausgangsbyte1 = &B00000000
  Case 180 : Ausgangsbyte1 = &B01111111
  Case 210 : Ausgangsbyte1 = &B00000000
  Case 240 : Ausgangsbyte1 = &B01111111
  Case 270 : Ausgangsbyte1 = &B00000000
 End SELECT

'Rücksetzbedingung für den DB-Timer
 If dbzaehler => 300 then
  dbzaehler = 0
 End If

End IF
'******************************************************************************
'******************************************************************************

If BCDstellung = 2 then
 'Alle Ringe blinken
 Select Case dbzaehler
  Case 30 : Ausgangsbyte1 = &B01111111
  Case 90 : Ausgangsbyte1 = &B00000000
 End SELECT

'Rücksetzbedingung für den DB-Timer
 If dbzaehler => 120 then
  dbzaehler = 0
 End If
End IF


'Ausgangssignale ansteuern
 Ring1 = Ausgangsbyte1.0
 Ring1A = Ausgangsbyte1.1
 Ring2 = Ausgangsbyte1.2
 Ring2A = Ausgangsbyte1.3
 Ring3 = Ausgangsbyte1.4
 Ring3A = Ausgangsbyte1.5
 Ring4 = Ausgangsbyte1.6

Loop

'Interruptrotiene Timer2 Overflow
Tim2_isr:
 Timer2 = Timerwert                                         'Timerregister voreinstellen
 incr dbzaehler
Return

Int0_isr:
 Disable Int0
 Fernbedienung = 1
Return

End