Da muss ich mehr oder weniger passen, benutze nur Atmels und programmiere in C....

Keine ahnung obs beim PIC auch so geht, aber beim Atmel muss man nur Timer richtig Parametrieren und hat seine fertige PWM am Ausgangspin.
Ansonsten brauchst du ne Software-PWM, vom Ablaufschema in etwa so:

Einen Timer brauchst du auf jeden fall, damit in einem immer gleichen Takt ein Interrupt generiert wird.
2 Variablen, ich nenn sie mal counter und PWM.
Die Interruptroutine enthält:


counter < PWM ? wenn ja PWMpin = 1
wenn nicht PWMpin = 0
counter um 1 inkrementieren
wenn counter = 200 dann counter = 0


Den Vorteiler des Timers so wählen das er zum zählen von 0 bis counter (in meinem beispiel 200, das ist dann auch die Auflösung der PWM) 20 ms benötigt.
variable PWM entspricht der ON-Time, für die 0,5ms wären das (wenn ich mich nicht verrechnet habe) PWM=5 etc.

Die richtige mischung aus Timer Prescaler und counter maximum kann man sich rausrechnen. Mit mehreren PWM-Variablen und deren abfrage in der Interruptroutine kannst du auch mehrere Signale an verschiedenen Pins ausgeben.
ABER:
Software PWM ist sehr rechenintensiv, je nach Geschwindigkeit deines uC wird dein signal früher oder später zittrig und ungenau, jenachdem was du ihn noch alles machen lassen willst.

Hoffe ich konnte helfen