../interrupts.c:16: warning: statement with no effect

das inkrementierender variable b , bzw. die variable b in dem kontext hat keine wirkung , nimm sie einfach raus

../interrupts.c:42: warning: return type defaults to `int'
../interrupts.c: In function `ISR':
../interrupts.c:45: warning: control reaches end of non-void function

das bedeutet, dass er deine ISR als eine
int ISR(...) Methode auffasst, du hast also irgendwas vergessen oder falsch gemacht

allgemein würde ich DRINGEND dazu raten ISRs und methoden allgemein VOR der main zu schreiben, das hier ist kein c++ und du hast auch keine prozedurprototypen deklariert, vermutlich rührt daher der fehler

prozedurales C mit nachgestellten methoden erfordert immer eine dekalration von prozedurprototypen und da ich ehrlich gesagt nicht unbedingt weis wie die interrupts nach den präprozessor aussehen würd ich sie immer über der main schreiben

PS ein alter hut ich weis, aber sie zu dass deine codes NIE warnungen produzieren jede warnung kann zu undefiniertem verhalten führen und die fehlersuche wird dann sehr mühseelig

PS mein nick heisst Ceos auch wenn er irrtumlich aus dem Wort Ceo entstammt ... altlast aus jüngeren jahren aber der hat sich so eingebrannt