Микроконтроллеры MCS51Блок последовательного интерфейса. Назначение и состав блока. Блок последовательного интерфейса (БПИ), или последовательный порт, предназначен для организации ввода–вывода последовательных потоков информации.

В состав БПИ входят:

●     приемопередатчик, предназначенный для обмена информацией по двухпро­водной линии с внешним устройством;

●     буфер с регистрами SBUF, обеспечивающий побайтный обмен информацией между внутренней шиной данных МК и приемопередатчиком. При программи­ровании оба буфера имеют одинаковое имя SBUF и адрес 99h. Если команда использует SBUF как регистр источника, то обращение происходит к буферу приемника, если же как регистр назначения, то обращение происходит к бу­феру передатчика;

●     узел управления для координации 4–х режимов работы БПИ;

●     регистр PCON, имеющий единственный задействованный бит SMOD в по­зиции PCON.7 для удвоения скорости передачи данных через последова­тельный порт. Остальные биты зарезервированы для дальнейшего исполь­зования;

●     регистр управления/статуса SCON, назначение разрядов которого приведено в табл. 7.1.4. Все разряды регистра доступны для записи и чтения.

Рассмотрим режимы работы блока последовательного интерфейса.

Режим 0 (SM= 0, SM1 = 0). В этом режиме БПИ работает как сдвигающий регистр. Для него характерно следующее:

     информация передается и принимается через вывод порта Р3.0 (использу­емый обычно как вход приемника RxD). Формат посылки — 8 бит;

●     каждый передаваемый и принимаемый бит посылки синхронизируется им­пульсами (стробами) с частотой FOSC/12 (FOSCчастота тактового генератора), передаваемыми через вывод порта Р3.1 (используемый обычно как выход пе­редатчика TxD).

Схема и временные диаграммы, иллюстрирующие работу последовательного порта в режиме 0, приведены на рис. 7.1.14.

рис. 7.1.14

ПЕРЕДАЧА активизируется любой командой, которая использует буфер пере­датчика SBUF в качестве регистра назначения. При выполнении такой команды в фазе S6P5 аппаратно вырабатывается импульс «Запись в SBUF», по которому:

●     предназначенный для передачи байт данных через SBUF заносится в регистр сдвига передатчика;

●     запускается блок управления передатчиком.

Через один полный машинный цикл аппаратно вырабатывается сигнал «По­сылка» = 1. разрешающий выдачу бита D0 из регистра сдвига передатчика на вы­ход RxD и импульсов «Сдвиг TxD» на выход TxD порта.

Импульсы «Сдвиг TxD» в состояниях S3, S4, S5 имеют низкий уровень, в состоя­ниях S6, S1, S2 — высокий. Их можно использовать для синхронизации внешних устройств.

При сигнале «Посылка» = 1 в фазе S6P2 каждого машинного цикла аппаратно формируется импульс «Сдвиг», по которому содержимое передатчика смещается на один разряд вправо и на выходе RxD появляется очередной бит данных. Осво­бодившийся старший разряд регистра сдвига передатчика заполняется нулевым битом, который передается в детектор нуля.

При получении от детектора нуля (после 8–го импульса «Сдвиг») сигнала «Пе­редатчик пуст» блок управления в фазе S1P1 снимает сигнал «Посылка» и уста­навливает флаг прерывания передатчика TI в регистре управления SCON.

ПРИЕМ начинается при одновременном выполнении двух условий:

●     должен быть установлен бит разрешения приема последовательных данных (REN = 1) в регистре управления SCON;

●     должен быть сброшен флаг прерывания приемника (RI = 0) в регистре SCON.

На рис. 7.1.14, б показаны процессы при приеме после подачи сигнала «За­пись в SCON», сбрасывающего флаг RI. В фазе S6P2 следующего машинного цикла узел управления приемником аппаратно вырабатывает сигнал «Прием» = 1, разрешающий выдачу импульсов «Сдвиг TxD» на выход TxD последовательного порта.

