Последовательный порт микроконтроллеров MCS-51 является дуплексным и обеспечивает работу в одном синхронном режиме (режим 0) и трех асинхронных режимах (режимы 1, 2, 3). Поддерживается также последовательный обмен в многопроцессорных системах.
При синхронном приеме синхросигнал выдается по линии TxD, а данные принимаются или передаются по линии RxD. При асинхронном обмене блок последовательного порта передает данные по линии TxD, а принимает по линии RxD. Прием и передача могут осуществляться одновременно, поскольку регистр данных SBUF состоит из двух частей. Чтобы передать данные необходимо произвести запись в регистр SBUF, а для приема информации необходимо прочитать содержимое регистра SBUF. Приемник буферизирован, т.е. возможен прием следующего байта, когда предыдущий еще находится в регистре SBUF. Однако, если подпрограмма обслуживания не успела прочесть байт данных из регистра SBUF к моменту завершения приема следующего байта, то этот следующий принятый байт затрет предыдущий. Прием и передача обслуживаются битами прерывания RI и TI, которые формируют общий запрос прерывания. Управляется последовательный порт с помощью регистра SCON.
|
|
SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
SCON
Имя бита | Номер бита | Функция |
SM0 | SCON.7 | Бит 0 определения режима работы последовательного порта |
SM1 | SCON. 6 | Бит 1 определения режима работы последовательного порта |
SM2 | SCON.5 | Разрешение обмена в многопроцессорных системах. В режиме 0 должен быть сброшен. В режиме 1 при SM2 = 1 бит RI не устанавливается, если принятый стоп-бит = 0. В режимах 2 и 3 при SM2 = 1 бит RI не устанавливается, если принятый девятый бит данных RB8=0. |
REN | SCON.4 | Разрешение приема. При REN = 1 прием разрешен |
TB8 | SCON.3 | 9-й бит данных, который будет передаваться в режимах 2 и 3. Значение устанавливается программно разработчиком. |
RB8 | SCON.2 | В режиме 0 не используется. В режиме 1 при SM2=0 в него заносится принятый стоп-бит. В режимах 2 и 3 в него заносится 9-й принятый бит данных |
TI | SCON.1 | Флаг запроса прерывания передатчика. Должен быть сброшен программно. |
RI | SCON.0 | Флаг запроса прерывания приемника. Должен быть сброшен программно. |
Биты SM0 и SM1 следующим образом определяют режимы работы последовательного порта:
SM0 | SM1 | Скорость передачи | Режим работы |
Fosc/12 | Режим 0. Сдвиговый регистр | ||
переменная | Режим 1. Асинхронный приемо-передатчик, 8 бит данных в кадре. | ||
Fosc/64 или Fosc/32 | Режим 2. Асинхронный приемо-передатчик, 9 бит данных в кадре | ||
переменная | Режим 3. Асинхронный приемо-пере-датчик, 9 бит данных в кадре |
Кроме битов регистра SCON последовательный порт управляется также битом SMOD регистра PCON. В основном регистр PCON управляет режимами энергопотребления. Бит SMOD этого регистра управляет опцией удвоения скорости обмена. При SMOD = 1 скорость обмена данными через последовательный порт в режимах 1, 2 и 3 удваивается.
|
|
Синхронный обмен (режим 0)
В этом режиме по линии TxD выдается восемь синхроимпульсов, а по линии RxD принимается или передается байт данных. Передача и прием данных осуществляются начиная с младшего бита, сдвиг происходит в S6P2 каждого машинного цикла (рис. 3.13). Таким образом последовательный обмен производится с фиксированной частотой Fosc/12. Это максимально возможная скорость обмена через последовательный порт микроконтроллера. Передача информации заключается в реализации следующих действий:
• запись в регистр SCON байта управления, очищающего биты SM0, SM1, REN;
• запись байта данных в регистр SBUF.
Передача начинается в следующем (после записи в регистр SBUF) машинном цикле с выдвижения бита D0 на линию RxD в фазе S6P2. В S3P1 следующего цикла на линии TxD появляется «0» первого импульса синхронизации. Выдвижение битов данных продолжается в каждом цикле до девятого включительно, когда на линии RxD появляется старший бит D7. В начале
Рис. 3.13 - Работа последовательного порта в режиме 0
десятого цикла линия RxD переводится в высокоуровневое состояние и устанавливается флаг RI, что свидетельствует об окончании передачи.
Прием информации инициируется записью в регистр SCON байта управления, очищающего биты SM0, SM1, RI и устанавливающего бит REN. Во втором цикле после этой операции записи в фазе S3P1 на линии TxD появляется «0» первого импульса синхронизации, а на фазе S5P2 выполняется ввод младшего бита данных D0 с линии RxD в сдвиговый регистр. Ввод повторяется в последующих циклах и после восьми сдвигов в регистр вводится старший бит D7, устанавливается флаг TI. После этого подпрограмма обслуживания может прочесть байт данных из SBUF.
Асинхронный обмен (режимы 1, 2, 3)
При асинхронном обмене данные передаются по линии TxD, а принимаются но линии RxD.
В режиме 1 кадр данных состоит из 10 бит (рис. 3.14): старт-бит, восемь битов данных, стоп-бит. При приеме в разряд RB8 регистра SCON записывается стоп-бит. Скорость обмена определяется переполнением таймера 1.
В режимах 2 и 3 кадр данных состоит из 11 бит (рис. 3.15): старт-бит, восемь битов данных, программируемый бит, стоп-бит. При приеме подпрограмма обслуживания может прочитать девятый бит из разряда RB8 регистра SCON. При передаче девятый бит записывается в ТВ8 регистра SCON. Пользователь
Рис. 3.14 - Работа последовательного порта в режиме 1
может использовать девятый бит по своему усмотрению (часто это бит контроля). Скорость обмена в режиме 2 равна 1/32 (SMOD = 1) или 1/64 (SMOD = 0) частоты синхросигнала. Скорость передачи в режиме 3 определяется переполнением таймера 1. Передача информации заключается в реализации следующих действий:
• запись в регистр SCON байта управления, определяющего биты SM0, SM1 (выбор режима) и очищающего бит REN. Для режимов 2 и 3 следует записать значение девятого бита данных в ТВ8;
• запись байта данных в регистр SBUF.
Для инициализации приема следует установить бит REN регистра SCON. Прием данных начинается после идентификации перехода «1»-«0» на линии RxD.
Рис. 3.15 - Работа последовательного порта в режимах 2 и 3
При синхронизации последовательного порта от Таймера 1, работающего в режиме автоперезагрузки, скорость обмена определяется по формуле:
где (ТН) - содержимое регистра ТН1 в десятичном представлении.