Não sou bom em programação, e nunca trabalhei com o 452, mas acho q as orientações podema ajudar, pois entendi que você vai utilizar o C18 como compilador (as orientações foram retiradas do livro do Alberto Noboru)
Vamos por partes:
1 - Habilitar o PWM, função
OpenPWM(período) carrega o valor do argumento para o registro do PR2 do timer. Lembre-se de que o timer tem que ser configurado primeiro.
O período é um valor de 8 bits (0 a 255) e é determinado pela equação:
período_pwm= [(periodo)+1]*4*(valor_prescaler_TMR
2)/Fosc
2 - Setar o DutyCycle, função
SetDCPWMx(duty_cycle) onde no lugar do x deve ser colocado o número do PWM utilizado do uC, neste caso o duty é um valor de 10 bits (0 a 1023) e o tempo do sinal ativo é obtido pela equação:
Tempo_ativo= (duty_cycle*valor_prescaler_TMR2)/Fosc
Exemplo simples:
#include <p18f452.h>
#include <timers.h>
#include <pwm.h>
//Fosc = 10Mhz
#pragma config FOSC= HS
void main (void)
{
unsigned int taxa_pwm = 0; //largura do pulso PWM
TRISx = 0bxxxxxxxx; // escolher o port onde está o módulo PWM e setar devidament suas entradas e saídas
OpenTimer2(TIMER_INT_OFF //desabilita interrupçãp tmr2
&T2_PS_14); //Prescaler igual a 4 (1:4)
OpenPWMx (239); //PRx = 239 período pwm = 348us.
SetDCPWMx (120); // Tsinal alto = 120*4/10M = 48us.
while(1); //Looping infinito
}
Este exemplo foi retirado do livro Microcontroladores PIC18, Aprenda e Programe em Linguagem C, Alberto Noboru Miyadaira, Ed. Érica.