Hallo Hannes,
delay zum Messen des Controllertaktes ist (immer) doof. Funktioniert ja nur dann richtig, wenn kein Interrupt, kein störendes Programm dazwischen funkt. Und genau (exact mit CPU-clock übereinstimmend) ists selten. Besser ist da eine timergesteuerte LED. ALLENfalls löse ich das etwa so:
Code:
main:
// definitionen, deklarationen - insbesondere Ports
 #define SetBit(ADDR,BIT)       ((ADDR) |= (1<<(BIT)))  // Setzt Bit
 #define ClrBit(ADDR,BIT)       ((ADDR) &= ~(1<<(BIT))) // Löscht Bit
 #define ToggleBit(ADDR,BIT)    ((ADDR) ^= (1<<(BIT)))  // Toogelt Bit
// SOFORT danach etas so :
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    for (uint8_t n=0; n<20; n++) // LED PC3 blinken lassen
    {                     // 
      ClrBit(PORTC, PC3); // LED auf PC3 schalten EIN, hell
      waitms(  500);      //
      SetBit(PORTC, PC3); // LED schalten AUS, dunkel
      waitms(  500);      //
    }           // Ende for (uint8_t n=0; n<20; n++)

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   while (1)  {}
Das while (1) {} ist dann nur diese Endlosschleife *gg* in der gemessen werden kann (1 Hz); Abbruch mit RESET oder PWR-off.