Hallo!

Ich versuche mit einem Mega32 mit 16MHz ein Servo anzusteuern.
Das erzeugendes Steuersignals mithilfe des Timer0 funktioniert bereits, aber wenn ich den Wert der ausschlaggebend für die Position des Servos ist in der Hauptschleife ändern möchte reagiert der uC nicht darauf. Ich kann mir das ganze nicht so ganz erklären.

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

#ifndef F_CPU
/* Definiere F_CPU, wenn F_CPU nicht bereits vorher definiert 
   (z.B. durch Übergabe als Parameter zum Compiler innerhalb 
   des Makefiles). Zusätzlich Ausgabe einer Warnung, die auf die
   "nachträgliche" Definition hinweist */
#warning "F_CPU war noch nicht definiert, wird nun mit 1000000 definiert"
#define F_CPU 16000000UL     /* Quarz mit 1,000000 Mhz */
#endif
#include <util/delay.h>     /* in älteren avr-libc Versionen <avr/delay.h> */ 

void delay_ms(uint16_t ms) {
    for(; ms>0; ms--) _delay_ms(1);
}



//Timer Variable deklarieren
uint16_t t = 0;
//Servopositionsvariablen
uint16_t servo1; // zwichen 900 - 2100 


/*
Servos & Timer initialisieren
*/
void servo_init()
{
	//Die Steuersignale der Servos liegen an Port D an!
	//Port D als Ausgang definieren
	DDRD = 0xff;

	//Timer initialisieren
	TCCR0 = (1<<CS00);
	TCNT0 = 96;
	TIMSK|=(1<<TOIE0);
	//Intrerrupts einschalten
	sei();
}

//ISR beim überlauf des Timers T0
ISR(TIMER0_OVF_vect){
	TCNT0 = 96;	
	
	t = t+10;
	if(t==20000){
		t = 0;
		//Servo-steuer-impuls einschalten
		PORTD = 0x01;
	}

	//Routine zum abschalten der Servo-steuer-impulse
	if(t>servo1){
		//Servo-steuer-impuls ausschalten
		PORTD = 0x00;
	}
	

}
 
int main( void )
{ 
	
	servo1 = 900;
	
	servo_init();
	sei();
	DDRC = 0x00;
	PORTC = 0xff;
	
	delay_ms(1000);
	servo1 = servo1 + 1200;

 

	while( 1 ) { 
		servo1 = 900 + PINC;
        }
	
    return 0; // Wird von int main()  verlangt
}
Das Problem liegt in diesem Codeabschnitt

Code:
	while( 1 ) { 
		servo1 = 900 + PINC;
        }
Ich hoffe ihr könnt mir bei der Fehlerbehebung helfen.

Gruß Christoph