ADC_Read lee el ADC, si el ADC es de 10 bits quiere decir que en una variable de 16 bits va a quedar algo asi con justificado a la derecha:
Lectura del ADC: 0000 00bb aaaa aacc
Al hacer >> 2 , simplemente rota los bits 2 espacios a la derecha quedando:
ADC_Read()>>2 : 0000 0000 bbaa aaaa
Observaras que se pierden los 2 ultimos bits. La idea de esto es simplemente tomar los 8 mas significantes. Luego aplica una AND con el valor 0xFF
1010 0000 bbaa aaaa
0000 0000 1111 1111 = 0xFF
---------------------------
0000 0000 bbaa aaaa
A este le cambie algunos bits, como ves por el resultado, la idea es que lo unico que no sea 0 sean ese byte. Esto es por que los demas bits son "indefinidos" los cuales deberian leerse como 0, pero por las dudas se asegura de que si los demas bits estan cambiados no afecte al resultado y quede acotado solo en un byte
Otra consulta aun si estoy en void interrupt puedo usar solo el adc read? O debo poner ese cod en caso de q use un lm 35 por ejemplo.
Eso depende de lo que quieras hacer... El ADC te da 10 bits es decir desde 0 a 1023, Esta operacion hace que ese numero pase a ser de 0 a 255, ¿Te es suficiente con 8 bits? Si es asi entonces mejor con 8, ya que le estas quitando los de menor peso a la lectura del ADC que son los que mas fluctuarian.