@Pr0gm4n: schau dir diese zeile mal genau an:
Code:
volatile uint16_t p=0;
das schluesselwort "volatile" ist wichtig ...
es bedeutet, das der Inhalt der Variable sich durch "aeussere" Einfluesse aendern kann

btw. da eine ISR kein Rueckgabewert hat, wird ueber volatil definierte Variablen der Datenaustausch geregelt

hth
KaY