Так же как и при ПЕРЕДАЧЕ, импульсы «Сдвиг TxD» в состояниях S3, S4, S5 имеют низкий уровень, в состояниях S6, S1, S2 — высокий. Биты принимаемой посылки через вход RxD, состояние которого опрашивается в фазе S5P2 каждого цикла, поступают в регистр сдвига приемника. При сигнале «Прием» – 1 в фазе S6P2 каждого машинного цикла аппаратно формируется импульс «Сдвиг», по ко­торому содержимое сдвигающего регистра приемника сдвигается на один раз­ряд влево. Освободившийся младший разряд заполняется следующим битом данных, поступающим со входа RxD. После 8–го импульса «Сдвиг» в узле управле­ния приемником формируется сигнал «Загрузка SBUF», по которому содержимое сдвигающего регистра переписывается в буфер приемника SBUF. В фазе S1P1 10–го машинного цикла после сигнала «Запись в SCON» происходит сброс сигна­ла «Прием» («Прием» = 0) и установка флага прерывания приемника (RI = 1) в ре­гистре SCON.

рис. 7.1.15

Схема и временные диаграммы, иллюстрирующие работу в режимах 1, 2, 3 приведены на рис. 7.1.15. В этих режимах БПИ работает как универсальный приемопередатчик. В передатчике и приемнике используются 9–разрядные реги­стры сдвига.

Режим 1 (SM0 = 0, SM1 = 1). Информация передается через вывод Р3.1 порта Р3 (выход передатчика TxD), принимается — через вывод Р3.0 (вход приемника RxD). Формат посылки — 10 бит: нулевой старт–бит, 8 бит данных, единичный стоп–бит. В этом режиме сигналы синхронизации передачи (СИ Тх) и приема (СИ Rx) формируются путем деления на 16 или 32 (соответственно при значениях бита SMOD = 1 и SMOD = 0 регистра PCON) частоты FT/C1 импульсов, поступающих с вы­хода таймера–счетчика T/C1.

Период синхронизации определяет время трансляции бита, т. е. его нахожде­ние на выводах TxD или RxD порта. Поэтому частота передачи и приема задается таймером–счетчиком T/C1 и составляет FT/C1/16 или  FT/C1/32.

ПЕРЕДАЧА активизируется (так же как и в режиме 0) любой командой, которая использует буфер Передатчика SBUF в качестве регистра назначения. При выпол­нении такой команды аппаратно в фазе S6P5 вырабатывается импульс «Запись в SBUF», по которому:

●     предназначенный для передачи байт данных через SBUF загружается в ре­гистр сдвига передатчика;

●     в 9–й разряд регистра сдвига передатчика заносится стоп–бит (1);

●     запускается блок управления передатчиком.

Однако активный сигнал «Посылка#» = 0, который инициирует начало передачи, формируется только с приходом первого синхроимпульса «СИ Тх» в фазе S1P1 машинного цикла. Первым из узла управления передатчиком через логические элементы И и ИЛИ на выход TxD поступает нулевой старт–бит. С приходом второ­го синхроимпульса «СИ Тх» формируется сигнал «Данные» = 1 для разрешения пе­редачи битов данных и девяти импульсов «Сдвиг». По фронту сигнала «Данные» из регистра сдвига передатчика на выход TxD выводится бит данных D0. Вывод последующих бит данных происходит с помощью импульсов «Сдвиг», которые формируются под действием каждого синхроимпульса «СИ Тх». По сигналу «Пе­редатчик пуст», формируемого детектором нуля после 9–го импульса «Сдвиг», узел управления передатчиком устанавливает флаг прерывания передатчика TI = 1 и снимает сигналы «Посылка#» и «Данные».

Для ПРИЕМА (бит REN = 1 в регистре SCON) данных по последовательному ка­налу в детекторе перепада 16 раз за период синхроимпульсов «СИ Rx» (с часто­той FT/C1 или FTC1/2) с помощью сигнала «Опрос RxD» производится опрос входа приемника. При обнаружении перехода сигнала на входе RxD из 1 в 0 (появлении старт–бита со стороны внешнего устройства), происходит сброс и новый запуск счетчика–делителя на 16 в цепи синхронизации, после чего начинается прием от­дельных бит байта данных. Счетчик–делитель позволяет фиксировать 16 состоя­ний (фаз) принимаемого бита. В состояниях 7, 8, 9 детектор бит с помощью сиг­нала «Опрос 7–9» считывает с входа RxD три значения принимаемого бита, по ма­жоритарному принципу «2 из 3–х» выбирает одно значение и передает его на вход регистра сдвига приемника. При этом узел управления приемника аппаратно формирует импульс «Сдвиг», в результате чего принятый бит заносится в сдвига­ющий регистр приемника и его содержимое сдвигается на один разряд в сторону старших разрядов. После 10–го импульса «Сдвиг» сдвигающий регистр приемни­ка заполняется и его восемь бит данных D0–D7 по сигналу «Загрузка SBUF» заг­ружаются в буферный регистр приемника, A стоп–бит — в разряд RB8 регистра управления SCON и устанавливается флаг прерывания приемником RI = 1. Сигнал «Загрузка SBUF», биты RB8 и RI вырабатываются блоком управления, если в мо­мент формирования 10–го импульса «Сдвиг» выполняются следующие условия:

