Hi,
You still don't have the reload thing correct. The way you currently have it you are first reloading the timer with the calculated value (for accuracy) then you reload it again with the default value overwriting the "correct", calculated value. However, since the overhead is much less then I initially thought you might not need this "accuracy thing". And because it might also mess up the interrupt system due the ASM/PBP type interrupt I suggest you remove it and go back to the way you had it intitially. It's also not the cause of the distroted waveform.

Something that's more likely the cause of that is the fact that you load the dutycycle value into the top 8 bits of the dutycycle register when you really should load it to the low 8 bits. CCP1L are the 8 high bits and CCP1CON.5 and CCP1CON.4 are the two least significant bits. You are currently putting the (highest) value 121 into CCP1L which, in reallity, looks as 484 to the PWM module. But with the current PWM frequency the PWM module can't "resolve" to that kind of resolution.

As a test, scale down you'r sinetable so that the highest value is around 200. Then use this in the interrupt:
Code:
Temp = SineVal[StepCount]   'Don't forget to declare Temp as BYTE.
CCP1CON.4 = Temp.0   'Bit 0
CCP1CON.5 = Temp.1   'Bit 1
CCP1L = Temp >> 2     'Bit 2-7
/Henrik.

PS. Please don't quote the previous message all the time. There's no need to have a copy of it right after the original. If you're responding to specific questions or comment in the message quote those line only.