Zitat Zitat von muetzi
[...] aber so lange die Bedingungen für teiler und tsek nicht erfüllt sind, wird die Funktion nicht verlassen.
Die 250µs werden in der Variable teiler gespeichert, und vervierfacht.

Oder???????
Fast. Verlassen wird die ISR schon, aber das äussere if wird nur jedes 4. mal ausgeführt und das innere if nur 1 mal pro 4000=4*1000 IRQs. Wird vielleicht klarer, wenn du anders einrückst:
Code:
void isr_t0(void) interrupt 1
{ 
	teiler++; 

	if (teiler == 4)	// 4 x 250µsek = 1mS
	{ 
		teiler = 0;

		tsek++;

		if (tsek == 1000)
		{
			tsek = 0; 

			P1 = ~P1;
		} 
	} 
}

Zitat Zitat von muetzi
Der Lehrer hatte erwähnt, dass der Timer so programmiert wird, das er alle 1s ein Interrupt erzeugt und die ISR alle Sek. aufgerufen wird.
Aber das geht ja gar nicht, nicht einmal mit einem 16 Bit Timer.
Da hast du recht. Unter Umständen bekommt man 1 Interrupt pro Sekunde hin, aber das ist abhängig vom µC und dessen Takt.

Mit Verlaub, was der Herr Lehrer da erzähl ist Käse. Jedenfalls bei der Quelle. Tritt ihm nächstens ans Schienbein, wenn er so'n Schotter erzählt.