1. RI = 0;

2. либо SM2 = 0, либо стоп–бит равен 1.

Если хотя бы одно из условий не выполняется, флаг RI не устанавливается, A принятая посылка безвозвратно теряется.

Если при приеме старт–бита (первого бита посылки) детектор бит в результате мажоритарного отбора выдает 1 вместо 0, все устройства приемника сбрасыва­ются и начинается отслеживание перехода сигнала из 1 в 0 на входе RxD. Таким образом обеспечивается защита от сбойных старт–битов.

Режим 2 (SM0 = 1, SM1 =0). Информация передается через вывод Р3.1 пор­та Р3 (выход передатчика TxD), принимается — через вывод Р3.0 (вход приемника RxD).

Формат посылки — 11 бит: нулевой старт–бит, 8 бит данных, программиру­емый 9–й бит (бит ТВ8 регистра SCON при передаче, бит RВ8 регистра SCON при приеме), единичной стоп–бит. частота передачи и приема задается про­граммно и составляет FOSC/32 или FOSC/64.

Помимо частоты синхронизации отличие режима 2 от режима 1 проявляется в том, что (см. рис. 7.1.15, а):

●     данные содержат девять бит;

●     при ПЕРЕДАЧЕ в регистр сдвига передатчика и детектор нуля по сигналу «За­пись в SBUF» засылается программируемый 9–й бит ТВ8; 

●     при ПРИЕМЕ вместо стоп–бита фигурирует принятый в посылке 9–й бит RB8.

Режим 3 (SM0 = 1, SM1 = 1). Этот режим отличается от режима 2 лишь тем, что частота передачи и приема задается таймером–счетчиком T/C1 (как в режиме 1).

Особенности работы в мультипроцессорных системах. В регист­ре управления/статуса SCON последовательного интерфейса бит SM2 (позиция SCON.5) позволяет в режимах 2 и 3 приемопередатчика простыми средствами организовать обмен информацией между микроконтроллерами в локальных управ­ляющих сетях. В указанных режимах при SM2 = 1 флаг прерывания приемника RI не активизируется, если девятый бит RB8 принятых данных равен 0. Поэтому для межпроцессорного обмена передается RB8 = 1, чтобы при получении стоп–бита вызвать прерывание приемника установкой флага RI = 1.

Рассмотрим последовательность передачи данных ведущим микроконтролле­ром MК одному или нескольким ведомым. Ведущий МК в «широковещательном» режиме, когда работают все ведомые МК, посылает байт–идентификатор абонен­та (адресный код получателя), который отличается от байта данных наличием 1 в девятом разряде. При получении байта–идентификатора все ведомые МК вхо­дят в режим прерывания и вызывают подпрограмму сравнения байта–идентифи­катора с кодом собственного сетевого адреса. Микроконтроллер, собственный адрес которого совпадает с принятым байтом–идентификатором, производит сброс бита SM2 и переходит к приему данных от ведущего МК. Остальные ведо­мые МК, адреса которых не совпадают с кодом байта–идентификатора, сохраня­ют значение бита SM2 = 1 и передают управление основной программе.

рис. 7.1.16

Блок таймеров/счетчиков. Блок таймеров–счетчиков (T/C) относится к сред­ствам поддержки режима реального времени и предназначен для подсчета числа внешних событий, получения программно управляемых временных задержек, выполнения времязадающих функций МК и других целей. В состав блока тайме­ров/счетчиков входят (рис. 7.1.16):

 

●     буфер Б для связи ШД с внутренней шиной блока;

