К программе вопросов нет. Потому что если заменить ее на терминалку, результат тот же. И вообще, эта программа отлажена на железе. Глюк происходит в виртуальной связке.
Виртуальный порт тоже не виноват, поскольку замена на другой работает так же. По всем признакам глючит Proteus.
Я имел ввиду, что разные системы по разному относятся к наличию обработчика ошибок. Например ATmega при возникновении ошибки четности продолжает прием (генерирует биты прерывания и завершения приема байта) более старшие кристаллы (TMS320) при возникновении ошибки встают колом и следующий байт не принимают (не генерирует биты прерывания и завершения приема байта), пока биты ошибки не будут считаны программно. Когда Вы, прерываете симуляцию, то, возможно, взводиться состояние ошибки и, если эту ошибку не обработать (считать кодом обработчика) то дальнейший обмен по последовательному интерфейсу встанет. Так я рассуждал.
P.S. Также возможно, что виртуальный COM в Протеусе предусматривает место, где пользователь должен поместить свой код обработчика ошибок.