Всем - добрый день, тут такое дело.
Решил проверить в Proteus, как обрабатываются ошибки USART в программе, и, если по OERR (переполнение) вопросов нет, то с FERR (ошибка кадра) возникли проблемы.
В прилагаемом проекте байт с одного терминала принимается контроллером и передается на другой терминал. Все хорошо, пока не возникнет ошибка FERR. Для ее создания достаточно закоротить ненадолго вход приемника RX на корпус. Устанавливается флаг FERR, и это правильно, НО:
1. Сначала устанавливается флаг RCIF, т.е. принят нормальный байт (0х00), и только затем, при чтении регистра RCREG, устанавливается флаг ошибки кадра. А должно быть как-то не так.
2. Сбросить флаг FERR программно не удается! Не помогает ни чтение регистра RCREG, ни выключение передатчика, ни выключение всего USART. Причем, как при замкнутом, так и при разомкнутом входе RX!
3. И только очередной нормальный байт с терминала сбрасывает этот флаг, хотя сам при этом не принимается (RCIF не устанавливается).
Вот я и думаю - это глюк Proteus или я чего-то не понимаю?
Прикрепленный файл:
3633229.rar