Here is my implementation - a multi-channel, synchronized pwm generator using just 1 timer (timer0 in this case).
In this particular case, I implemented four independent pwm channels (PB0, 1, 7 and 6), over a 20ms period.
It can be easily expanded to generate additional channels (or fewer if you want). Very little overhead - the glitches in PB4 are due to when the timer isr is being serviced - 20us in the pro mode and slightly higher in the free mode.
Very handy for low-end pics that lack a hardware pwm module.
Invoking it is easy:
pwm_init(TMR0_PS_2x, 160); //reset the pwm period, roughly 2 * 160 * 256 * 1/4Mhz=20ms
pwm0_setdc(1<<0, 6); //pwm ch0, on pin P0, dc=6/160
pwm1_setdc(1<<1, 7); //pwm ch1, on pin P1, dc=7/160
pwm2_setdc(1<<7, 8); //pwm ch2, on pin P7, dc=8/160
pwm3_setdc(1<<6, 18); //pwm ch3, on pin P6, dc=18/160
After that, everything is done in the background and fully transparent to the user.