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]
Lesezeichen