Am elegantesten geht das mit ´nem Interrupt, den Du auf "Change" konfigurierst.
In der ISR startest Du einen Timer bei steigender Flanke, und bei fallender Flanke stoppst Du ihn und setzt ein Flag-Bit. Da so´n RC-Impuls maximal 2,2ms lang ist, darf der Timer in dieser Zeit nicht überlaufen!Code:Config INT0 = Change Enable INT0 Enable Interrupts
In der Hauptschleife fragst Du das Flag-Bit ab - und wenn´s 1 ist (dh. Impuls ist fertig) checkst Du den Stand des TimerX. Hat er einen gewissen Wert über- oder unterschritten (je nachdem, ob der Impuls beim bremsen länger oder kürzer wird), schaltest Du Dein Bremslicht ein oder aus.Code:ISR: If PIND2=1 then Start TimerX Else Stop TimerX Flag = 1 End if Return
Code:If Flag = 1 then Flag = 0 If TimerX > ... then PORTX.Y=1 else PORTX.Y=0 TimerX=0 End if






Zitieren

Lesezeichen