NbTopsFan needs to be declared volatile, since it's modified in an ISR but accessed outside of one, otherwise accesses to it could be optimized away.
Edit: AAH! You're using delay with interrupts globally disabled! Delay relies on the timekeeping interrupt firing in the background to count the time; without it, delay() will hang...
Your code would be more readable if you did ctl+T in the IDE. Putting multiple statements on the same line is bad practice, as it makes it harder to spot mistakes.