Sarah schrieb:
In Ergänzung zu den bereits genannten Links
> ich sollte einen Kurzen (<0,3s)Tastendruck von S0 schaltet LED0 ein
> und LAnger(>=0,3s) Tastendruck von S1 schaltet LED0 aus.
>
> und ich sollte das mit einer ISR machen und einen softwarevorteiler
> realisieren.
Na dann würde es sich zb anbieten, wenn du einen SOftwarevorteiler so
einstellst, dass du Programmcode zb alle 0.1 Sekunden ausführen lässt
FAQ: Timer
Wenn dann in diesem Programmcode die Taste 1 oder 2 mal hintereinander
als gedrückt erkannt wurde, dann war es ein kurzer Tastendruck. Wird die
Taste öfter als 2 mal in Folge als gedrückt erkannt, dann war es ein
langer Tastendruck.
Eines muss dir aber klar sein: Einen kurzer Tastendruck von einem langen
Tastendruck kannst du erst unterscheiden, wenn die Taste losgelassen
wurde. Du musst also rausfiltern, ob die Taste gerade den Übergang von
gedrückt zu nicht gedrckt gemacht hat und wenn dem so ist, dann siehst
du dir an, was deine Zählung der gedrückt-Zeitdauer ergibt.
Stellst du in der Timer-ISR fest, dass die Taste gerade von nicht
gedrückt auf gedrückt gewechselt hat, dann setzt du den Zähler auf 0
Ist andererseits in der ISR die Taste gedrückt, wird der Zähler um 1
erhöht.
Stellst du in der Timer-ISR fest, dass die Taste von gedrückt auf nicht
gedrückt gewechselt hat, dann ist offenbar der Tastendruck zu Ende und
du siehst nach, wie weit der Zähler gekommen ist. Die Zahl verrät dir
dann, wie lange die Taste gedrückt war.
Noch genauer will ich das eigentlich nicht mehr ausführen, denn dann
erledige ich deine Hausaufgaben.
Edit: die genannten Zahlen beziehen sich darauf, dass du den
Software-Vorteiler so einstellst, dass ein bestimmter Programmcode alle
0.1 Sekunden ausgeführt wird. Du kannst das natürlich auch auf viele
anderen Zeiten beziehen. Hauptsache du kriegst das von den vorgegebenen
33Hz vernünftig abgeleitet.