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!!!!!!!