Me olvidaba, valorInst y variable, deben ser sin signo.
El algún momento, al realizar la resta en los if:
getTimer() - valorInst
Pueda que getTimer retorne un valor menor que valorInst, en algunos compiladores dará un resultado negativo a pesar que son variables sin signo, en otros no habrá problema.
Puedes hace una prueba restando dos variables del mismo tipo y sin signo para determinar si existe ese problema.
Si es así, necesitas obtener el valor absoluto de esa resta, puedes recurrir a una función propia de tu compilador, o crear la tuta, algo así puede ser:
uint16_t abs_diff(uint16_t a, uint16_t b)
{
return (a > b) ? (a - b) : (b - a);
}
Entonces tu retardo asincrónico quedará así:
if (abs_diff(getTimer(),valorInst) > 5000)
{
state = 0;
return; // para que no ejecute el código de abajo
}