Vale ahora te comprendo, o eso creo, primero, como el tu muy bien dices, si tienes una base de tiempos y metes un delay, te has cargado la base de tiempos.
Y por otro lado, ya que tienes creada una base de tiempo, es una buena oportunidad para aprender a ejecutar funciones cuando corresponda.
Piensa una cosa, si tienes una base de tiempos, (y si no la tienes creala) no tienes que ejecutar todas las funciones en la misma secuencia del while(1), si la lectura de temperatura quieres hacer cada 500ms pues no hay problema.
Pon un timer a contar ms por ejemplo y en la interrupción del timer incrementa un contador, y en el bucle while(1) a la función de lectura le pones la condicion :
If(contador>=500)
LeeSensor();
Hay no ningún delay y además no Leerás absurdamente tantas veces la temperatura.
Yo también me explico como el culo
Un saludo