das würde so hinhauen, entspricht aber nicht dem was du geschrieben hast. bei dir ist immer 50% / 50%, egal wie du rate wählst.

ich hab meine softwarepwm so geschrieben gehabt:
Code:
Pwmroutine: 
  If Pwmverhaeltnis > Pwmwert Then 
    Portc.5 = 1 
  Else 
    Portc.5 = 0 
  End If 
  Incr Pwmwert 
  If Pwmwert > 255 Then Pwmwert = 0 
Return
die Pwmroutine entspricht dem Aufruf durch den Timer.
Das PWM-Verhältnis ist eine zahl zwischen 0 und 256.
pwmwert ist eine zahl die in der routine immer von 0 bis 255 steigt und dann wieder 0 ist.
ist das pwmverhältnis jetzt 100 dann wird bei 100 aufrufen der ausgang 1 und bei den restlichen 0. durch die zahl änderst du dann das verhältnis, 0 ist immer aus, 256 ist immer an und halt die stufen dazwischen.
wenn du mehr als 255 stufen brauchst musst du nur den wertebereich anpassen.

gruss Christian