Ich habe den Code auf 3 Servos erweitert:

Code:
#include "asuro.h" 

unsigned char i, j, k, servo_stellzeit; 

void servo1(unsigned char winkel)
{ 
unsigned int count=0; 
do{ 
   count++; 
   if (ON)  { 
      DDRB |= (1 << PB0); 
      PORTB |= (1 << PB0); 
   } 
   Sleep(winkel); 
   if (!OFF) PORTB &= ~(1 << PB0); 
   Sleep(255); Sleep(255); Sleep(255); 
}while (count<servo_stellzeit); 
} 

void servo2(unsigned char winkel)
{ 
unsigned int count=0; 
do{ 
   count++; 
   if (ON)  { 
      DDRB |= (1 << PB1); 
      PORTB |= (1 << PB1); 
   } 
   Sleep(winkel); 
   if (!OFF) PORTB &= ~(1 << PB1); 
   Sleep(255); Sleep(255); Sleep(255); 
}while (count<servo_stellzeit); 
} 

void servo3(unsigned char winkel)
{ 
unsigned int count=0; 
do{ 
   count++; 
   if (ON)  { 
      DDRB |= (1 << PB2); 
      PORTB |= (1 << PB2); 
   } 
   Sleep(winkel); 
   if (!OFF) PORTB &= ~(1 << PB2); 
   Sleep(255); Sleep(255); Sleep(255); 
}while (count<servo_stellzeit); 
} 

int main(void) { 

Init(); 
do{ 
servo_stellzeit=35; 
servo1(51); 
servo2(51);
servo3(51);
servo1(90);
servo2(90);
servo3(90); 
servo1(51);
servo2(51);
servo3(51); 
servo1(15);
servo2(15);
servo3(15);
servo_stellzeit=2; 
for (i=15; i<88; i+=2) servo1(i); 
for (j=15; j<88; j+=2) servo2(j);
for (k=15; k<88; k+=2) servo3(k);
for (i=90; i>17; i-=2) servo1(i); 
for (j=90; j>17; j-=2) servo2(j);
for (k=90; k>17; k-=2) servo3(k);
}while (1); 
return 0; 
}
Nun arbeiten alle 3 Servos brav nacheinander ihre Drehpostitionen ab. Einen Weg dass z.B. 2 Servos nahezu gleichzeitig drehen habe ich noch keinen gefunden.