Проблемы с USART?
Предполагаю, что результат функции USART_reciv() нужно сохранить в переменную и только потом сравнивать с заданными значениями.
Скорее всего причина в том, что нужно проверять значение принятого байта, а не принимать новый байт каждый раз:char ch = USART_reciv();
if (ch == '1') {
   ...
}
else if (ch == '2') {
   ...
}
else if (ch == '3') {
   ...
}