Ahhh - Missverständnis!
Reset_Status() testet nur die "Reset"-Taste an PA2,
PA3 heisst Start_Status(), usw.
Alles eigenständige Funktionen, in dehnen entprellt und der letzte Zustand ausgegeben wird.
Dann scheint mein Weg doch nicht so schlecht.
Nur bei der Auswertung bin ich mir noch nicht sicher.
Code:
if(RegisterA & (1<<PINA2)) != 0)
Die Zeile sollte die "alte, gespeicherte" Pinbelegung PA2 (RegisterA, vor dem Interrupt) mit dem "neuen, aktuellen" Zustand PA2 vergleichen um heraus zu finden, ob PA2 den Interrupt ausgelöst hat.
1- Ist eine Veränderung zu erkennen, wird PA2 entprellt, danach Zustand 0/1 abfragen und weiter bearbeiten.
2 -Wenn nicht, wird PA3 usw. abgefragt.
- - - Aktualisiert - - -
Müsste der alt/neu-Vergleich nicht eher folgend aussehen?
Code:
volatile uint8_t RegA_alt = PINA;
ISR (PCINT0_vect)
{
uint8_t RegA_neu = PINA;
uint8_t RegA_diff = RegA_alt ^ RegA_neu; // hier sollte in jedem Reg.eintrag eine "1" stehen, wenn sich zum "alten" (Vor-Interrupt-Auslösung) eine Veränderung ergeben hat
If((RegA_diff & (1<<PINA2)) != 1)
{
//wenn Ja, mach was
{
If((RegA_diff & (1<<PINA3)) != 1)
{
//wenn Ja, mach was
}
//usw. mit PA4, PA5
Lesezeichen