You could generate pwm using the following psedocode
#define high_period
#define low_period
main()
{
!!Code to initiate the timer;
!!Timer counter register value = high_period;
!!set port pin high
!!start timer
while(1);
}
interrupt void time_interrupt_routine(void)
{
if(port pin is high)
!!Timer counter register value = low_period;
else
!!Timer counter register value = high_period;
!!Toggle port pin
!! start timer;
}
Here high_period + low_period gives the time period in terms of clock cycle and
high_period/(high_period + low_period) *100 gives the dutycycle.