muchas gracias por los consejos.
hice lo del short por que me parecio muy buena idea:
(short int*)(&spendticks + 1) = TMR1H;
pero no se porque da el error "error: (202) only lvalues can be assigned to or modified"
la rason por la que no he usado:
spendticks = (TMR1H << + TMR1L;
es porque genera demasiado codigo y el problema es que en estas lecturas cada microsegundo es importante:
lo que se me ocurrio es hacer lo siguiente y funciona muy bien porque solo gasta dos lineas de codigo, pero la verdad desde hace dos meses que no me gusta poner lenguaje asembler porque me hace sentir muy nerdo, por eso estaba preguntado como hacerlo de la otra manera.
asm("MOVFF TMR1L, main@spendticks");
asm("MOVFF TMR1H, main@spendticks+1");
saludos y gracias por la ayuda.
ACTUALIZACION:
gracias por el consejo sander, (*((unsigned char*)&spendticks + 1)) funciono bien, la verdad yo nunca estudie y no sabia como poner eso, gracias por orientarme.
gracias a todos por ayudarme a solucionar este problema