●     два 16–разрядных таймера–счетчика T/C0, T/C1, предназначенные для хране­ния содержимого счета. Каждый из Т/Cn (n = 0, 1) состоит из пары восьмираз­рядных регистров ТН0, ТН1 (старшие 8 разрядов) и TL0, TL1 (младшие 8 раз–рядов);

●     схема инкремента СхИ для увеличения на 1 содержимого:

•      регистров TC0, ТС1 (в каждом машинном цикле), для которых установлен режим таймера и счет разрешен;

•      регистров TC0, ТС1, для которых установлен режим счетчика, счет разре­шен и на соответствующем входе Т0 или Т1 МК зафиксирован счетный им­пульс;

●     схема фиксации ¯INT0, ¯INT1, Т0, Т1, состоящая из четырех триггеров, пред­назначенных для запоминания сигналов ¯INT0, ¯INT1, Т0, Т1 в момент S5P2 каждого машинного цикла;

●     схема управления флагами, устанавливающая и снимающая флаги перепол­нения TF и флаги запросов внешних прерываний IE;

●     узел управления T/C, синхронизирующий работу регистров T/C0, T/C1 в со­ответствии в запрограммированными режимами;

●     восьмиразрядный регистр режимов TMOD для хранения кода, который зада­ет режимы работы TC0, ТС1, причем разряды (биты) 0...3 определяют режим работы TC0, A разряды 4...7 — ТС1. Назначение разрядов TMOD приведено в табл. 7.1.5;

табл. 7.1.5

●     восьмиразрядный регистр управления TCON, который предназначен для при­ема и хранения кода управляющего слова (табл. 7.1.6).

табл. 7.1.6

Режимы 0, 1, 2 одинаковы для T/C0 и T/C1. Поэтому особенности работы в этих режимах проиллюстрируем на примере T/C0.

рис. 7.1.17

Режим 0 (М1 = 0, М0 = 0). Логическая схема для этого режима приведена на рис. 7.1.17. В ее состав входят формирователь счетных импульсов и 13–разряд­ный счетчик, образованный из регистра ТН0 и 5 младших разрядов регистра ТL0).

Сигнал переполнения (переход из состояния «все единицы» в состояние «все нули») счетчика фиксируется установкой флага TF0 = 1 в разряде 5 регистра уп­равления TCON. Счет разрешается при TR0 = 1, GATE0 = 0 или TR0 1, ¯INT0 =1. Бит С/¯Т0, поступающий на адресный вход мультиплексора из регистра режимов TMOD, задает для ТС0 функцию таймера (С/¯Т0 = 0) или счетчика (С/¯Т0 = 1 ).

Функция таймера состоит в счете импульсов, следующих с частотой FOSC/12. При функционировании ТС0 в качестве счетчика внешних событий ведется под­счет числа переходов из 1 в 0 на входе Т0. При этом вход ТС0 аппаратно проверя­ется в фазе S5P2 каждого машинного цикла. Если в текущем машинном цикле Т0 = 1, A в последующем Т0 = 0, то содержимое счетчика увеличивается на 1 и фиксируется в фазе S3P1 нового машинного цикла. Поскольку процедура обнару­жения перехода из 1 в 0 длится два машинных цикла, максимальная частота счета не должна превышать FOSC/24. Каждый уровень (1 или 0) на входе Т0 должен удер­живаться не менее одного машинного цикла.

Режим 1 (М1 = 0, М0 = 1). Отличие режима 1 от режима 0 обусловлено лишь тем, что в счетчике используются все восемь разрядов регистра ТL0 (рис. 7.1.17).

Режим 2 (М1 = 1, М0 = 0). В этом режиме переполнение 8–битного счетчика ТL0 приводит не только к установке флага переполнения ТF0 (рис. 7.1.18), но и к перезагрузке ТL0 содержимым регистра ТН0, которое предварительно было за­дано программным путем.

рис. 7.1.18

Режим 3 (М1 = 1, М0 = 1). В этом режиме задействован только таймер–счет­чик ТС0, который можно представить как два независимых устройства (рис. 7.1.19). В первом устройстве в качестве счетчика используется регистр TL0. Принцип его работы такой же, как и в режиме 0. Второе устройство выполняет только функции таймера. Его счетчик построен на регистре ТН0. Включение счетчика осуществля­ется битом TR1, A для фиксации переполнения используется флаг TF1.

