Está en la página 1de 2

#include <16f876.

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, 1);

// seleccionamos PWM para los dos mdulos CCP setup_ccp1 (CCP_PWM); setup_ccp2 (CCP_PWM);

// cargamos el duty cicle para cada PWM. La frecuencia es igual para ambas, 2 0KHz. // Para calcular el tiempo en nivel alto, dado que usamos un LONG, sera: // Valor*T2_DIV*(1/frecuencia del cristal). Si se usa un valor tipo INT en lu gar // de LONG se calculara multiplicando la frmula por 4: Valor*T2_DIV*(1/frecuenc ia 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 e l T=50us,

// que es lo que se ha puesto para el duty, osea, todo. // Por tanto la seal ser continua a 5v. Duty cicle 100% set_pwm1_duty(duty_PWM1); set_pwm2_duty(duty_PWM2);

while(1){ } }

//bucle infinito.