So ich hab jetzt mal den code rausgesucht, aber noch nicht editiert.

Das ganze ist die noch nicht ganz so elegante lösung ohne Timer. Das Programm läuft folgender masen ab:

Ausgabe1:
- an Portb werden alle pins high geschaltet.
- es wird 1ms gewartet (kann auch über timer gemacht werden)
- danach werden die servo werte nacheinander abgeglichen und bei gleichheit der entsprechende pin ausgeschaltet (es wird erster Register "A1" geschrieben und dann am ende eines durchlaufes A1 nach portb geschoben)
- wenn das ganze 255mal durchgelaufen ist, springt er aus dem unterprogramm

bei Ausgabe2 ist es das gleiche nur mit einem anderen port.

Code:
;-------------------------------------------------------------------
;UP zur ansteuerung der Servos, wird später durch Interrups ersetzt.
;-------------------------------------------------------------------

Ausgabe1:
		clr X1
		ser A1
		cli
		out Portb,A1
		ldi R30,low(Servo1)
		ldi R31,high(Servo1)
		ldd var1,z+3
		ldd var2,z+4
		ldd var3,z+5
		ldi R30,low(Servo2)
		ldi R31,high(Servo2)
		ldd var4,z+3
		ldd var5,z+4
		ldd var6,z+5
Servoinit:
		ldi B1,250
loop1:	ldi B2,6
loop:	dec B2
		brne loop
		dec B1
		brne loop1

Se1:	
		cp X1,var1
		brne wait1
		subi A1,0b00000001
		nop
		rjmp Se2
wait1:	
		nop
		nop
		nop
Se2:	
		cp X1,var2
		brne wait2
		subi A1,0b00000010
		nop
		rjmp se3
wait2:		
		nop
		nop
		nop				
Se3:	
		cp X1,var3
		brne wait3
		subi A1,0b00000100
		nop
		rjmp se4
wait3:
		nop
		nop
		nop

Se4:	
		cp X1,var4
		brne wait4
		subi A1,0b00001000
		nop
		rjmp se5
wait4:
		nop
		nop
		nop

Se5:	
		cp X1,var5
		brne wait5
		subi A1,0b00010000
		nop
		rjmp se6
wait5:
		nop
		nop
		nop
Se6:	
		cp X1,var6
		brne wait6
		subi A1,0b00100000
		nop
		rjmp se7
wait6:
		nop
		nop
		nop
Se7:	
		nop
		out portb,A1
		nop
		ser A2
		cp X1,A2
		brne se8
		sei
ret
se8:	
		inc X1
		rjmp Se1

;==================================================

Ausgabe2:
		clr X1
		ser A1
		cli
		out Portd,A1
		ldi R30,low(Servo3)
		ldi R31,high(Servo3)
		ldd var1,z+3
		ldd var2,z+4
		ldd var3,z+5
		ldi R30,low(Servo4)
		ldi R31,high(Servo4)
		ldd var4,z+3
		ldd var5,z+4
		ldd var6,z+5
		rjmp Servoinit2
Servoinit2:
		ldi B1,250
loop12:	ldi B2,6
loop2:	dec B2
		brne loop2
		dec B1
		brne loop12


Se12:	
		cp X1,var1
		brne wait12
		subi A1,0b00000100
		nop
		rjmp Se22
wait12:	
		nop
		nop
		nop
Se22:	
		cp X1,var2
		brne wait22
		subi A1,0b00001000
		nop
		rjmp se32
wait22:		
		nop
		nop
		nop				
Se32:	
		cp X1,var3
		brne wait32
		subi A1,0b00010000
		nop
		rjmp se42
wait32:
		nop
		nop
		nop

Se42:	
		cp X1,var4
		brne wait42
		subi A1,0b00100000
		nop
		rjmp se52
wait42:
		nop
		nop
		nop

Se52:	
		cp X1,var5
		brne wait52
		subi A1,0b01000000
		nop
		rjmp se62
wait52:
		nop
		nop
		nop
Se62:	
		cp X1,var6
		brne wait62
		subi A1,0b10000000
		nop
		rjmp se72
wait62:
		nop
		nop
		nop
Se72:	
		nop
		out portd,A1
		nop
		ser A2
		cp X1,A2
		brne se82
		sei
ret
se82:	
		inc X1
		rjmp Se12
hier noch die variablen:
Code:
.def A1   = R16		;Bearbeitungs Register
.def A2   = R17		;Bearbeitungs Register
.def B1   = R18		;Bearbeitungs Register
.def B2   = R19		;Bearbeitungs Register

.def Heben= R20

.def var1 = R7		;frei zur verfügung stehende Variablen
.def Var2 = R8		;frei zur verfügung stehende Variablen
.def Var3 = R21		;frei zur verfügung stehende Variablen
.def Var4 = R22		;frei zur verfügung stehende Variablen
.def Var5 = R23		;frei zur verfügung stehende Variablen
.def Var6 = R24		;frei zur verfügung stehende Variablen

.DSEG

Servo1: .BYTE 10 ;X,Y,Z,a,ß,y,Werte umdrehen(YY>128,Bein in der Luft,-,-,-,a,ß,y),Abweichung(a,ß,y)

Servo2: .BYTE 10 ;X,Y,Z,a,ß,y,Werte umdrehen(YY>128,Bein in der Luft,-,-,-,a,ß,y),Abweichung(a,ß,y)

Servo3: .BYTE 10 ;X,Y,Z,a,ß,y,Werte umdrehen(YY>128,Bein in der Luft,-,-,-,a,ß,y),Abweichung(a,ß,y)

Servo4:	.BYTE 10 ;X,Y,Z,a,ß,y,Werte umdrehen(YY>128,Bein in der Luft,-,-,-,a,ß,y),Abweichung(a,ß,y)

GlVar:	.byte 5  ;X,Y,Z,a,Globale Flags(Bein in der Luft, )

.CSEG
eine Initialisierung ist nicht notwendig, es müssen nur die ports als ausgänge geschalten werden.

Der code bietet noch viele möglichkeiten zur optimierung, aber ich denke mal, das er dir schonmal ein wenig weiterhelfen wird.

Es werden auch nur jeweils 6 Servos angesteuert, da ich nicht mehr benötigte ist aber auch auf 8 Servos leicht erweiterbar, muss man nur schaun, dass ein durchlauf nicht länger als 1/255ms ist.[/code]