Interrupts...
wenn man Interrupts verwendet, ist es kein Problem auf steigende oder fallende Flanken zu detektieren (kann man im Datenblatt bzw. im User Guide nachlesen).
ansonsten hat unser lieber Gast schon gesagt wie es geht:
Du pollst den Pin (d.h. fragst ihn ständig ab) und speicherst den Status des Pins im RAM. Dann nimmst du den aktuellen Wert am PIN und vergleichst ihn mit dem vorherigen (im RAM abgelegten) Wert. Wenn die gleich sind, gabs keine Änderung, bedeutet: Flanken gibt es nur wenn sich was ändert.
=> Wahrheitstabelle:
Xalt | Xneu | Resultat (Änderung?)
0 | 0 | keine Änderung (0)
0 | 1 | steigende Flanke (1)
1 | 0 | fallende Flanke (1)
1 | 1 | keine Änderung (0)
und diese Wahrheitstabelle entspricht der für XOR (XOR= Exklusiv-Oder).
D.h. du kannst mittels XOR schnell überprüfen, ob sich was geändert hat.
Wenn sich nichts geändert hat, dann wieder den Wert auslesen und wieder XOR, wenn sich nichts geändert hat... (usw.)
Vorteil von der Verwendung von XOR: gegenüber der Methode durch subtrahieren und auf das Zero-Flag schauen: Es geht sehr viel schneller...
Wenn sich was ändert, dann hast du eine Flanke (entweder fallend oder steigend).
D.h. du gehst jetzt hin und speicherst den Wert im RAM als Xalt zwischen (denn es kann ja immer der böse Timer-Interrupr kommen und dein pollen unterbrechen). Dann brauchst du nur noch schaun, ob dein Xalt ne 1 ist (dann wars vorher ne 0) oder ne 0 (dann wars vorher ne 1). Daraus kannst du dann ablesen welche Flanke es war.
Und mittels btfsc kannst du dann das Bit Xalt prüfen und schauen, wohin du springen musst (d.h. welcher Programmabschnitt ausgeführt werden muss).
So, aber eigentlich will ich dir nicht alle Arbeit abnehmen und du sollst dir selber auch ein paar Gedanken machen...
Daher les einfach mal das Datenblatt durch (vielleicht nicht das ganze, aber zumindest die dich betreffenden Teile).
Und du solltest dir überlegen, was du mittels Interrupts machen willst, und was du per Schleife machen willst (also pollen). Überleg dir das mal und schreib es hier hin. Ich sag dir dann schon, wenns falsch ist

Lesezeichen