So, nachdem ich im Dezember schonmal versucht habe, den Timer in C zu verwendne, habe ich micht heute mal wieder drann gesetzt und es erneut versucht.

Zunächst habe ich ein Einfaches programm in Bascom Basic geschrieben, welchens mithilfe des Timers eine LED blinken lässt.
Funktionierte.

Dann habe ich die binärdatei Disassembliert, und aus dem Code eine einfachses Assemblyprogramm geschrieben, welches ebenfalls LEDs blinken lässt.
Funktioniert.

Da ich nun wusste, welche daten ich in Welche Register packen muss, habe ich das ASM-programm in C übersetzt.
Funktioniert NICHT

mein asm-prog:
Code:
.include "m32def.inc"

ldi r16, LOW(RAMEND)
out SPL, r16
ldi r16, HIGH(RAMEND)
out SPH, r16


; timerinterrupt erstellen
clr r16
out TCCR1A, r16
ldi r16,    3
out TCCR1B, r16
in  r16,    TIMSK
ori r16,    4
out TIMSK,  r16
sei


; Port C als ausgabe deklarieren
ser r16
out DDRC, r16


; r17 ist jetzt der Zähler
clr r17

; endless loop
loop:
  rjmp loop



TIMER1_OVF:
  inc r17 ; wenn 0 (0xFF + 1)
  brne intend
  
  in  r16,   PORTC
  com r16
  out PORTC, r16

  intend:
     reti
Mein C-Prog (welches nicht Funktioniert)
Code:
#include <avr/io.h>
#include <avr/interrupt.h>


// Prototypen
void timer1_init();


int main()
{
 
 DDRC  = 0xFF;//An C liegen die LEDs
 
 // Timer1 initialisieren
 timer1_init();

 // Interrupts aktivieren
 sei();

 while(1);
  
 return 0;
}

void timer1_init()
{
 TCCR1A = 0;
 TCCR1B = 3;
  
 //OCR1A = (unsigned short) ((unsigned long) (16 MHZ) / IRQS_PER_SECOND - 1);
 TIMSK  |= 4;
}


int SIGNAL (TIMER1_OVF)
{
 static uint8_t counter = 0;
 counter++;

 if(!counter) PORTC = ~PORTC;

 return 0;
}
Wo ist der Fehler (im C-Code)??

ps.: Controller: ATmega32 bei 16MHz externem Takt