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