Te la despiezo por partes. Primero mírate este enlace sobre el registro TIFR: http://web.ics.purdue.edu/~jricha14/Timer_Stuff/TIFR.htm
- Rotación de bits para seleccionar un bit concreto:
1 << TOV0
(donde TOV0 es 0, una constante definida en un .h) significa que tomas 1 y lo rotas a la izquierda 0.
Esta operación se utiliza típicamente para seleccionar un bit de un registro (enmascararlo despues de leerlo, o para escribir).
-
Lectura de registro:
TIFR lee el registro de flag de interrupción de los temporizadores.
-
Enmascaramiento:
Al hacer
TIFR & ( 1 << TOV0)
estamos seleccionando el bit mas bajo de TIFR, que si miras el enlace anterior dice: “The bit TOV0 is set (one) when an overflow occurs in Timer/Counter0” Ese bit se pondrá a 1 cuando el timer/counter 0 de overflow.
- Inversión:
! ( TIFR & (1 << TOV0))
eso invierte el resultado de lo anterior, básicamente, es “no hay overflow en timer/counter 0”
- While, es un bucle, que se mantendrá durante la condición que tenemos en (4), while suele tener instrucciones después, se pueden dejar en blanco.
Lo puedes usar de las siguientes formas
a.
while(condición);
b.
while(condición) ejecuta_esta_funcion();
c.
while(condición) {
ejecuta_esta_funcion();
haz_esta_otra_cosa();
b++;
}
Un cordial saludo, y a divertirse 