Через универсальный последовательный порт микроконтроллера осуществляются прием и передача информации, представленной в последовательном коде (младшими битами вперед). Наличие буферного регистра приемника позволяет совмещать операцию чтения ранее принятого байта с приемом очередного. Но если к моменту окончания приема байта предыдущий не был считан из SBUF, то он будет потерян. Работой последовательного порта управляют три регистра:
— регистр управления/статуса приемопередатчика SCON;
— регистр управления мощностью PCON, бит SMOD;
— буферный регистр приемопередатчика SBUF.
Последовательный порт может работать в четырех различных режимах:
— режим 0, синхронный;
— режим 1 асинхронный 8-битовый обмен;
— режим 2, асинхронный 9-битовый обмен с фиксированной скоростью передачи;
— режим 3, асинхронный 9-битовый режим.
Управление режимами работы приемопередатчика осуществляется через специальный регистр с символическим именем SCON. Он содержит не только управляющие биты, определяющие режим работы последовательного порта, но и девятый бит принимаемых или передаваемых данных (RB8 и ТВ8) и биты прерывания приемника/передатчика (R1 и T1). Формат регистра управления последовательным портом приведен на рис. 6.22.
Рис. 6.22.
Прикладная программа путем загрузки в старшие биты регистра SCON двухбитного кода задает режим работы приемопередатчика. Во всех четырех режимах передача инициализируется любой командой, в которой буферный регистр SBUF указан как получатель байта. Как уже отмечалось, прием в режиме 0 осуществляется при условии, что R1 = 0 и REN = 1, в остальных режимах — при условии, что REN = 1.
В бите ТВ8 программно устанавливается значение девятого бита данных, который будет передан в режиме 2 или 3 в составе 9-битового поля данных кадра передачи. В бите RB8 в этих режимах запоминается девятый принимаемый бит данных. В режиме 1 в бит RB8 заносится значение стоп-бита. В режиме 0 бит RB8 не используется.
Флаг прерывания передатчика T1 устанавливается аппаратно после передачи стоп-бита во всех режимах. Подпрограмма, обслуживающая прерывания или опрашивающая флаг, должна сбрасывать бит T1.
Флаг прерывания приемника R1 устанавливается аппаратно после приема восьмого бита данных в режиме 0 и в середине периода приема стоп-бита в режимах 1, 2 и 3. Подпрограмма обслуживания прерывания должна сбрасывать бит RI.
Скорость приема/передачи в различных режимах, задается различными способами.
В режиме 0 частота передачи зависит только от резонансной частоты кварцевого резонатора
f = fрез/12.
При этом за машинный цикл последовательный порт передает/передает/принимает один бит информации.
В режимах 1, 2 и 3 скорость приема/передачи зависит от значения управляющего бита SMOD в регистре специальных функций PCON. Формат регистра управления питанием, в котором расположен бит управления скорости передачи, приведен на рис. 6.23.
Рис. 6.23.
В режиме 2 частота приема/передачи определяется выражением
f = (2SMOD x fрез)/64.
Иными словами, при SMOD = 0 частота передачи равна 1/64 частоты кварцевого резонатора/рез, а при SMOD = 1 частота передачи равна 1/32 частоты кварцевого резонатора/рез.
В режимах 1 и 3 в формировании частоты приема/передачи, кроме управляющего бита SMOD, принимает участие таймер 1. При этом частота приема/передачи
f = (2SMOD x fovlT1)/32.
При использовании таймера 1 для тактирования последовательного порта прерывания от этого таймера должны быть запрещены. Таймер может быть использован как в режиме 16-разрядного таймера, так и в режиме таймера с автозагрузкой. Обычно используется режим таймера с автозагрузкой (старшая тетрада регистра TMOD = 0010В). При этом скорость передачи последовательного порта определяется выражением:
f = (2SMOD x fрез)/(32 x 12 x (256 — TH1)).
Предельно низких скоростей приема и передачи по последовательному порту можно достичь при использовании таймера в режиме 1 (старший полубайт TMOD = 0001В). Перезагрузка 16-битного таймера должна осуществляться программным путем. При этом для того, чтобы можно было, кроме приема/передачи, выполнять дополнительные задачи, необходимо использовать механизм обработки прерываний и для этого разрешить прерывания от таймера 1.
Отметим, что для старших моделей семейства MCS-51 при использовании для синхронизации последовательного порта таймеров 1 и 2 скорости приема и передачи информации по последовательному порту могут различаться.