А чего там думать? Трясти надо! CTS нужно снимать, например, при заполнении буфера на 3/4, а взводить - при освобождении наполовину.
А принять байт по прерыванию и поместить его в буфер - нужно быть готовым всегда.
Рулить потоком на уровне одиночных байтов - странная затея.