trochę kolega flapo213 starsznie pokrętnie to wytłumaczył dlatego ja postaram się jeszcze po swojemu
Jeśli deklarujesz zmienną globalną, z której będziesz korzystał zarówno w procedurze obsługi przerwania a także w pozostałych częściach (funkcjach) swojego kodu, to bez słówka volatile będzie to się działo w uproszczeniu w ten sposób, że w ramach optymalizacji dostępu do zmiennej:
1. Przy wejściu w przerwanie jej wartość zostanie umieszczona w jakimś wolnym rejestrze mikrokontrolera i tylko w oparciu o wartość tego rejestru będzie odbywał się dostęp do niej w ramach przerwania
2. Przy wejściu w funkcję gdzie także będziesz używał tej zmiennej, także zostanie ona wczytana do jakiegoś innego rejestru i wszystkie działania w tej funkcji będą opierały się na wartości w tym rejestrze a nie w oparciu o faktyczną wartość zmiennej w pamięci RAM pod adresem gdzie jest zmienna globalna. Tak jest szybciej i wygodniej z punktu widzenia opcji optymalizacji kompilatora i słusznie zresztą.
Zatem i przerwanie i funkcja będą pracować na różnych danych. W twoim przypadku przerwanie będzie napełniać zmienną wartością o której nigdy nie dowie się funkcja main

i odwrotnie tak samo
Dodając słówko volatile, kompilator zaprzestanie takich "sztuczek" optymalizacyjnych w stosunku do dostępu do tejże zmiennej. Wtedy tak samo w przerwaniu jak i w funkcji programu za każdym razem będzie odwoływał się do konkretnej komórki pamięci gdzie leży zmienna. W efekcie, jeśli przerwanie zmieni jej zawartość, to w wyniku podobnego bezpośredniego odwołania się do niej w programie nie będzie ona już ulotna jak przedtem, tylko zostanie odczytana faktyczna wartość, uprzednio zmieniona już np przez przerwanie.
To oczywiście uproszczone tłumaczenie ale mam nadzieję, że wyraźnie pokazuje co i jak. W takich sytuacjach wcale nie trzeba koniecznie wyłączać globalnych przerwań przed dostępem do takiej komórki w programie głównym. Może to być czasem konieczne - ale w specyficznych sytuacjach , nie koniecznie trzeba wyłączać wszystkie naraz przerwania no i to dłuższy temat. Przy takiej obsłudze USART można na pewno sobie darować to wyłączanie przerwań.