Das kannst du recht gut mit Interrupt machen.
http://eng-serve.com/pic/pic_timer.html Damit rechne ich mir immer die Register für die Timer aus. Bei 32Mhz würde Timer 1 mit 1:4 Vorteiler und 25547 Preload ganz gut funktionieren. Kommt auf 50.01Hz, das ist dem Servo aber egal.

Wenn ich nur einen Servo anschließe und die Timer nicht anderweitig brauche, mache ich das immer etwa so (Pseudo-Code, da ich anderen Compiler verwende)

setup_timer1(1:4);
int16 ServoValue=1500 //In ms 1500=Mitte

#int_timer1_isr // interrupt routine
void timer1(void)
{
set_timer1_preload(25547);
set_port(PIN_A0);
delay_microseconds(ServoValue);
clear_port(PIN_A0);
}

Natürlich ist das nicht die Beste Lösung, aber so hat es bei mir auch immer sehr gut funktioniert.

lg