Hi inka,
offensichtlich haperts aber gerade daran , weil er nie in die abfragenschleife

Code:
blockierend:
loop_until_bit_is_set(PINC, PC5);

nicht blockierend:
if ( PINC & (1<<PINC5) )
{}
Der if-Befehl blockiert ja so nicht, sondern führt die leere {} nur 1x aus, wenn PC5 high ist.

Wenn man warten muss, bis PC5 high wird:
// PC5 ist LOW!
while ( !(PINC & (1<<PINC5)) ) {nop();} // Warte so lange wie PC5 LOW ist!
// Jetzt ist PC5 HIGH geworden!

Übrigens: (1 << PINC5) ist in der RP6Control.h definiert als IO_PC5.
-> IO_PC5 = 1 << PINC5 = 0b00000001 << 5 = 0b00100000 = 32
Damit reicht: ( PINC & IO_PC5 )