Hi...
Keiner ne idee?? Bin schon die ganze zeit am suchen...

derzeitiger stand
Code:
#include <avr/io.h>
#include <avr/interrupt.h>


#ifdef F_CPU
#undef F_CPU
#endif
#define F_CPU  (1000000*16)
#define MHZ *1000000




// und IRQS_PER_SECOND ein Vielfaches von 100.
// Ausserdem muss gelten F_CPU / IRQS_PER_SECOND <= 65536
#define IRQS_PER_SECOND   1000 
// Anzahl IRQs pro 10 Millisekunden
#define IRQS_PER_10MS     (IRQS_PER_SECOND / 100)




///////////////////////////////////////////////////////////////////////////////////////////////

// Zähler-Variable. Wird in der ISR erniedrigt und in wait_10ms benutzt.
static volatile uint16_t timer;

// Prototypen
void timer1_init();
void wait (const uint16_t);

////////////////////////////////////////////////////////////////////////////////////////////////

void main()
{
 
 DDRC  = 0xFF;//An C liegen die LEDs
 PORTC = 0x02;//LEDs aus
 
 
 // Timer1 initialisieren
 timer1_init();

 // Interrupts aktivieren
 sei();

 while (1)
 {
  
  // LED an
  PORTC |= 0xF0;

  // 1 Sekunde warten
  wait(50000);
  
  // LED aus
  PORTC &= 0x0F;

  // 1 Sekunde warten
  wait(50000);  
 }
  
 return;
}

//-----------------------------------------------------------------------------------------------

void timer1_init()
{
 // Timer1: keine PWM
 TCCR1A = 0;

 TCCR1B = (1 << WGM12) | (1 << CS10);

 OCR1A = (unsigned short) ((unsigned long) (16 MHZ) / IRQS_PER_SECOND - 1);

 TIMSK  |= (1 << OCIE1A);
}

//-----------------------------------------------------------------------------------------------

////////////////////////////////////////////////////////////////////////

void wait(const uint16_t t)
{
 timer = t;
 while (timer);
}


////////////////////////////////////////////////////////////////////////

SIGNAL (SIG_OUTPUT_COMPARE1A)
{
 static uint8_t interrupt_num;
	
 if(++interrupt_num == IRQS_PER_SECOND/100) //eine Zeiteinheit vergangen (10ms/100ms)
 {
  interrupt_num = 0;

  if(timer != 0)timer--;
 }
}
warum funktioniert das nicht??