SoloCodigo
Programación Específica => Microcontroladores => Programación en C => Mensaje iniciado por: Nash7 en Miércoles 7 de Septiembre de 2005, 20:01
-
A ver, estoy intentado hacer unos calculos con el Timer 1 de form que necesito saber el tiempo que ha pasado entre cada interrupción. El problema es que:
1) No estoy haciendo bien la mascara y borro el byte más significativo
2) A pesar de poner T1 como integer16, está haciendo la multiplicación como si fuera un solo byte
El caso es que cuando F1 = 9, en vez de darme 1566(61E) me da 30 (1E).
Aqui os mando la función que utilizó a ver que os parece:
unsigned int16 calculos(int F1, unsigned int16 T) //F1 = nº de overflows
{ //T valor del Timer1 actual
unsigned int16 T1=0, Tt = 0, j=0;
unsigned int32 T2;
T1 = (F1 * 174); //174ms overflow del Timer1 con un reloj de 12MHz
T2 = (T * 8);
T2 = (T2 / 3); //Paso a us el tiempo del timer
j = T2 * 0.001; //trunco la suma quedándome con ms
a1 = T1&0x00ff;
T1>>=8; //máscara para presentar los datos en el winzip800
a2 = T1&0x00ff;
cont++;
write_eeprom(cont,F1);
cont++;
write_eeprom(cont,a2);
cont++;
write_eeprom(cont,a1);
Tt = T1 + j; //Sumo los tiempos parciales
return (Tt);
}
AYUDA!!!!!!!
¿Que pasa, que hago?como lo soluciono?, porque me multiplica en un solo byte?GRRRRRRRRRRRRR!!!!!!! :angry:
-
Nash7:
No conosco mucho el Ccs, pero una vez tuve un problema similar con un compilador en C para microcontroladores, por lo que he podido ver en el código que posteaste T1 es del tipo int16, por el contrario F1 es del tipo int y lo multiplicas por una constante que no tiene un tipo definido y es asumido por el programa como un int. La multiplicacion de estos (F1*174) se guarda tambien en un int, pero el valor de solución es mayor y se produce un desborde, por lo cual te quedas con los 8 bits menos significativos de la solución que luego son transferidos a la variable T1.
Lo mas recomendable es que los valores que vas a multiplicar sean del tipo int16. es decir F1 y el valor 174 castealos a int16, con eso no deberías tener mayores problemas
Saludos
NakedSnake