Das ist ja sehr merkwürdig. Worin könnten sich unsere Aufbauten denn unterscheiden... Ich hab den 2313 auf einem Steckbrett mit Leitungen von den Pins zu vier Transistoren (versorgen die LEDs mit Strom, da ich nicht wusste ob mir sonst irgentwann noch der Chip durchbrennt) und als Board das DFRobot USBTinyISP.
Jetzt bin ich noch verwirrter als vorher^^. Aber danke fürs Austesten.
Eigentlich war das sowieso nur eine Art Verständnistest; ums mal gemacht zu haben.
Ich denke mal diese Wartefunktion wird man in der Praxis, also einem etwas "sinnvolleren" Vorhaben sowieso möglichst nicht einsetzen. Inzwischen hab ich die rausgenommen und statt der einen blinkenden jetzt drei LEDs angeschlossen, die im Zeitabstand der Reihe nach leuchten sollen. Dieser Abstand kommt aber nicht mehr durchs Warten zu stande, sondern ist an die Variable, die ich für den OCR0A-Wert hab, gekoppelt. Das funktioniert auch alles so wie ichs mir vorgestellt hab.


Code:
#define F_CPU 1000000UL

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h> 

volatile  uint8_t OCR0Adirection=0, OCR0Avalue=1; 
			 //0->OCR0A raufzählen 1-> OCR0A runterzählen

	ISR(TIMER0_COMPA_vect){

		if(OCR0Adirection==0){
			OCR0Avalue += 1;
			if(OCR0Avalue==254) OCR0Adirection=1;
		}else

		//if(OCR0Adirection==1){ //kann eingespart werden
		{
			OCR0Avalue -= 1;
			if(OCR0Avalue==1) OCR0Adirection=0;
		}
		OCR0A = OCR0Avalue; //nur einmal schreiben, statt zweimal lesen und einmal schreiben
	}

uint8_t CurrentLED=0;

void LEDleuchten(){

	if(OCR0Avalue==1 || OCR0Avalue==64 || OCR0Avalue==128 
					|| OCR0Avalue==192 || OCR0Avalue==254){//wenn timer0 am endpunkt

		switch(CurrentLED){//erst die betroffene LED aus
			case 0: PORTB &= ~(1<<PB4); break;
			case 1: PORTD &= ~(1<<PD5); break; 
			case 2: PORTA &= ~(1<<PA0); 
		}

		CurrentLED++;//dann zur nächsten wechseln
		if(CurrentLED==3)CurrentLED=0;
		
		switch(CurrentLED){//und diese anschalten
			case 0: PORTB |= (1<<PB4); break; 
			case 1: PORTD |= (1<<PD5); break; 
			case 2: PORTA |= (1<<PA0); 
		}	

		while(OCR0Avalue==1 || OCR0Avalue==64 || OCR0Avalue==128 
		   || OCR0Avalue==192 || OCR0Avalue==254){}//weil sonst sofort weitergeschaltet wird		
	}	
}

int main (void)
{
        
               
                TCCR0A = (1 << COM0A1) | (1 << COM0A0) | (1 << WGM00) | (1 << WGM01);
                

                //TCCR0B = (1 << CS01);
                //Prescaler auf CPU/8 -> perfekt^^
				TCCR0B = (1 << CS00) | (1 << CS01);

                OCR0A = 1; //Startwert, pendelt dann zwischen 0..255

                DDRB = (1 << PB2); //pin PB2 auf Ausgang (das ist OC0A)
				
				//blinkende led PB4, PD5, PA0
               	DDRD |= (1 << PD5);
				DDRB |= (1 << PB4);
				DDRA |= (1 << PA0);

				TIMSK = (1 << OCIE0A);
			   	
				sei();

                while(1){

					LEDleuchten();
                       
					
               		

          
                }

}