Volatile это запрет компилятору использовать копию переменной вместо нее самой (оптимизация кода). Надо это тогда, когда есть одновременный доступ к переменной из нескольких процессов, например, в основном цикле с одной стороны и из обработчика прерывания с другой.
(«Телесистемы»: «Конференция «Микроконтроллеры и их применение»»)