В микроконтроллерах PIC скорость обмена данными через приемопередатчик USART задается восьмиразрядным счетчиком во взаимодействии с регистром SPBRG. Когда содержимое счетчика и регистра SPBRG совпадает, счетчик сбрасывается в нуль. На значение скорости передачи через USART также влияет состояние разряда BRGH регистра управления TXSTA (рис. 1.32). Этот разряд определяет, какая требуется скорость для передачи данных: высокая (BRGH = 1) или низкая (BRGH = 0).
Значение для записи в регистр SPBRG вычисляется по следующей формуле:
Например, для того чтобы получить скорость передачи 9600 бод при микроконтроллере с рабочей частотой FOSC = 10 МГц в регистр SPBRG должно быть записано значение (10 * 106 * 4)/(64 * 9600) – 1 = 64,1 (округляем до 64).
Управление приемопередатчиком USART осуществляется с помощью регистров TXSTA, который используется для управления процессом передачи (рис. 7.4), и RCSTA, который используется для управления процессом приема (рис. 7.5).
CSRC
TX9
TXEN
SYNC
–
BRGH
TRMT
TX9D
Рис. 7.4. Регистр TXSTA микроконтроллеров PIC
В отличие от приемопередатчика UART микроконтроллеров AVR, устройство USART может обмениваться данными не только в асинхронном, но и в синхронном режиме. В этом случае поразрядный сдвиг данных из сдвигового регистра в линию передачи (или наоборот) осуществляется по синхроимпульсам самого приемопередатчика USART или внешнего устройства. Выбор режима работы USART осуществляется с помощью разряда SYNC регистра TXSTA (1 – синхронный режим; 0 – асинхронный режим), а выбор источника тактовых импульсов в синхронном режиме – с помощью разряда CSRC (1 – внутренний источник; 0 – внешний источник).
Назначение остальных разрядов регистра TXSTA:
· TX9D – девятый бит передаваемых данных, если ТХ9 = 1;
· TRMT – флаг, сигнализирующий о завершении передачи байта;
· TXEN – флаг разрешения передачи данных;
· ТХ9 – разрешение (лог. 1) передачи данных в девятиразрядном формате.
SREN
RX9
SREN
CREN
ADDEN
FERR
OERR
RX9D
Рис. 7.5. Регистр RCSTA микроконтроллеров PIC
Назначение разрядов регистра RCSTA:
· RX9D – девятый бит принимаемых данных, если RX9 = 1;
· OERR – флаг, указывающий на переполнение буфера приема;
· FERR – флаг, указывающий на обнаружение ошибки в формате принимаемых данных;
· ADDEN – разрешение обнаружения адреса в асинхронном режиме передачи девяти бит данных– в некоторых микроконтроллерах PIC приемник USART может использоваться для приема сразу двух байтов в формате "данные:адрес", где адрес предназначен для идентификации устройства, связанного с шиной данных (в таком случае подпрограмма обработки прерывания вначале проверит адрес запрошенного устройства и только потом обработает байт данных);
· CREN – разрешение режима непрерывного приема;
· SREN – флаг разрешения однократного приема в синхронном режиме (после приема данных автоматически сбрасывается в лог. 0);
· RX9 – флаг разрешения приема девяти бит данных;
· SREN – флаг активизации USART (для передачи битов данных используется вывод 6 порта С, а для приема – вывод 7 того же порта).
Флаги запросов (TXIF и RCIF) и разрешения (TXIE и RCIE) прерываний от USART находятся в регистрах PIR и PIE.