Флаг
Все версии модуля USART позволяют работать с 8- или 9-битными данными независимо при передаче и при приеме. Для последнего необходимо сбросить бит RX9 регистра RCSTA (RCSTA[6]). Обычно этот дополнительный бит используется для
Для облегчения работы в подобной сети последние версии модуля US ART можно сконфигурировать таким образом, чтобы при приеме пакета с установленным девятым битом автоматически устанавливался флаг RCIF. Эта функция включается установкой в 1 бита ADDEN (RCSTA[3]). При одновременно установленных битах ADDEN и RX9 любой кадр со сброшенным старшим битом будет игнорироваться, а принимаемые данные не будут загружаться в буфер приемника. Если же старший бит окажется равным 1, то принятый байт будет скопирован из сдвигового регистра приема в буфер приемника с одновременной установкой флага RCIF. Ведомое устройство может прочитать этот адрес из RCREG, при этом флаг RCIF будет сброшен. Если адрес верен, то ведомый может сбросить бит ADDEN и принимать все последующие кадры данных обычным образом. При этом ведомый может продолжать контролировать значение девятого бита в RX9D, прекращая прием при обнаружении кадра с установленным 9-м битом.
Рис. 12.23.
Контроллер скорости обмена SPBRG
Этот узел представляет собой программируемый 8-битный счетчик, на выходе которого имеется отключаемый делитель на 4. Конфигурация данного счетчика может задаваться пользователем для получения частот выборки и сдвига, соответствующих желаемой скорости обмена. Отталкиваясь от значения частоты кварцевого генератора микроконтроллера, получаем:
Скорость обмена = (XTAL x 106)/(64 x (X + 1)) — низкоскоростной режим (BRGH = 0),
Скорость обмена = (XTAL x 106)/(16 х (X + 1) — высокоскоростной режим (BRGH = 1),
где
X = ((XTAL x 106)/64 x (BAUD)) — 1. Так, если при частоте резонатора 20 МГц нам потребуется скорость обмена, равная 9600 бод, то при
В действительности контроллер скорости обмена формирует тактовый сигнал с частотой в 16 раз больше заданной скорости, чтобы модуль мог за время передачи бита сделать три выборки в окрестностях середины битового интервала и принять мажоритарное решение о значении этого бита. Такая схема увеличивает надежность передачи данных в системах с высоким уровнем помех.
Чтобы проиллюстрировать использование модуля USART, перепишем наши подпрограммы GETCHAR и PUTCHAR таким образом, чтобы они использовали аппаратные возможности модуля. Первым делом (в основной программе) мы должны сконфигурировать контроллер скорости обмена, а также регистры управления и состояния приемника и передатчика. Предполагая, что константы XTAL и BAUD уже определены программистом, возложим вычисление числа