Hallo Inkognito,

hier ein Schnippsel aus einem Programm von mir für den ATMega88, wo ich per Interrupt Signale einer spezielln Fernbedienung (nicht RC5) auswerte. Dazu messe ich jeweils die Zeit zwischen den Interrupts.
"Zeit messen" ist dabei fast falsch formuliert, denn mich interessiert hier kein Wert in menschenlesbarer Form, wie tausendstel Sekunden oder sowas, sondern es gibt in meinem Programm nur wenige unterschiedliche Pulslängen. Mir reicht es, die klar zu unterscheiden.


Code:
Config Timer0 = Timer , Prescale = 1024         

On Pcint0 Int0_int       'Pin-Change-Interrupt initialisieren.
Pcmsk0 = &B00000001      'Nur PortB.0 abfragen.
Enable pcInt0            'Den Interrupt aktivieren.


Const Timervorgabe = 0
Enable Timer0                         'Hier werden die Timer aktiviert

'##########################################
Int0_int:
'Hinweis: Die im Quelltext angegebene "Wechselzeit" bezieht sich auf einen 16MHz-Quarz
'unter Verwendung eines 8-Bit Timers mit Prescaler 1024.
'"Wechselzeit" ist die Zeit zwischen den Flanken, also von PC-Interrupt zu PC-Interrupt.
'---------------------------------------------------------------------------------------------------

Incr Ir_bitcount
Wechselzeit=Timer0   '-Timervorgabe
Timer0 = Timervorgabe

if Wechselzeit<3 then
  Goto Verwerfen    'Zeit zu kurz. Fehlempfang. Paket verwerfen und raus hier.
end if



if EinsGleichZwei=1 then  'Nur durch Goto erreichbare Routine.
  verwerfen:
  Ir_Bitcount=0
  Bitnummer=0
  IR_Adresse=0
  IR_Daten=0
end if

Return
Beste Grüße
Stefan[/code]