Может вопрос глупый конечено, и никакой проблемы нет.
Есть вопрос такого плана.
Как правильно получать строку (ответа) от сима.
\r\nMessage\r\n
Я вижу два возможных варианта.
Вариант 1.
1.При первом прерывании от юарта, уходим в него, выключаем прерывания, выставляем флаг пришедьших данных, выходим из прерывания.
2.В основном цикле, если видим флаг читаем строку, и обрабатываем ее (тут получается небольшая проблема, т.к. нужно делать некий автомат состояний и нужно постоянно помнить какое было последнее сообщение). После обработки сообщения включаем прерывания от юарта.
Вариан 2, извращенный

1.При первом прерывании от юарта, получаем символ, записываем в буффер, запускаем таймер на 0.4сек скажем.
2.при следующем прерывании от юарта (до истечения таймера), записываем следующий символ в буффер, перезапускаем таймер.
3.так делаем до тех пор, пока таймер 0,4 сек не истечет или буфер не заполнится.
4.Когда таймер истек, имеем в буффере все сообщение от сима, обрабатываем его.
А как Вы получаете данные с сима?