Rene schrieb:
> Meine Idee war es, z.B. an den Ports 1.1 bis 1.7 die Impulse zu
> empfangen und über Interrupt zu erfassen.
> Der Interrupt für den Port 1 wird aber für den gesamten Port, also alle
> 8 Leitungen abgerufen. Wenn also an Port 1 ein Impuls eintrifft, wird er
> aufgerufen. Die einzelnen Pins müßte ich dann in der Interruptroutine
> abfragen. Dann zähle ich aber mitunter Signale doppelt, da ich nicht
> weiß welcher Port den Interrupt ausgelöst hat.
> Hat jemand eine Lösung?
Zum einen erhebt sich die Frage, warum das unbedingt Interrupts sein
müssen. 20-50ms sind für einen µC eine lange Zeit. Das würde auch mit
Polling (also regelmässigem Nachsehen) genauso gut gehen.
Zum anderen: Na du kannst ja vergleichen, wie der Zustand des Portes
beim letzten Interrupt war. Du merkst dir einfach den kompletten
Portzustand und beim nächsten Interrupt vergleichst du mit dem dann
vorliegenden Portzustand. Alle Bits die verändert sind, zeigen an, dass
sich da was getan hat. Und dann merkst du dir genau diesen Portzustand
für den wiedrrum nächsten Aufruf der ISR. Du musst natürlich ALLE
Flanken am Port mitkriegen, nicht nur die steigenden Flanken.
(Hinweis: die XOR Operation kann man in so einem Fall tadellos
einsetzen)
-> d.h. dein Interrupt bringt dir im Grunde jetzt gar nichts mehr,
sofern dein Restprogramm nicht trödelt. Denn um das vergleichen mit dem
vorhergehenden Portzustand kommst du eh nicht rum. Und das kannst du
genausogut in der Hauptschleife auch machen.