du hast das flag RXCIE nicht aktiviert, so dass dein interrupt nicht angesteuert wird

ausserdem was soll bitte die schleife mit dem USART_Receive ? du solltest das byte, wenn du schon ISRs verwendest, auch in der ISR verarbeiten (in einen puffer schreiben, eine puffervariable oder whatever) diese USART_Receive methode blockiert dein programm solange, wie kein byte empfangen wurde

ausserdem provozierrst du hier ein deadlock, obwohl cih mir nicht sicher bin wie die ISR mit dem flag umgeht!

in der regel löscht ein interrupt das flag, durch welches er ausgelöst wurde selber (RXC in dem fall), womit deine methode in der regel NIE ausgeführt wird, jedoch ist noch ein byte im puffer weil es nicht ausgelesen wurde ... trifft jetzt ein byte ein, wird WIEDER die ISR ausgelöst, kommt das bufferoverflow bit weil noch ein bytre im puffer ist ... und dein hauptprogramm steht sich weiterhin die beine in den bauch ...
ausseerdem hast du dir schon einen fehler eingehandelt der unbehandelt bleibt

wenn du schon mit ISRs arbeites, solltest du tunlichst vermeiden im hauptprogramm an den flags herumzuobern die für die ISRs zuständig sind, das kann ganz fies ins auge gehen