Hallo Markus
Ich greife auch nicht im code auf das flag zu. Im Datenblatt steht, es sollte vor dem Sprung in den betreffenden Interruptvektor gesetzt werden. Beim debuggen habe ich jedoch gesehen, dass es nicht gesetzt wurde.
Könnte es sein, dass der Interrupt deshalb mehrmals abgearbeitet wird, weil mehrere Impulse vom Taster kommen? Wäre mir neu, dass der AVR Interrupts "speichert". Aber auch das würde immer noch nicht erkären, wieso das INTF1-flag nicht gesetzt wird.
Ja, ich habe eine kleine Eigenkreation angehängt. Dies sollte jedoch kein Problem sein, die Tastendrücke wurden alle erkannt.
Die Funktion dieser Schaltung ist wie folgt: zuerst sind A, B und C auf 1. Ein Tastendruck bewirkt nun einen Interrupt an INT1. In der Interrupt-routine wird nun INT1 auf Ausgang und 0 geschaltet und A, B und C als Eingänge mit Pull-ups. Der code der gedrückten Tasten liegt nun in negativer Logik an A, B und C an. Es müssen nur noch die anderen Ports von PORTD mit einer Maske ausgefiltert werden und schon hat man einen schönen Wert.







Zitieren
Lesezeichen