A. H. schrieb:
> eingefügt. Die Frage ist wieso? In der ISR von P1 werden die Interrupts
> von P1 ja disabled und erst nach 250ms wiedre aktiviert.
Tja. Aber nur weil du Interrupts disabled hast, werden sie ja deswegen
nicht verworfen.
Selbstverständlich wird ein Interrupt Ereignis auch dann registriert,
wenn die Interrupts disabled sind. Einzig das Auslösen des Aufrufs der
ISR unterbleit, aber der µC hat sich in einem Bit in einem Register
gemerkt, dass eine entsprechende 'Anforderung' eingetroffen ist. Und
sobald die Interrupts wieder freigegeben werden, wird dann dieser
Interrupt 'nachgeholt'.
Also entweder du suchst dir in der Doku, welches Bit in welchem Register
diese 'Speicherung' macht und löscht es, bevor du die Interrupts wieder
freigibst oder du akzeptierst, dass man zum Abfragen von Tasten keine
externen Interrupts braucht, sondern das genau das im Grunde genommen
mehr Aufwand ist, als wie wenn du das genau so machst wie es der Rest
der (vernünftigen) Programmiererwelt auch macht: mit einem Timer, der
alle paar Millisekunden einen Interrupt auslöst, in dem ganz banal
nachgesehen wird, ob die Taste gedrückt ist und wenn in der Interrupt
Routine das zb 4 mal hintereinander festgestellt wurde, dann gilt die
Taste als gedrückt. So schnell kannst du als Mensch eine Taste gar nicht
drücken und wieder loslassen, dass der µC mit seiner 'Nachschau' alle
paar Millisekunden das nicht mitbekommen würde.