Duda sobre lenguaje c para atmel


#1
while ( ! ( TIFR & 1 << TOV0 ) )   

hol muy buenas estoy iniciando en el lenguaje c para atmel , y tengo dudas aun no puedo leer muy bien los ejemplos como el que adjunto , si alguien me podría explicar seria de mucha ayuda que es especifico hace esa linea de código


#2

Te la despiezo por partes. Primero mírate este enlace sobre el registro TIFR: http://web.ics.purdue.edu/~jricha14/Timer_Stuff/TIFR.htm

  1. 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).

  1. Lectura de registro:
    TIFR lee el registro de flag de interrupción de los temporizadores.

  2. 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.

  1. Inversión:
 ! ( TIFR & (1 << TOV0))

eso invierte el resultado de lo anterior, básicamente, es “no hay overflow en timer/counter 0”

  1. 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 :smiley: