Ves como sí que lo has conseguido, ahora solo te queda solucionar ese pequeño detalle.
Yo lo haría así:
Codigo:
#include <16f876.h>
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, WRT
#use delay(clock=4000000)
#byte port_a=0x05
void main(void)
{
int CCPR1L;
// Para cristal de 4 mhz, frecuencia de 1 khz(T=1000us)
// Preescaler de 16
setup_timer_2(T2_DIV_BY_16, 61, 1);
// PR2=(T/(4·Tosc·TMR2preesc))-1=(1000us/(4·1/4MHz·16))-1=62.5-1=61.5=61
setup_ccp1 (CCP_PWM);
// CCPR1L=Duty/(4·Tosc·TMR2preesc)
// Para un Duty del 100%=1000us: CCPR1L=1000us/(4·1/4Mhz·16)=62.5=62
CCPR1L = 0;
set_pwm1_duty(CCPR1L);
while(1)
{
if(bit_test(port_a,0))
{
if(CCPR1L<60)
{
CCPR1L=CCPR1L+5;
set_pwm1_duty(CCPR1L); // Salida por RC2
while(bit_test(port_a,0));
}
}
if(bit_test(port_a,1))
{
if(CCPR1L>0)
{
CCPR1L=CCPR1L-5;
set_pwm1_duty(CCPR1L); // Salida por RC2
while(bit_test(port_a,1));
}
}
}
}
¡ Si hay alguna metida de pata, házmelo saber !
Un saludo