Последовательный порт
Последовательный порт предназначен для обмена информацией между микроконтроллером и удаленным по отношению к нему устройству. Обмен данными происходит по двухпроводной линии связи (реально три физических проводника - два сигнальных плюс третий общий). По одной линии происходит передача данных от микроконтроллера к устройству, по второй прием данных от устройства. При этом возможна организация связи со многими устройствами, т.е. организация сети. Для присоединения линии связи используются два вывода порта Р3: Р3.0 – RxD (Receiver Data) линия приема данных и Р3.1 – TxD (Transmitter Data) линия передачи данных - которые и образуют последовательный порт УАПП (Универсальный асинхронный приемопередатчик) МК51 (рис.30). Рис.30. Функционально-структурная схема последовательного порта Буфер УАПП осуществляет связь между 8-разрядной внутренней шиной ШВ и 8-разрядной шиной данных ШД, обеспечивая запись, хранение и коммутацию данных. Буфер передатчика предназначен для приема с внутренней шины ШВ параллельной информации и выдачи ее в виде последовательного потока символов на передатчик последовательного порта. Буфер приемника предназначен для приема данных в виде последовательного потока символов с последовательного порта, преобразования их в параллельный вид, хранения и выдачи в параллельном виде на внутреннюю шину ШВ. Буфер приемника и буфер передатчика при программном доступе имеют одинаковое имя SBUF и адрес 99Н. Если команда использует SBUF как регистр источника, то обращение происходит к буферу приемника. Если команда использует SBUF как регистр назначения, то обращение происходит к буферу передатчика. Приемник/передатчик последовательного порта предназначен для приема последовательного потока символов со входа последовательного порта, выделения данных и выдачи их в буфер приемника, а также для приема последовательных данных с буфера передатчика, преобразования их в последовательный поток символов и выдачи его на выход последовательного порта. Логика управления обеспечивает координацию работы всех элементов структуры последовательного порта. Передача данных через последовательный порт осуществляется в виде посылок - кадров, представляющих собой последовательность бит, определенного формата, в зависимости от режима работы (рис.31, табл. 8). В синхронном режиме правильный, без ошибок, прием переданного байта сопровождается передачей 8 сигналов тактирования параллельно каждому биту по второй линии связи. В асинхронных режимах 1,2,3 передается и принимается только байт данных, поэтому для разделения байтов друг от друга, каждый из них обрамляется своеобразными «скобками» - стартовым (лог.0) и стоповым (лог.1) битами. Передача и прием происходят младшим битом вперед. Последовательный порт МК51 может использоваться либо в виде регистра сдвига для расширения ввода-вывода в синхронном режиме работы (рис.32), либо в качестве универсального асинхронного приемопередатчика (УАПП) с фиксированной или переменной скоростью последовательного обмена и возможностью дуплексного включения. Т.е. через последовательный порт можно принимать и передавать данные одновременно для организации связи с другим микроконтроллером (рис.33). Последовательный порт может принимать очередной байт, даже если уже принятый до этого байт не был прочитан из регистра приемника. Однако, если до окончания приема находящийся в регистре приемника байт не будет прочитан, принятый байт теряeтcя.
Рис.32. Использование последовательного порта в синхронном режиме для организации дополнительного параллельного порта
Рис.33. Использование последовательного порта в асинхронном режиме для организации связи с другим микроконтроллером
Программный доступ к регистрам приемника и передатчика осуществляется обращением к регистру специальных функций SBUF. При записи в SBUF байт загружается в регистр передатчика, а при чтении SBUF байт читается из регистра приемника с адресом 99H, расположенным в области SFR. Вообще, по данному адресу находятся два сдвигающих (параллельно - последовательных) регистра. Один из них – «передатчик» - предназначен для передачи байта данных с внутренней шины данных ШД на линию TxD. Он загружается любой командой, использующей SBUF в качестве регистра назначения. Другой – «приемник» - служит для чтения данных с линии RxD на шину ШД. К нему обращаются любой командой, в которой SBUF является регистром-источником данных. Управление работой последовательного порта осуществляется регистром SCON (Serial Control), расположенным в области SFR по адресу 98H. Кроме того, в управлении скоростью передачи данных участвует бит SMOD регистра PCON [3]. Регистр SCON содержит не только управляющие биты, определяющие режим работы последовательного порта, но и девятый бит принимаемых или передаваемых данных (RB8 и ТВ8) и биты прерывания приемопередатчика (RI и ТI). Функциональное назначение бит регистра управления/статуса последовательного порта SCON приводится в табл. 8. Таблица 8
Продолжение табл. 8
Последовательный порт можно запрограммировать на работу в одном из четырех режимов установкой разрядов SM0, SM1 регистра SCON, как показано в табл. 9. Таблица 9
Во всех режимах передача инициируется любой командой, использующей SBUF в качестве регистра назначения. Прием в режиме 0 осуществляется при условии, что RI = «0» и REN = «1». В режимах 1, 2, 3 прием начинается с приходом старт-бита, если REN = «1». В бите ТВ8 программно устанавливается значение девятого бита данных, который будет передан в режиме 2 или 3. В бите RB8 фиксируется в режимах 2 и 3 девятый принимаемый бит данных. В режиме 1, если SM2 = «0», в бит RB8 заносится стоп-бит. В режиме 0 бит RB8 не используется. Флаг прерывания передатчика ТI устанавливается аппаратно в конце периода передачи восьмого бита данных в режиме 0 и в начале периода передачи стол-бита в режимах 1,2 и 3. Соответствующая подпрограмма обслуживания прерывания должна сбрасывать бит ТI. Флаг прерывания приемника RI устанавливается аппаратно в конце периода приема восьмого бита данных в режиме 0 и в середине периода приема стоп-бита в режимах 1, 2 и 3. Подпрограмма обслуживания прерывания должна сбрасывать бит RI.
Прием и выдача байта данных начинается с младшего разряда и заканчивается старшим разрядом (!). Для разрешения приема необходимо установить «1» в разряде REN регистра управления SCON.
2.3.2.1. Особенности работы последовательного порта в различных режимах
Режим 0. На рис.34 показана временная диаграмма работы последовательного порта в режиме 0. Данные передаются и принимаются через вывод RXD. Через вывод TXD выдаются синхросигналы сдвига.
Рис. 34. Временная диаграмма работы последовательного порта в режиме 0
Передача начинается любой командой, по которой в SBUF поступает байт данных. В момент времени S6P2 устройство управления МК51 по сигналу Запись в буфер записывает байт в сдвигающий регистр передатчика, устанавливает триггер девятого бита и запускает блок управления передачей, который через один машинный цикл вырабатывает разрешающий сигнал Посылка. При этом в момент S6P2 каждого машинного цикла содержимое сдвигающего регистра сдвигается вправо (младшими битами вперед) и поступает на вывод RXD. В освобождающиеся старшие биты сдвигающего регистра передатчика записываются нули. При получении от детектора нуля сигнала Передатчик пуст, блок управления передатчиком снимает сигнал Посылка и устанавливает флаг TI (момент S1P1 десятого машинного цикла после поступления сигнала Запись в буфер). Прием начинается при условии REN = «1» и RI = «0». В момент S6P2 следующего машинного цикла блок управления приемником формирует разрешающий сигнал Прием, по которому на выход TXD передаются синхросигналы сдвига и в сдвигающем регистре приемника начинают формироваться значения бит данных, которые считываются с входа RXD в моменты S5P2 каждого машинного цикла. В момент S1P1 десятого машинного цикла после сигнала Запись в SCON блок управления приемником переписывает содержимое сдвигающего регистра в буфер, снимает разрешающий сигнал Прием и устанавливает флаг RI. Режим 1. На рис. 35 показана временная диаграмма работы последовательного порта при приеме и передаче данных. Рис.35. Временная диаграмма работы последовательного порта в режиме 1 Через вывод TXD УАПП передает, а с вывода RXD принимает 10 бит: старт-бит («0»), 8 бит данных и стоп-бит («1»). При приеме стоп-бит поступает в бит RB8 регистра SCON. Передача инициируется любой командой, в которой получателем байта является регистр SBUF. Генерируемый при этом управляющий сигнал Запись в буфер загружает «1» в девятый бит сдвигающего регистра передатчика, запускает блок управления передачей и в момент времени S1P1 формирует разрешающий сигнал Посылка. По этому сигналу на вывод TXD сначала поступает старт-бит, а затем (по разрешающему сигналу Данные) биты данных. Каждый период передачи бита равен 16 тактам внутреннего счетчика. Прием начинается при обнаружении перехода сигнала на входе RXD из состояния «1» в состояние «0». Для этого под управлением внутреннего счетчика вход RXD опрашивается 16 раз за период представления бита. Как только переход из «1» в «0» на входе RXD обнаружен, в сдвигающий регистр приемника загружается код 1FFH, внутренний счетчик по модулю 16 немедленно сбрасывается и перезапускается для выравнивания его переходов с границами периодов представления принимаемых бит. Таким образом, каждый период представления бита делится на 16 периодов внутреннего счетчика. В состояниях 7, 8 и 9 счетчика в каждом периоде представления бита производится опрос сигнала на входе RXD. Считанное значение принимаемого бита - это то, которое было получено по меньшей мере дважды из трех замеров (мажоритарное голосование по принципу "два из трех"). Если значение, принятое в первом такте, не равно «0», то блок управления приемом вновь возвращается к поиску перехода из «1» в «0». Этот механизм обеспечивает подавление ложных (сбойных) старт-бит. Истинный старт-бит сдвигается в регистре приемника, и продолжается прием остальных бит посылки. Блок управления приемом сформирует сигнал Загрузка буфера, установит RB8 и флаг RI только в том случае, если в последнем такте сдвига выполняются два условия: 1) бит RI = «0»; 2) либо SM2 = «0», либо принятый стоп-бит равен «1». Если одно из этих двух условий не выполняется, то принятая последовательность бит теряется. В это время вне зависимости от того, выполняются указанные условия или нет, блок управления приемом вновь начинает отыскивать переход из «1» в 0 на входе RXD. Режимы 2, 3. Через вывод TXD последовательный порт передает или с вывода RXD принимает 11 бит: старт-бит («0»), 8 бит данных, программируемый девятый бит и стоп-бит («1»). На временной диаграмме на рис. 36 показана работа УАПП при передаче и приеме данных в режимах 2 и 3.
Рис.36. Временная диаграмма работы последовательного порта в режимах 2,3
Как видно, режимы 2 и 3 отличаются от режима 1 только наличием девятого программируемого бита. Вследствие этого несколько изменяются условия окончания цикла приема: блок управления приемником сформирует управляющий сигнал Загрузка буфера, загрузит RB8 и установит флаг RI только в том случае, если в последнем такте сдвига выполняются два условия: 1) бит RI = «0»; 2) либо SM2 = «0», либо значение принятого девятого бита данных равно «1».
2.3.2.2. Установка скорости приема – передачи данных последовательного порта
Скорость приема - передачи, т.е. частота работы УАПП в различных режимах, определяется различными способами. В режиме 0 частота передачи зависит только от резонансной частоты кварцевого резонатора f0 =fCLK/12. За один машинный цикл последовательный порт передает один бит информации. В режимах 1, 2 и 3 скорость приема/передачи зависит от значения управляющего бита SMOD в регистре специальных функций PCON. Если бит SMOD установлен в «1», то скорость передачи вдвое больше, чем при SMOD = «0» В режиме 2 частота передачи определяется выражением f2 = (2MOD/64) × fCLK иными словами, при SMOD = «0» частота передачи равна (1/64) × fCLK, а при SMOD = «1» равна (1/32) × fCLK. В режимах 1 и 3 в формировании частоты передачи кроме управляющего бита SMOD принимает участие таймер 1. При этом частота передачи зависит от частоты переполнения (OVT1) и определяется следующим образом: f1, 3 = (2SMOD/32) × fOVT1. Прерывание от таймера 1 в этом случае должно быть заблокировано. Сам T/C1 может работать и как таймер, и как счетчик событий в любом из трех режимов. Однако наиболее удобно использовать режим таймера с автоперезагрузкой (старшая тетрада TMOD = 0010В). При этом частота передачи определяется выражением f1, 3 = (2SMOD/32) × (fCLK/12)/(256-(TH1)). В табл. 10 приводится описание способов настройки Т/С1 для получения типовых частот передачи данных через УАПП. Таблица 10
Продолжение табл.10
|