рис. 7.1.19

Установка ТС1 в режим 3 приводит к блокировке регистров TL1, TH1 с сохра­нением их содержимого.

Блок прерываний. Назначение и состав блока. Блок прерываний предназначен для организации системы прерывания программ. Он обеспечивает поддержку прерываний от пяти источников:

     от флагов IE0, IE1 регистра управления TCON (см. табл. 7.1.6), инициируемых внешними сигналами запроса INT0, INT1;

●     от флагов TF0, TF1 регистра TCON, устанавливаемых при переполнении тай­меров/счетчиков T/C0, T/C1;

●     от флага прерывания передатчика TI или приемника RI регистра управления SCON (см. табл. 7.1.4) последовательного порта.

табл. 7.1.4

В состав блока прерываний входят (рис. 7.1.20):

рис. 7.1.20

●     буфер Б, обеспечивающий обмен информацией между шиной данных МК и внутренней шиной блока прерываний;

●     схема выработки вектора прерывания СВВ, формирующая двухбайтовые ад­реса подпрограмм обслуживания прерывания;

●     узел управления;

●     регистр управления/статуса SCON (табл. 7.1.4);

●     регистр управления/статуса ТСОN (табл. 7.1.6);

●     регистр разрешения (маскирования) прерываний IE, предназначенный для разрешения или запрещения прерывания для каждого из пяти источников прерываний. Назначение отдельных битов регистра приведено в табл. 7.1.7;

 табл. 7.1.7 - табл. 7.1.8

●     регистр приоритетов прерываний IP, предназначенный для установки уровня приоритета прерывания для каждого из пяти источников прерываний. Назна­чение отдельных битов регистра приведено в табл. 7.1.8.

Организация прерываний. Средства прерывания МК позволяют откли­каться на сигналы ¯IМTn внешних запросов (здесь и далее n = 0, 1), сигналы TFn переполнения таймеров–счетчиков T/Cn, сигналы завершения последовательного обмена ТIRI. Для пояснения принципов организации прерываний от отдельных источников воспользуемся рис. 7.1.21.

рис. 7.1.21

При поступлении внешнего сигнала запроса ¯INTn происходит установка флага IEn регистра управления ТСОN, вызывающая выполнение соответствующей под­программы обслуживания прерывания. При этом вид активизации прерывания определяется состоянием флагов IТn регистра ТСОN: при IТn = 1 — по уровню, при IТn = 0 — по фронту (перепаду из 1 в 0) сигнала ¯INTn.

Если прерывание активизируется по уровню, то сигнал запроса ¯INTn = 0 дей­ствует постоянно и снимается в конце обслуживающей подпрограммы, чтобы не вызвать повторного обслуживания. Сигнал запроса ¯INTn распознается аппа­ратными средствами МК за один машинный цикл (12 периодов тактовой частоты), после чего устанавливается флаг прерывания IEn. Флаг IEn сбрасывается после снятия сигнала ¯INTn. Отметим, что флаг IEn при переходе к подпрограмме обра­ботки прерывания автоматически сбрасывается, A затем вновь устанавливается, если на соответствующем выводе порта сигнал ¯INTn = 0 сохраняется. Поэтому программная установка флагов IEn = 1 вызовет прерывание и после перехода к подпрограмме флаг будет сброшен IEn = 0.

В случае активизации прерывания по фронту для распознавания сигнала ¯INTn требуется не менее двух машинных циклов. Установка флага IEn происходит после того, как две последовательные проверки покажут ¯INTn = 1 в одном цикле и ¯INTn = 0 — в другом. Сброс флага IEn выполняется аппаратно при обращении к подпрограмме обслуживания прерывания.

Флаги запросов прерывания TFn от таймеров–счетчиков Т/Cn устанавливаются после их переполнения и сбрасываются автоматически при передаче управления подпрограмме обслуживания.

Прерывание от последовательного порта вызывается аппаратной установкой флага прерывания передатчика TI или флага прерывания приемника RI в регистре SCON по завершении передачи или приема байта данных. Сброс флагов TIRI производится программным способом.

