Hi,

Prinzip ist ganz einfach:
im Interrupt vom Timer ist die erste Handlung ein Pin, an dem ein Servo angeschlossen ist ausschalten, den Zähler erhöhen und den nächsten Pin einschalten, Timer mit Vorgabe laden und fertig.
Wenn Zeit für den Pin abgelaufen, dann wird die ISR wieder aufgerufen, der Pin abgeschaltet und der nächste Pin eingeschaltet. und so weiter...
Das, was die Sache nur etwas kompliziert macht ist, daß man pro Port ja maximal 8 Pins ansprechen kann und dann eben auf nächsten Port wechseln muß - aber es sollte so funktionieren - jedenfalls hat mir Bascom keinen Fehler beim Compilieren angezeigt.

Übrigens: Wenn du einen RC-Empfänger mit dem Oszi an den Servopins misst - die machen das genauso.....

Wichtig ist nur, daß man die Zeiten für die Impulslänge genau einhält und die Pausen nicht zu lang aber auch nicht zu kurz hat.
Normal sind glaub ich von Impulszeit = 1...2ms und Gesamte Periodendauer 20ms - Periodendauer kann aber auch auf 10ms gesenkt werden (dann sind die Servos schneller) oder auch verlängert werden - in diesem Code ist die Periodendauer davon abhängig, wie lang die Impulszeiten der 18 Servos sind - minimal 18ms und maximal 36ms wird sich aber irgendwo dazwischen einpendeln...

Wenn man noch einen oder 2 weitere 16 Bit Timer frei hätte, könnte man da natürlich auch Parrallel arbeiten lassen - wobei man dann auch verdammt aufs Timing achten müsste, damit sich nichts verknotet, wenn 2 Timer gleichzeitig ihren Interrupt aufrufen wollen...