wenn du wirklich nur einen Pin abfragst und mit dem Ergebnis keine komplizierten Rechnungen ausfuerhst kannste das auch drin lassen. Dann ist dein Problem ein anderes, zB ein anderer Interrupt der viel Zeit klaut. Am besten mal Code posten.

Ein Flag ist meist ein Bit in einer Variable:
Code:
volatile unsigned char flags;
#define f_isr_flag 0x01
#define f_timer 0x02
#define f_timer1 0x04
// weiter gehts mit 0x08, 0x10, 0x20, 0x40, 0x80
// anhand des f_ am Anfang sieht man sehr schnell das es sich hierbei um ein Flag handelt.

// flag setzen, zB in deiner ISR: 
flags |= f_isr_flag;

// flag loeschen
flags &= ~f_isr_flag;

// flag pruefen und anschliessend loeschen
if ( flags & f_isr_flag )
{
    flags &= ~f_isr_flag;
    // code der mal in der ISR war.
}
kannst auch fuer jedes flag ne eigene variable nehmen. und dann einfach immer 0 oder 1 zuweisen. volatile ist wichtig wenn flags in ISRs genutzt werden