Режимы 2 и 3 работы последовательного порта
Это режимы 9-разрядного приёмо-передатчика с постоянной (режим 2) и переменной (режим 3) скоростью обмена данными. В этих режимах 11 бит передаются и принимаются через выводы TxD и RxD в следующей последовательности: старт-бит, 9 бит данных, стоп-бит. При передаче 9-й бит данных определяется содержимым разряда ТВ8 регистра SCON. При приёме 9-й бит заносится в бит RB8 регистра SCON.
В режиме 2 скорость (частота) приёма-передачи программно настраивается на одну из двух возможных величин fxtal/32 и fxtal/64 с помощью бита SMOD регистра PCON. В режиме 3 скорость определяется частотой преполнения Т/С 1 (fov). Во всём остальном режимы идентичны.
Временные диаграммы при передаче в отличие от режима 1 имеет перед стоп-битом бит ТВ8, а при приёме перед стоп-битом следует бит RB8. Регистр сдвига приёмника (как и передатчика) является 9-разрядным. При приёме после десятого импульса "Сдвиг" в регистре находятся 9 бит принятой посылки (8 бит данных и бит RB8). После десятого импульса "Сдвиг" биты D0 – D7 загружаются в регистр SBUF, 9-й разряд регистра сдвига загружается в бит RB8 регистра SCON и устанавливается флаг прерывания приёмника RI регистра SCON. Загрузка SBUF, RB8 и установка RI происходит при выполнении 2-х условий: 1) RI = 0 и 2) Либо SM2 = 0, либо принятый 9-й бит равен 1. Если хотя бы одно условие не выполняется посылка теряется , а флаг RI не устанавливается. Независимо от выполнения этих условий последовательный порт вновь начинает отслеживать на входе RxD переход из 1 в 0. Значение принятого стоп-бита не влияет на SBUF, RB8 и RI.
Напомним, что использование 9-го служебного бита необходимо для организации контроля обмена по чётности или обеспечения многопроцессорной работы микроконтроллеров.
Организация обмена в многопроцессорных системах
Многопроцессорная система представляет собой персональный компьютер и несколько микроконтроллеров, подключенных к общему последовательному каналу (рис. 34). Вместо персонального компьютера в системе может быть ведущий микроконтроллер. Обмен данными производится между микроконтроллерами и персональным компьютером или ведущим микроконтроллером. В качестве общего последовательного канала (моноканала) может использоваться коаксиальный кабель, витая пара, оптоволоконный кабель.
Д
ля
организации обмена необходимо обеспечить
адресацию посылок от персонального
компьютера к определённому микроконтроллеру
и обеспечить передачу данных от
микроконтроллера к персональному
компьютеру (ведущему микроконтроллеру)
только по команде персонального
компьютера. Режимы 2 и 3 последовательного
порта позволяют реализовать механизм
адресации ведомых микроконтроллеров.
В этих режимах принимается 9 бит данных
и 9-й принятый бит записывается в разряд
RB8
регистра SCON.
При этом если бит SM2
регистра SCON
установлен в 1, то после приёма посылки
флаг прерывания приёмника RI
будет установлен только в том случае,
если RB8
= 1. Когда персональный компьютер хочет
передать блок данных одному из
микроконтроллеров, он выдаёт в моноканал
посылку с адресом этого микроконтроллера.
Адресная посылка отличается от посылки
с данными тем, что в адресной посылке
9-ый бит данных равен 1, а в посылке с
данными он равен 0. При SM2
= 1, ни один микроконтроллер не будет
реагировать на посылку с данными, но
все среагируют на посылку с адресом.
Одновременная реакция микроконтроллеров
заключается в переходе от выполнения
текущей программы к подпрограмме
обработки прерывания от приёмника, в
которой происходит сравнение содержимого
принятой посылки с уникальным адресом
микроконтроллера. Адресуемый
микроконтроллер, опознав свой адрес,
сбрасывает свой бит SM2,
а остальные оставляют его без изменения
и вновь переходят к выполнению прерванной
программы. После этого персональный
компьютер начинает выдачу данных в
моноканал. Данные передаются с девятым
битом данных, равном нулю. На посылки
будет реагировать микроконтроллер, у
которого SM2
= 0. Его реакция заключается в том, что
байт данных принимается приёмником,
загружается в SBUF,
устанавливается флаг прерывания от
приёмника RI,
происходит переход к подпрограмме
обработки прерывания, пересылающей
байт из SBUF
в ячейку оперативной памяти.
Приёмники микроконтроллеров, у которых SM2 = 1, принимают байт данных, но он не загружается в SBUF и флаг прерывания RI не устанавливается. Поэтому байт данных затирается следующим принятым байтом, текущая программа не прерывается. Работающие приёмники контролируют возможность поступления адресной посылки.
