int ope(void)
{
int pulso=0;
if(input(pin_a1)==1)
{
pulso=pulso+1;
return(pulso);
}
}
Cada ves que entre a esa funcion pulso va a ser igual a 0, asi que tu funcion seria equivalente a algo asi, suponiendo que termine la funcion y no exista valor de retorno este devuelva un 0 (por que no tenes un return si falla la condicion del if ) aunque lo mas seguro es que devuelva el valor que tiene el registro W en ese momento, en fin si se cumple lo ideal o que pienso que quisiste hacer quedaria algo asi :
int ope() {
if(input(pin_a1)==1)
{
return(1);
}
return(0);
}Ahora tampoco tendria sentido hacer esto. Por que basicamente te va a dar 1 si pin_a1 es igual a 1, o 0 si el pin esta a 0, y directamente estarias leyendo el valor del pin. Donde quedaria tu funcion ( recibir=pin_a1; ) y para que usar otra variable, quedando :
void timer1(void)
{
if(input(pin_a1))
{
set_pwm1_duty(100);
}
set_timer1(53036);
}Ahora suponiendo que el duty comienza en 0 ( supongo nuevamente por que no lo definiste en tu configuracion inicial) al momento de tocar el boton el registro del duty se cargaria con 100 y quedaria ahi para siempre ( ya que en ningun momento lo pones a 0 u otro valor de nuevo. Es esto lo que querias hacer ?
Pregunto por que no logre entender como querias que funcionara, pero si deberias poder llamar a una funcion dentro del timer, incluso podrias prender un led para que veas que entra a esa funcion, y luego si meterse a programar con PWM.
Si tu idea es detectar el boton, podrias haber utilizado una interrupcion por cambio del portB, o una interrupcion externa donde podes definir los flancos y no solo por nivel. Y no usabas el timer para eso (me refiero a lo de utilizar el timer cada 10ms donde alguien que presione el boton generalmente lo tiene mucho mas tiempo y entraria varias veces). Si quisieras contar pulsos podrias usar el timer para el eso.
Son correctos los valores del PWM? no los comprobe.