#include <16f877.h>
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, WRT
#use delay(clock=4000000)
void main(void){
long duty_PWM1, duty_PWM2;
// Para cristal de 4 mhz, frecuencia de 20 khz ,
// T2DIV set to 1
// Para calcular la frecuencia:
// (4/frecuencia cristal)*T2_DIV*(periodo+1)
// (4/4000000)*1*(49+1)=0.00005seg
setup_timer_2(T2_DIV_BY_1, 49, 3);
// seleccionamos PWM para los dos módulos CCP
setup_ccp1 (CCP_PWM);
setup_ccp2 (CCP_PWM);
// cargamos el duty cicle para cada PWM. La frecuencia es igual para ambas, 20KHz.
// Para calcular el tiempo en nivel alto, dado que usamos un LONG, sería:
// Valor*T2_DIV*(1/frecuencia del cristal). Si se usa un valor tipo INT en lugar
// de LONG se calcularía multiplicando la fórmula por 4: Valor*T2_DIV*(1/frecuencia del cristal)*4
duty_PWM1 = 100; // 0.000025seg/(1*(1/4000000))=100, que es el valor a cargar. Duty 50%
duty_PWM2 = 200; // 0.000050seg/(1*(1/4000000))=200. Si te fijas, con 20KHZ el T=50us,
// que es lo que se ha puesto para el duty, osea, todo.
// Por tanto la señal será continua a 5v. Duty cicle 100%
set_pwm1_duty(duty_PWM1);
set_pwm2_duty(duty_PWM2);
while(1){ //bucle infinito.
}
}