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.
Lesezeichen