Hallo,

ich habe folgendes Problem: ich möchte, dass eine durch Int0 ausgelöste ISR nur einmal ausgeführt wird, danach nicht mehr. Z.B. soll beim Programmstart die ISR einmal aufgerufen werden, falls das entsprechende Ereignis am Int-Pin stattgefunden hat. Danach soll dieses Ereignis nicht mehr dazu führen, dass die ISR ausgeführt wird. Allerdings möchte ich dieses Verhalten durch eine Art Reset-Funktion zurücksetzen können: wird zB eine bestimmte Taste gedrückt, soll der Controller wieder auf das externe Ereignis warten, einmal die ISR ausführen und danach wieder umempfindlich für Int0 sein. Ich hoffe ich konnte mich verständlich machen, klingt jetzt irgendwie komplizierter als es ist...

Was ich dazu gemacht habe: in der ISR für Int0 wird dieser als erstes direkt ausgeschaltet ("Disable Int0"). An anderer Stelle im Programm wird Int0 dann bedarfsweise wieder aktiviert ("Enable Int0"). Das funktioniert aber nur so "halb": Wenn nach dem "Disable Int0" das externe Ereignis auftritt, wird die ISR zunächst nicht aufgerufen - so weit so gut. Wenn ich dann aber den Int0 wieder einschalte ("Enable Int0") wird die ISR sofort angesprungen obwohl sich nichts an dem entsprechenden Pin getan hat. "Enable Int0" führt aber eindeutig nicht zum Ausführen der ISR, wenn während der "disbale-Phase" nichts passiert ist. Der Controller merkt sich also offensichtlich irgendwo, dass das externe Ereignis da war, auch wenn er den Interrupt dann korrekterweise nicht direkt ausführt. Er meint wohl, er müsste das dann beim nächsten Enable nachholen. Wie kann ich ihm das abgewöhnen?

Vielen Dank schonmal für die Infos, viele Grüße
Malte