Hallo zusammen,
habe es nun mit dem Timer0 probiert. So sieht mein Code aus:

Code:
void ServiceTimer0(void)
{
	static byte timer_state = 0;

	if(timer_state == 0)
		{
		OpenTimer0(TIMER_INT_OFF &
							 T0_8BIT &
							 T0_SOURCE_INT &
							 T0_PS_1_1);
		timer_state++;
		}

	else if(timer_state == 1)
		{
  	if((unsigned char) ReadTimer0() > 25)
			{
			mTaktausgang = 1;
			WriteTimer0(0);
			timer_state++;		
			}
	}

	else if(timer_state == 2)
		{
  	if((unsigned char) ReadTimer0() > 25)
			{
			mTaktausgang = 0;
			WriteTimer0(0);
			timer_state--;		
			}
	}	
}
Mein Timer0 ist getaktet mit Fosc=20Mhz /5 prescaler = 1 =>5Mhz. Also alle 200ns erhöt sich mein Wert im Timer0 Reg. Wenn ich nun z.B. 100kHz erzeugen möchte: halbe Taktdauer sind 5us, also 5us/200ns => 25. Ist somit der Wert 25 im Timer0 Reg erreicht, wird mein Taktazsgang entsprechend gesetzt. Eigendlich müsste if((unsigned char) ReadTimer0() = 25) stehen, aber das ist sehr zeitkritisch, deshalb erst mal > 25. Aber das ganze funktioniert nicht. Egal wie ich meinen Wert (25) setze habe immer einen Takt von 25kHz am Pin anliegen. Was ist daran falsch?

lg,
blitzgeist