Это я указал сугубо для кода того корневого поста - у автора было типа if (noerror) {serval=getch()}, поэтому нечтение буфера приводило к несбрасыванию флагов и сохранению их к следующему приему. А сбрасывать UCSRA я порекомендовал, не вдаваясь в подробности - этого было достаточно для небуферизованных AVR, но для буферизованных действительно следует читать UCSRA до чтения данных