Depending on everyone skills, PBP PWM command is a really bad way to do an efficient PWM. The best way is to use internal timer interrupts and play with.

As always avoid statements that est precious Usec or Msec like pause, PWM, SOUND etc etc.

Threre's no assembler lines to write, only register to be set and read.l

BUT some can also feel a bit much lazy and read the ADC and send the result in parralell to a PORT. then do a 50 cent D/A converter with resistors and OP-AMP. OR send the results to DAC something like MAX517.

Once they have the voltage reading, send this to a kind of VCO wich will produce the PWM.

Tons of different way... i still stick to the first idea :internal timer OR better change PIC for one who have a built-in PWM module. Better, easier, faster... even cheaper

Look for 12F683 if you don't need many i/o, 16F628 is also good.