No es que no te funcione, es que por ejemplo mientras tu micro esta en un bucle while, no esta haciendo otra cosa.
un ejemplo: Si creas una temporización en tu sistema, solo una, por ejemplo un timer que de una interrupcion cada 1 ms, y en ese timer vas incrementando flag., y en tu bucle while:
while1(1)
{
if(flag1=="tiempo que quieres que se ejecute la funcion1")
{
funcion1();
}
if(flag2=="tiempo que quieres que se ejecute la funcion2")
{
funcion2();
}
}
De esta manera solo ejecutara las funciones si tienen que ejecutarse, si no, pasara a la siguiente.
por ejemplo si la funcion1 incrementa segundos entrara 1 vez cada 1000 veces del timer.
si la funcion2 incrementa minutos entrara 1 vez cada 60000 veces del timer.
así tu micro estará "ejecutando varias tareas" al mismo tiempo y nunca se quedara parado en una función, no tendrás que salir de una función a mano, para ejecutar otra, cada una se ejecuta cuando le toca.
pero no pongas while dentro de las funciones por que si no estarías en las mismas. y no te preocupes por el tiempo el micro es muy muy rápido