Свежие обсуждения
Микроконтроллеры

USART в PIC16

"Непонятки" у меня в следующем. Работаю с USART среднего семейства PICmicro (конкретнее, в данный момент, с PIC16F628A).
В даташите сказано, что флаг ошибки кадра, при асинхронном приёме, FERR, выставляется, в случае отсутствия стопового бита, а сбрасывается, при чтении данных из регистра приёмника RCREG, и даётся рекомендуемая последовательность команд. Согласно ей, необходимо сперва прочитать содержимое служебного регистра RCSTA (в котором содержится этот флаг), а уж затем непосредственно данные из регистра RCREG.
В МПЛАБе (окно Watch) происходит следующее. При срабатывании прерывания от USART (передаю данные без стопового бита), данных в регистре RCREG нет, и флаг FERR сброшен. При чтении данных из RCREG, они нормально считываются в аккумулятор и появляются в RCREG. При этом поднимается и флаг FERR. Как ясно, чревато это тем, что, поскольку состояние флага FERR проверяется до чтения из RCREG, во-первых, программа отработает нормальную приёмку таких данных (без стопового бита), а, во-вторых, после этого блокируется (согласно логике программы) дальнейший приём данных, поскольку флаг FERR поднят, и сбросится только при чтении "успешного" байта из RCREG, которого не произойдёт, поскольку сперва проверяется флаг FERR, и т.д. (см. выше). Круг замкнулся.
Так во вопрос. Это "косяк" МПЛАБа (у меня - в связке с Протеусом), или даташита, и тогда надо менять логику программы?