Последовательный порт микроконтроллера 8051
Через универсальный последовательный порт осуществляются прием и передача информации, представленной в
последовательном коде (младшими битами вперед). Наличие буферного регистра приемника
позволяет совмещать операцию чтения ранее принятого байта с приемом очередного. Но если к моменту окончания
приема байта предыдущий не был считан из SBUF, то он будет потерян. Работой последовательного порта управляют три
регистра:
Последовательный порт может работать в четырех различных режимах.
-
Режим 0. Синхронный режим
. Информация передается, и принимается через вывод входа приемника RxD. Принимаются или передается 8
бит данных. Через вывод TxD выдаются импульсы синхронизации, которые сопровождают каждый бит. Скорость передачи
фиксирована и составляет 1/12 Fген.
-
Режим 1. Асинхронный 8-ми битовый режим
. Передаются (через TXD) или принимаются (через RXD) 10 бит: старт-бит (логический 0), 8 бит данных (младшим
разрядом вперед) и стоп-бит (логическая 1). При приеме, стоп-бит поступает в бит RB8 регистра SCON. Скорость передачи в
режиме 1 переменная: для управления скоростью передачи вы можете использовать таймер Т1 и/или Т2.
-
Режим 2.
Асинхронный 9-ти битовый режим с фиксированной скоростью передачи. Передаются (через TXD) или
принимаются (через RXD) 11 бит: старт-бит. 8 бит данных (младшим разрядом вперед), программируемый 9-й бит данных и
стоп-бит. При передаче, в 9-й бит данных (бит ТВ8 регистра SCON) может быть записан логический 0 или 1, например,
значение бита четности (бит Р регистра PSW). При приеме, 9-й бит данных поступает в бит RB8 регистра SCON. Присутствие
стоп-бита контролируется схемой обнаружения ошибки кадра. Скорость передачи программируется и может быть равна
либо 1/32, либо 1/64 частоты резонатора в зависимости от управляющего бита SMOD.
-
Режим 3.
Асинхронный 9-ти битовый режим. совпадает с режимом 2 во всех деталях, за исключением
частоты приема/передачи, которая задается таймером.
Во всех четырех режимах передача начинается любой командой, которая использует SBUF как регистр-приемник. Прием в
режиме 0 начинается при условии RI = 0, REN = 1. Прием в других режимах начинается с приходом старт-бита, если бит REN
установлен.
Управление режимом работы приемопередатчика осуществляется через специальный регистр с символическим именем
SCON. Этот регистр содержит не только управляющие биты, определяющие режим работы последовательного порта, но и
девятый бит принимаемых или передаваемых данных (RB8 и ТВ8) и биты прерывания приемопередатчика (R1 и Т1).
Функциональное назначение бит регистра управления/статуса приемопередатчика SCON.
Символ |
Позиция |
Имя и назначение |
SM0 |
SCON.7 |
Биты управления режимом работы приемопередатчика. Устанавливаются/сбрасываются программно см.
примечание 1
SM0 |
SM1 |
Режим работы приемопередатчика |
0 |
0 |
Сдвигающий регистр расширения ввода/вывода |
0 |
1 |
8 битовый приемопередатчик, изменяемая скорость передачи |
1 |
0 |
9 битовый приемопередатчик. Фиксированная скорость передачи |
1 |
1 |
9 битовый приемопередатчик, изменяемая скорость передачи |
|
SM1 |
SCON.6 |
SM2 |
SCON.5 |
Бит управления режимом приемопередатчика. Устанавливается программно для запрета приема сообщения, в
котором девятьй бит имеет значение 0 |
REN |
SCON.4 |
Бит разрешения приема. Устанавливается/сбрасывается программно для разрешения/запрета приема
последовательных данных |
TB8 |
SCON. 3 |
Передача бита 8. Устанавливается/сбрасывается программно для задания девятого передаваемого бита в режиме 9-битового
передатчика |
RB8 |
SCON.2 |
Прием бита 8. Устанавливается/сбрасывается аппаратно для фиксации девятого принимаемого бита в режиме 9-битового
приемника |
TI |
SCON. 1 |
Флаг прерывания передатчика. Устанавливается аппаратно при окончании передачи байта. Сбрасывается
программно после обслуживания прерывания |
RI |
SCON.0 |
Флаг прерывания приемника. Устанавливается аппаратно при приеме байта. Сбрасывается программно после
обслуживания прерывания |
Прикладная программа путем загрузки в старшие биты регистра SCON двухбитного кода определяет режим работы
приемопередатчика. Во всех четырех режимах работы передача инициализируется любой командой, в которой буферный
регистр SBUF указан как получатель байта. Как уже отмечалось, прием в режиме 0 осуществляется при условии, что R1 = 0 и REN
= 1, в остальных режимах - при условии, что REN = 1.
В бите ТВ8 программно устанавливается значение девятого бита данных, который будет передан 8 режиме 2 или 3. В бите
RB8 в этих режимах фиксируется девятый принимаемый бит данных. В режиме 1 в бит RB8 заносится стоп-бит. В режиме 0 бит RB8
не используется.
Флаг прерывания передатчика ТI устанавливается аппаратно в конце периода передачи стоп-бита во всех режимах.
Соответствующая подпрограмма обслуживания прерывания должна сбрасывать бит TL.
Флаг прерывания приемника RI устанавливается аппаратно в конце периода приема восьмого бита данных в режиме 0 и в
середине периода приема стоп-бита в режимах 1, 2 и 3. Подпрограмма обслуживания прерывания должна сбрасывать бит RI.
Скорость приема/передачи информации через последовательный порт
Скорость приема/передачи, т.е. частота работы приемопередатчика в различных режимах, определяется различными
способами.
В режиме 0 частота передачи зависит только от резонансной частоты кварцевого резонатора f РЕЗ:
f=fРЕЗ/12.
За машинный цикл последовательный порт передает один бит информации. В режимах 1, 2 и 3 скорость приема/передачи
зависит от значения управляющего бита SMOD в регистре специальных функций PCON.
Регистр управления мощностью PCON
Символ |
Позиция |
Наименование и функция |
SMOD |
PCON.7 |
Удвоенная скорость передачи. Если бит установлен в 1, то скорость передачи вдвое больше, чем при SMOD = 0. По
сбросу SMOD = 0. |
|
PCON.6 |
Не используется |
|
PCON.5 |
Не используется |
|
PCON.4 |
е используется |
GF1 GF0 |
PCON.3 PCON.2 |
Флаги, специфицируемые пользователем (флаги общего назначения) |
PD |
PCON.1 |
Бит пониженной мощности. При установке бита в 1 микро-ЭВМ переходит в режим пониженной потребляемой мощности |
IDL |
PCON.0 |
Бит холостого хода. Если бит установлен в 1, то микро-ЭВМ переходит в режим холостого хода |
Примечание. При одновременной записи 1 в PD и IDL бит PD имеет преимущество. Сброс содержимого PCON выполняется путем
загрузки в него кода 0XXX0000.
В режиме 2 частота передачи определяется выражением
f =2SMODfРЕЗ/64.
Иными словами, при SMOD = 0 частота передачи равна 1/64 частоты fРЕЗ, а при SMOD = 1 - 1/32 частоты fРЕЗ.
В режимах 1 и 3 в формировании частоты передачи, кроме управляющего бита SMOD, принимает участие таймер 1. При этом
частота передачи f зависит от частоты переполнения f OVLT и определяется следующим образом:
f=2SMODfOVTL1/32
При использовании таймера 1 для тактирования последовательного порта прерывания от этого таймера должны быть
запрещены. Таймер может быть использован как в режиме
шестнадцатиразрядного таймера, так и в режиме
таймера с автозагрузкой. Обычно используется режим таймера с автозагрузкой (старшая тетрада
регистра TMOD = 0010В). При этом скорость передачи последовательного порта определяется выражением:
f = 2SMODfРЕЗ/(32х12х(256 -ТН1)).
Предельно низких скоростей приема и передачи по последовательному порту можно достичь при использовании
таймера в
режиме 1 (старший полубайт TMOD = 0001В). Перезагрузка 16-битного таймера должна осуществляться
программным путем. При этом для того, чтобы можно было независимо от передачи выполнять дополнительные задачи,
необходимо использовать механизм обработки прерываний и для этого разрешить прерывания от таймера 1.
Настройка таймера 1 для управления скоростью работы последовательного порта.
Частота приема/передачи (BAUD RATE) |
Частота резонатора МГц |
Таймер/счетчик 1 |
SMOD |
С/Т |
Режим (MODE) |
Перезагружаемое число |
Режим 0, макс: 1 МГц |
12 |
X |
X |
X |
X |
Режим 2, макс: 375 КГц |
12 |
1 |
X |
X |
X |
Режим 1, 3: 62,2 Кгц |
12 |
1 |
0 |
2 |
0FFH |
19,2 Кгц |
11,059 |
1 |
0 |
2 |
0FDH |
9,6 Кгц |
11,059 |
0 |
0 |
2 |
0FDH |
4,8 Кгц |
11,059 |
0 |
0 |
2 |
0FAH |
2,4 Кгц |
11,059 |
0 |
0 |
2 |
0F4H |
1,2 Кгц |
11,059 |
0 |
0 |
2 |
0F4H |
137,5 Гц |
11,059 |
0 |
0 |
2 |
1DH |
110 Гц |
6 |
0 |
0 |
2 |
72H |
110 Гц |
12 |
0 |
0 |
1 |
0FЕЕВН |
Отметим, что для старших моделей семейства MCS-51 при использовании для синхронизации последовательного порта
таймеров 1 и 2 скорости приема и передачи информации по последовательному порту могут различаться.
Режим 0. Синхронный последовательный порт.
В нулевом режиме последовательный порт работает как обыкновенный сдвиговый регистр. Это позволяет использовать
последовательный порт для увеличения количества внешних ножек микросхемы. Использование сдвиговых регистров для
этой цели показано на рисунке 1 и 3. Передача по последовательному порту начинается после записи байта в регистр
данных
SBUF. Временная диаграмма сигнала, вырабатываемого последовательным портом микроконтроллера при
передаче восьми бит данных приведена на рисунке 2. Приём байта по последовательному порту начинается после
обнуления флага готовности приёмника
RI. Временная диаграмма приёма входной информации последовательным портом в нулевом режиме приведена
на рисунке 4.
Рисунок 1. Использование нулевого режима работы последовательного порта в качестве расширителя портов.
Рисунок 2. Временная диаграмма работы последовательного порта в нулевом режиме после записи передаваемого байта в
регистр данных SBUF.
Нулевой режим работы задаётся записью комбинации 00 в биты SM0 и SM1 регистра
SCON. В синхронном режиме работы информация передается, и принимается через вывод входа приемника RxD, то
есть в этом режиме работы последовательный порт работаем в симплексном режиме. Через вывод TxD выдаются импульсы
синхронизации, которые сопровождают каждый информационный бит. Скорость передачи в этом режиме фиксирована и
составляет 1/12*Fген. Это означает, что при частоте задающего генератора 24 МГц обмен данными осуществляется на
скорости 2 мегабита в секунду.
Для осуществления передачи байта данных достаточно занести его в буфер данных SBUF, как это показано в примере:
MOV SCON, #0 ;Настроить последовательный порт на передачу в синхронном режиме
MOV SBUF, A ;Передать содержимое аккумулятора по последовательному порту
JNB TI, $ ;Подождать окончания передачи
MOV SBUF, #56H ;Передать по последовательному порту число 56h
JNB TI, $ ;Подождать окончания передачи
Рисунок 3. Использование нулевого режима работы последовательного порта для ввода информации.
Рисунок 4. Временная диаграмма приёма входной информации последовательным портом в нулевом режиме после
обнуления флага готовности приёмника RI.
Для осуществления приёма байта данных достаточно настроить порт на приём в синхронном режиме работы и обнулить
флаг приёма
RI, как это показано в примере, приведённом на рисунке 5.
;Настроить режим работы последовательного порта-----------------------------------------------------------------------------------
mov SCON,#00010000b ;настроить последовательный порт на нулевой режим работы
;||||||||
;|||||||+-------Обнулить флаг приёмника RI
;||||||+--------Обнулить флаг передатчика TI
;|||||+---------Обнулить девятый бит приёмника RB8
;||||+----------Обнулить девятый бит передатчика TB8
;|||+-----------Разрешить работу приёмника
;||+------------В синхронном режиме не имеет значения
;++-------------Включить синхронный режим работы последовательного порта
;Так как предыдущая команда обнуляет флаг RI то с этого момента начинается приём байта--------------------------------------------
JNB RI, $ ;Подождать окончания приёма байта по последовательному порту
MOV A, SBUF ;и скопировать его в аккумулятор
Рисунок 5. Программа считывания одного байта из внешнего регистра по последовательному порту.
В настоящее время разработано огромное количество микросхем таких как, например, синтезаторы частоты,
микросхемы приёмников, блоков цветности телевизоров, микросхем памяти данных, управление которыми
осуществляется по последовательному протоколу. При этом микросхемы обычно реализуют синхронные протоколы обмена
SPI или
I2C. Последовательный порт микроконтроллеров семейства MCS-51, работающий в нулевом режиме
позволяет осуществлять обмен с такими микросхемами при минимальных программно-аппаратных затратах.
Справедливости ради необходимо отметить, что в современных микросхемах семейства MCS-51 присутствуют отдельные
последовательные порты, работающие по протоколу
SPI или
I2C. В качестве примера такой микросхемы можно назвать
ADuC834
фирмы
Analog Devices. В микросхемах с отдельными
SPI или
I2C портами последовательный порт используется исключительно для связи с универсальным
компьютером.
Режим 1. Асинхронный восьмиразрядный последовательный порт.
В первом режиме работы последовательный порт работает в
асинхронном режиме. Временная диаграмма передаваемых сигналов через последовательный порт в
асинхронном режиме работы показана на рисунке 6. Первый режим работы задаётся записью комбинации 01 в биты SM0 и SM1
регистра
SCON. В асинхронном режиме работы информация передается через ножку передатчика последовательного порта
микроконтроллера TxD, а принимается через вывод входа приемника RxD, то есть в этом режиме работы последовательный
порт работает в дуплексном режиме. Это означает, что передача и приём информации может вестись независимо друг от
друга.
Скорость передачи в этом режиме настраивается при помощи
таймера T1.
Рисунок 6. Временная диаграмма приёма или передачи информации последовательным портом в первом режиме работы.
При работе в асинхронном режиме работы два микроконтроллера могут обмениваться информацией между собой. Такой
способ обмена позволяет сократить до минимума количество соединительных проводов между блоками или даже
отдельными устройствами. Единственное условие: в отличие от синхронного режима работы, скорости работы
последовательных портов должны быть одинаковыми. Обычно используются стандартные скорости передачи, такие как 1200бит/с,
2400 бит/с и т.д. Для таких скоростей передачи обычно используется кварцевый резонатор с частотой 11.0592 МГц. Скорости
передачи и коэффициенты, загружаемые в таймер 1, для этих скоростей передачи приведены в
таблице 1.
В отличие от нулевого режима работы в первом режиме работы возможен обмен информацией между двумя
микроконтроллерами, а не только между микроконтроллером и исполнительными микросхемами. Схема соединения двух
микроконтроллеров между собой для обмена информацией приведена на рисунке 7. Таким образом может быть построена
простейшая многопроцессорная система.
Рисунок 7. Схема обмена информацией между двумя микроконтроллерами по последовательному порту.
В первом режиме работы, также как и в нулевом для передачи байта через последовательный порт достаточно
скопировать его в буфер данных SBUF. Единственное отличие заключается в том, что, кроме настройки регистра
SCON, необходимо настроить
таймер для задания скорости передачи информации по последовательному порту. При приёме байта по
последовательному порту приём начинается только после обнаружения стартового бита.
В качестве примера работы с последовательным портом приведём подпрограмму инициализации последовательного
порта для работы в асинхронном режиме на скорости 9600 бит/с. Настройка режима работы последовательного порта в этой
программе производится записью двоичной константы в регистр управления
SCON. Выбор конкретных значений бит двоичной константы подробно приводится в комментариях к программе.
Так как для последовательного порта требуется таймер, то, кроме настройки последовательного порта, при помощи
регистра выбора режима работы таймеров
TMOD настраивается таймер T1. Эта настройка тоже производится при помощи записи двоичной константы.
Скорость работы последовательного порта настраивается записью константы 0FDh в старший байт
таймера T1.
;*********************************************************************************************************************************
;НАСТРОЙКА ПОСЛЕДОВАТЕЛЬНОГО ПОРТА
;*********************************************************************************************************************************
;Настроить режим работы последовательного порта-----------------------------------------------------------------------------------
mov SCON,#01110000b ;настроить последовательный порт на первый режим работы
;||||||||
;|||||||+-------Обнулить флаг приёмника RI
;||||||+--------Обнулить флаг передатчика TI
;|||||+---------Обнулить девятый бит приёмника RB8
;||||+----------Обнулить девятый бит передатчика TB8
;|||+-----------Разрешить работу приёмника
;||+------------Проверять ошибку кадра (приём нулевого бита на месте стоп-бита)
;++-------------Включить асинхронный режим работы последовательного порта
;Настроить режим работы таймера T1 ----------------------------------------------------------------------------------------------
anl TMOD,#00001111b ;Подготовить таймер T1 к настройке (таймер T0 не трогать!)
orl TMOD,#00100000b ;перевести таймер T1 вo второй режим работы (таймер T0 не трогать!)
;||||
;||++--------------Перевести таймер T1 в режим автозагрузки
;|+----------------Синхронизироваться от внутреннего генератора
;+-----------------Запретить управление таймером от ножки INT1
;Настроить таймер на генерацию 3-x микросекундного интервала времени--------------------------------------------------------------
mov TH0, #fdh ;Загрузить старший байт таймера
mov TL0, #fdh ;Загрузить младший байт таймера
setb TR1 ;Включить таймер 1
;*********************************************************************************************************************************
;РАБОТА С ПОСЛЕДОВАТЕЛЬНЫМ ПОРТОМ
;*********************************************************************************************************************************
JNB RI, $ ;Подождать окончания приёма байта по последовательному порту
MOV A, SBUF ;и скопировать его в аккумулятор
Рисунок 8. Программа приёма одного байта по последовательному порту.
Возможность работы в асинхронном режиме позволяет использовать последовательный порт для связи с
универсальным компьютером через его последовательный COM порт. К сожалению уровни последовательного порта
микроконтроллера не совпадают с уровнями последовательного порта компьютера, поэтому для подключения
микроконтроллера к последовательному порту компьютера используются специализированные микросхемы согласования
уровней. Эти же микросхемы обеспечивают защиту микроконтроллера от вывода из строя статическим потенциалом при
подключении разъёмов.
Обычно для работы используются только сигнальные цепи COM-порта компьютера. Тем не менее, оставшиеся буферы
интерфейсной микросхемы могут быть использованы для контроля питания микроконтроллерной схемы. Типовая схема
подключения компьютера к последовательному порту микроконтроллеров семейства MCS-51 с применением микросхемы ADM3202
приведена на рисунке 9.
Рисунок 9. Подключение последовательного порта микроконтроллеров семейства MCS-51 к последовательному COM порту
компьютера.
Использование последовательного порта компьютера позволяет не только управлять микроконтроллерным
устройством, используя клавиатуру компьютера, но и отображать внутреннюю информацию этого устройства, используя
дисплей компьютера. Это значительно расширяет возможности ввода и вывода информации в микроконтроллерных
устройствах. В последнее время дополнительно появилась возможность заносить программу во внутреннюю память
программ наиболее современных микроконтроллеров.
Режим 2. Асинхронный девятиразрядный последовательный порт с фиксированной скоростью передачи.
В этом режиме последовательный порт работает на фиксированной скорости передачи также как и в нулевом режиме
работы.
Скорость передачи определяется значением бита SMOD и при частоте кварцевого резонатора 12 МГц составляет
375 кбит/с то есть для современных микроконтроллеров может превышать скорость передачи 1 Мбит/с.
Основной особенностью работы последовательного порта в этом режиме является передача девятого информационного
бита, который может быть использован для контроля достоверности передаваемой информации. Для вычисления чётности
передаваемого байта можно воспользоваться аппаратным вычислителем, подключенным к аккумулятору
микроконтроллера A. Результат вычисления чётности байта сохраняется в бите чётности P регистра PSW, откуда его можно
скопировать в девятый информационный бит последовательного порта TB8, расположенный в регистре управления
последовательным портом
SCON.
Ещё большие возможности для построения устройств предоставляет девятиразрядный режим работы при реализации
многопроцессорных систем.
Параллельные порты микроконтроллеров семейства MCS-51 построены по схеме с открытым стоком. Это
позволяет объединять несколько выходов передатчиков в одну шину. Такое выполнение выходных каскадов микросхем
облегчает построение многопроцессорных систем. В многопроцессорной системе один процессор должен быть главным (master),
остальные - подчинёнными (slave). Естественно команды главного процессора должны восприниматься подчинёнными
процессорами, поэтому выход передатчика главного процессора соединяется со входами приёмников подчинённых.
Выходы же передатчиков подчинённых процессоров объединяются и подключаются ко входу приёмника главного
процессора. Схема примера многопроцессорной системы приведена на рисунке 10.
Рисунок 10. Схема соединения нескольких микроконтроллеров между собой по последовательному порту, работающему в
асинхронном режиме.
Команды главного процессора могут быть обращены к конкретному подчинённому процессору, поэтому в состав команд
включается адрес подчинённого процессора. При работе в шине необходимо уметь отличать адресную информацию от
данных. Это можно осуществить при помощи девятого бита. Обычно при передаче адреса в девятый бит записывают
единицу, а в байтах данных и команд - 0. Таким образом микроконтроллер, даже подключившийся к шине позднее остальных,
легко может осуществить синхронизацию с многопроцессорной шиной. Временная диаграмма работы многопроцессорной
шины приведена на рисунке 11.
Рисунок 11. Временная диаграмма работы многопроцессорной шины.
При настройке и работе с портом во втором режиме никаких особенностей не возникает, поэтому можно
воспользоваться примером программы, приведённом для нулевого режима работы. Все особенности работы
сосредоточены на протокольном уровне, а это не входит в задачу рассмотрения последовательного порта.
Режим 3. Асинхронный девятиразрядный последовательный порт.
Работа последовательного порта в этом режиме не отличается от работы во
втором режиме за исключением скорости передачи.
Скорость передачи по последовательному порту задаётся таймером 1 также как и в первом режиме работы.
Для построения программы можно воспользоваться примером, приведённым для первого режима работы с учётом того, что
в регистре
SCON необходимо задать вместо первого режима третий режим работы.
Понравился материал? Поделись с друзьями!
Литература:
- Боборыкин А.В., Липовецкий Г.П., и др. Однокристальные микроЭВМ М.: Бином 1994
- В.В. Сташин, А.В. Урусов, О.Ф. Мологонцева Проектирование цифровых устройств на однокристальных микроконтроллерах М.: Энергоатомиздат 1990
- Карасев Однокристальный микропроцессор семейства MCS-51 М.: 1995
- Бродин В.Б., Калинин А.В. Системы на микроконтроллерах и БИС программируемой логики М.: ЭКОМ 2001
- Микушин А.В. Сединин В.И. Однокристальный микроконтроллер семейства MCS-51 фирмы INTEL 8xC51GB Новосибирск: СибГУТИ, 2001
- Микушин А.В.
Занимательно о микроконтроллерах. СПб, БХВ-Петербург, 2006.
- Микушин А.В., Сажнев А.М., Сединин В.И.
Цифровые устройства и микропроцессоры. СПб, БХВ-Петербург, 2010.
Вместе со статьей "Архитектура микроконтроллеров MCS-51" читают:
Состав семейства MCS-51
http://digteh.ru/MCS51/tablms.php
Архитектура микроконтроллеров MCS-51
http://digteh.ru/MCS51/MCS_51.php
Система команд микроконтроллеров MCS-51
http://digteh.ru/MCS51/SysInstr.php
Устройство параллельных портов микроконтроллеров MCS-51
http://digteh.ru/MCS51/port.php
Построение памяти микроконтроллеров семейства MCS-51
http://digteh.ru/MCS51/pam_cntr.php
Устройство таймеров микроконтроллеров MCS-51
http://digteh.ru/MCS51/timers.php
Автор Микушин А. В. All rights reserved. 2001 ... 2024