Отметим, что флаги IEnTFnRITI могут быть программно установлены или сброшены как соответствующие биты регистров TCONSCON. Кроме того, преры­вания по ¯INTn могут вызываться программной установкой нулевого сигнала на выводах Р3.2, Р3.3 порта Р3.

Каждый из источников прерываний IE0, TF0, IE1, TF1, RI ٧ TI может быть инди­видуально разрешен или запрещен установкой или сбросом соответствующего бита в регистре разрешения прерывания IE (рис. 7.1.21). Регистр IE содержит так­же бит ЕА, значение которого ЕА = 0 запрещает сразу все прерывания. При ЕА = 1 запрет на все прерывания снимается.

Уровни прерываний. Структура приоритетов прерываний является двух­ступенчатой. Каждому из пяти источников прерываний IE0, ТР0, IE1, TF1, RI ٧ TI может быть индивидуально присвоен высокий (1) или низкий (0) уровень преры­вания с помощью установки или сброса соответственно битов РХ0, PN0, РХ1, РТ1, PS в регистре приоритетов прерываний IP (рис. 7.1.21). При этом, если одновре­менно приняты два запроса:

●     с разными уровнями прерывания, то сначала обслуживается запрос с высо­ким уровнем приоритета;

●     с одинаковым уровнем приоритета, то их обработка будет производиться в следующей последовательности: IE0, TF0, IE1, TF1, RI ٧ TI (стрелка на рис. 7.1.21).

Кроме того, подпрограмма обработки прерывания:

●     с низким уровнем может быть прервана запросом прерывания с высоким уров­нем приоритета, но не может быть прервана другим запросом с низким уровнем;

●     с высоким уровнем не может быть прервана никаким другим запросом пре­рывания.

Последовательность обработки прерываний. Установка флагов прерывания происходит в фазе S5P6 машинного цикла. В следующем машинном цикле выполняется опрос флагов внутренними средствами. И после выполнения последнего цикла текущей команды производится аппаратный вызов соответ­ствующей подпрограммы обслуживания, эквивалентный команде LCALL.

Обращение к подпрограмме обслуживания задерживается в трех случаях:

●     при обработке подпрограммы прерывания с таким или высшим приоритетом;

     текущий машинный цикл не является последним циклом выполняемой команды;

●     выполняется команда RETI (конец прерывания) или любая команда обраще­ния к регистрам IE, IP. В этом случае перед вызовом подпрограммы обслужи­вания прерывания после окончания одной из вышеуказанных команд обяза­тельно должна выполниться минимум еще одна команда текущей программы. Флаг прерывания, установленный во время действия блокировки прерывания по одному из трех указанных выше условий и сброшенный до их снятия, не вызо­вет обслуживания соответствующего запроса прерывания.

Аппаратная команда LCALL загружает в стек только содержимое счетчика ко­манд PC (в ячейку стека с младшим адресом — разряды 0–7, A в следующую ячейку — разряды 8–15), после чего записывает в PC стартовый адрес соответ­ствующей подпрограммы обработки прерывания (03h для источника прерывания IE0, 0Bh для TF0, 13h для IE1, 1Bh для TF123h для RI ٧ TI). По этому адресу может располагаться команда безусловной передачи управления (JMP) к первой ячейке памяти подпрограммы. При необходимости в подпрограмму могут быть включены команды записи в стек (PUSH) содержимого регистров слова состояния програм­мы PSW, аккумулятора A, указателя данных DPTR и др. В этом случае подпрограм­ма должна заканчиваться командами (POP) восстановления регистров из стека.

Подпрограмма обслуживания прерывания продолжается до выполнения ко­манды RETI или RET. Команда RETI загружает в счетчик команд PC два байта ад­реса возврата из двух верхних ячеек стека и снимает запрет на все прерывания с уровнем приоритета, равным уровню приоритета обслуживаемого прерывания, т. е. восстанавливает логику прерывания.

 При использовании команды RET восстанавливается только состояние счетчи­ка команд, т. е. происходит возврат в прерванную программу. Состояние логики прерывания команда RET не меняет, т. е. логика управления обслуживанием пре­рываний по–прежнему считает, что продолжает обслуживаться прерывание, под­программа обработки которого была закончена командой RET. Поэтому необходи­мо иметь программный механизм окончания процедуры обслуживания данного прерывания (восстановления логики управления обслуживания).