Das Hardware-PWM könnte für EIN Servo funktionieren(steht im Datenblatt, wie man das einstellt(das Intervall sollte irgendwas um 20ms sein, ist aber unkritisch.). Ich nehme an, du weisst, wie ein Servosignal aufgebaut ist?). Wenn du die genauen Werte haben willst, die du in die Register schreiben musst, poste mal deine Taktfrequenz.
Bei der geringen Frequenz kannst du aber(zumal in ASM) auch ohne weiteres eine Software-Version erzeugen(hängt davon ab, was du sonst noch gleichzeitig machen willst.). Damit lassen sich dann auch mehrere Servos stellen(was hast du eigentlich damit vor?).
Ich hab' mal den Code von meinem Software-PWM drangehängt(das Programm kann gleichzeitig noch Servosignale verstehen. Mehr war bei mir nicht nötig, deshalb lässt sich wahrscheinlich noch viel verfeinern.).
Code:
.include "2313def.inc"			;Definitionsdatei laden
.Def RXtemp =r27
.Def S1Pos = r28                        ;Servo1 invertiert an PB0 - Position in 64tel
.Def S2Pos = r29
.equ S1Offset=4                         ;Offset in 256µS
.equ S2Offset=4
.equ CLOCK = 8000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1
.org 0x000
         rjmp start                     
.org 0x00B 
         rjmp onRXD                     ;Interupt für RX

start:	ldi	r16,low(ramend)		;Stackpointer auf
	out	spl,r16			;RAM-Ende setzen
	ldi	r16,0x0f		
	out	ddrb,r16		;PortB.0-3 aus Ausgang setzen
        ldi     r16,0
        out     portb,r16               ;Interne Pullups von PortD abstellen, Ausgänge auf low
        ldi     r16,0b00000010          
        out     TCCR1B,r16              ;Prescaler für Timer1 auf 8 stellen 
        ldi     r16, UBRRVAL            
        out     UBRR, r16               ;Baudrate einstellen
        ldi     r16, 0b10011000         
        out     UCR, r16                ;TX anmachen, RX anmachen, RX-Int anmachen
        ldi     S1Pos,32                ;Startpositionen setzen
        ldi     S2Pos,32
        sei                             ;interupts an

loop:
        ldi r16,0                       ;Timer1 zurücksetzen
        out TCNT1H,r16
        ;ldi r16,0
        out TCNT1L,r16
        LDI r16,0                       
        out portb,r16                   ;Signal an 
anloop:                                 ;Endlosschleife die die Servopulse überwacht und nach ca. 20ms zu loop zurückspringt
        IN r18,TCNT1L
        IN r16,TCNT1H
        
        ;ÜBERPRÜFEN,OB PULS FÜR SERVO1 FERTIG
        SBIC portb,0
        rjmp s1fertig                   ;Wenn der Puls schon aus ist, Überprüfung skippen
        mov r17,s1pos                   
        ANDI r17,0xF0                   ;Low-Nibble von S1pos löschen
        SWAP r17                        ;Und Nibbles tauschen - effektiv durch 16 teilen
        SUBI r17,-S1Offset              ;Offset hinzufügen
        cp  r16,r17                     ;S1pos mit Timer vergleichen, Ausmachen skippen, wenn Timer kleiner
        brlo S1Fertig

        mov r17,s1pos                   ;Sonst mit dem Low-Teil des Timers vergleichen
        ANDI r17,0x0F                   ;H-Nibble von S1pos löschen
        SWAP r17                        ;Und Nibbles tauschen - effektiv mit 16 multiplizieren
        cp r18,r17                       
        brlo S1Fertig                   ;Wenn Timer kleiner, anlassen

        SBI portb,0                     ;Servo1 Puls ausmachen
S1fertig:
        ;ÜBERPRÜFEN,OB PULS FÜR SERVO2 FERTIG
        SBIC portb,1
        rjmp s2fertig                   ;Wenn der Puls schon aus ist, Überprüfung skippen
        mov r17,s2pos                   
        ANDI r17,0xF0                   ;Low-Nibble von S2pos löschen
        SWAP r17                        ;Und Nibbles tauschen - effektiv durch 16 teilen
        SUBI r17,-S2Offset              ;Offset hinzufügen
        cp  r16,r17                     ;S2pos mit Timer vergleichen, Ausmachen skippen, wenn Timer kleiner
        brlo S2Fertig

        mov r17,s2pos                   ;Sonst mit dem Low-Teil des Timers vergleichen
        ANDI r17,0x0F                   ;H-Nibble von S2pos löschen
        SWAP r17                        ;Und Nibbles tauschen - effektiv mit 16 multiplizieren
        cp r18,r17                       
        brlo S2Fertig                   ;Wenn Timer kleiner, anlassen

        SBI portb,1                     ;Servo2 Puls ausmachen
S2fertig:
        cpi r16,80                      ;Nach Ablauf von ca. 20ms neuen Zyklus starten
        brsh loop
        rjmp anloop    

onRXD: 
        IN S1POS,UDR
        IN rxtemp,TCNT1L
        OUT UDR,rxtemp
        reti