Pues la teoria es muy facil y bonita pero en la practica... ni float ni na ya creo q he probado todas las posibilidades
Codigo:
#include <12F675.h>
#use delay(clock=4000000,RESTART_WDT)
#fuses NOWDT,INTRC_IO, CPD, PROTECT, MCLR, NOPUT, NOBROWNOUT
#use rs232(baud=9600,parity=N,xmit=PIN_A2,bits=8)
void main()
{
long int t1,t2;
float n;
setup_counters(RTCC_INTERNAL,RTCC_DIV_32);
disable_interrupts(GLOBAL);
while (TRUE) {
//captura X*************************************************+
if (input(PIN_A5))
{
while (input(PIN_A5)){} // espero que baixi nivell
}
while (!input(PIN_A5)){} // espero que pugi nivell
set_rtcc(0x00); //activo timer
while (input(PIN_A5)){}
t1=get_rtcc();
t1=t1*32;
set_rtcc(0x00); //activo timer
while (!input(PIN_A5)){}
t2=get_rtcc();
t2=t2*32;
t2=t2+t1;
n=t1/t2;
n=n-0.5;
// printf("Valor:%f",n);
delay_ms(1000);
//********************************************************* */
}
}
Os parecerá una tontería, pero para depurarlo yo lo que haría sería sacar todos los pasos por el printf, así:
Codigo:
printf("%u %u %f %f %f",t1,t2,t1/t2,t1/t2-0.5,n);
con lo que salga, ante la duda cogemos la calculadora y no queda más remedio que detectar el problema, aunque muy probablemente sea lo que están comentando los colegas, t1<t2 y encima restas medio punto...
Mira a ver si te vale esto, por lo menos caber, cabe:
Codigo:
#include <12F675.h>
#use delay(clock=4000000,RESTART_WDT)
//#fuses NOWDT,INTRC_IO, CPD, PROTECT, MCLR, NOPUT, NOBROWNOUT
#use rs232(baud=9600,parity=N,xmit=PIN_A2,bits=8)
void main()
{
//long n,t1=33,t2=56;
long n,t1,t2;
char cadena[20];
setup_counters(RTCC_INTERNAL,RTCC_DIV_32);
disable_interrupts(GLOBAL);
while (TRUE)
{
//captura X*************************************************+
if (input(PIN_A5))
{
while (input(PIN_A5)){} // espero que baixi nivell
}
while (!input(PIN_A5)){} // espero que pugi nivell
set_rtcc(0x00); //activo timer
while (input(PIN_A5)){}
t1=get_rtcc();
t1=t1*32;
set_rtcc(0x00); //activo timer
while (!input(PIN_A5)){}
t2=get_rtcc();
t2=t2*32;
t2=t2+t1;
n=(10000*t1)/t2;
printf("n=%lu ",n);
sprintf(cadena,"%lu",n);
printf("n=0.%s",&cadena[0]);
delay_ms(1000);
//********************************************************* */
}
}
Aunque aún me falta una parte del proyecto, he podido realizar la división haciendo Float y después paso a long int para interpretarlo.
Codigo:
t1=t1*32000;
t2=t2*2;
t1=t1/t2;
n=t1;
ahora podré comparar valores con trankilidad