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.
Beste GrüßeCode: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
Stefan[/code]







Zitieren
Lesezeichen