Irgendwie hab ich ein ungutes Gefühl bei der Kommunikation zwischen deiner APplikation und der UART-ISR...

Während receive_char==1 ist kann eine IRQ auftauchen und du verlierst Zeichen. Vielleicht ist's das?