Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Работа с последовательным портом



    Последовательный порт микроконтроллеров семейства MCS-51 может использоваться в виде регистра сдвига для расширения ввода/вывода или в качестве универсального асинхронного приемо-передатчика (УАПП) с фиксированной или переменной скоростью последовательного обмена и возможностью дуплексного включения (т.е. через последовательный порт можно принимать и передавать данные одновременно). Последовательный порт может принимать очередной байт даже, если уже принятый до этого байт не был прочитан из регистра приемника. Однако, если до окончания приема находящийся в регистре приемника байт не будет прочитан, принятый байт теряется. Программный доступ к регистрам приемника и передатчика осуществляется обращением к регистру специальных функций SBUF. При записи в SBUF байт загружается в регистр передатчика, а при чтении SBUF байт читается из регистра приемника.

Прием и выдача байта данных начинается с младшего разряда и заканчивается старшим разрядом. Для разрешения приема необходимо установить 1 в разряде REN регистра управления SCON .

Последовательный порт может быть запрограммирован на один из четырех режимов приема/передачи путем программирования разрядов SМ0 и SM1 регистра SCON. Во всех четырех режимах передача инициируется любой командой, которая использует SBUF в качестве регистра назначения (выполняет операцию "Запись в SBUF"). Прием в режиме 0 инициируется одновременным выполнением условий REN=l и RI=0 (REN и RI - разряды регистра управления SCON). В остальных режимах прием инициируется приходом старт-бита (нулевой уровень) при REN=l.

В режиме 0 последовательный порт работает как восьмиразрядный сдвиговый регистр. При этом 8 бит информации в последовательном коде принимаются и передаются через двунаправленный вывод RxD. На выводе ТхD формируется сигнал синхронизации сдвигов.

Скорость (частота) приема/передачи в режиме 0 постоянна и составляет fXTAL/12, где fXTALl - частота синхронизации микроконтроллеров семейства MCS-51.

Структурная схема последовательного порта и его временные диаграммы, в режиме 0, показаны на рис. 1.23, а, б соответственно.

 

                  

        Рис. 1.23, а. Структурная схема УАПП в режиме 0

 

Все изображенные на рис. 1.23, б сигналы за исключением RxD и ТхD являются внутренними сигналами микроконтроллеров MCS-51.

Передача начинается любой командой, которая использует SBUF в качестве регистра назначения (выполняет операцию "запись в SBUF").

При выполнении такой команды в фазе S6P2 вырабатывается внутренний импульс ЗАПИСЬ В SBUF, по которому предназначенный к передаче байт записывается в регистр сдвига передатчика и запускается блок управления передачей.

Рис. 1.23, б. Временные диаграммы работы УАПП в режиме 0.

                                                                                                                            Внутренняя система тактирования микроконтроллеров организована так, что между сигналом ЗАПИСЬ В SBUF и началом передачи проходит один полный машинный цикл, после чего вырабатывается внутренний сигнал ПОСЫЛКА, разрешающий выдачу содержимого регистра сдвига передатчика на выход RXD (вывод РЗ.0 микроконтроллера) и импульсов синхронизации сдвига (СИНХР СДВИГ на рис.2.20, б) на выход Тх0 (вывод РЗ.1 микроконтроллера). Сигнал СИНХР СДВИГ имеет низкий уровень в состояниях SЗ, S4 и S5 каждого машинного цикла и высокий уровень в состояниях S6, S1 и S2. В фазе S6P2 каждого машинного цикла, в котором сигнал ПОСЫЛКА активен, формируется внутренний импульс СДВИГ, по которому содержимое регистра сдвига передатчика сдвигается на одну позицию и на выходе RxD выставляется очередной бит передаваемой посылки. Всего формируется восемь импульсов СДВИГ, после чего блок управления передачей снимает сигнал ПОСЫЛКА и устанавливает флаг прерывания передатчика TI (разряд в регистре SCON). Оба эти действия выполняются в фазе S1P1 10-го машинного цикла после сигнала ЗАПИСЬ В SBUF.

Прием начинается при одновременном выполнением двух условий: REN=l и RI=0. В фазе S6P2 следующего машинного цикла блок управления приемом вырабатывает внутренний сигнал ПРИЕМ, разрешающий выдачу импульсов СИНХР СДВИГ на выход микроконтроллера TxD. Импульсы СИНХР СДВИГ меняют свое состояние в фазах SЗР1 и S6P1. Биты принимаемой посылки через вход RxD поступают на регистр сдвига приемника. Состояние входа RxD опрашивается в фазе S5P2. В фазе S6P2 каждого машинного цикла, в котором сигнал ПРИЕМ активен, формируется внутренний импульс СДВИГ и содержимое регистра сдвига приемника сдвигается влево на одну позицию. Значение, которое при этом записывается в его крайний правый разряд, является значением сигнала на входе RxD, полученным в фазе S5P2 этого же машинного цикла. Всего формируется восемь импульсов СДВИГ, после чего блок управления приемом формирует сигнал загрузки содержимого регистра сдвига приемника в SBUF. В фазе S1P1 10-го машинного цикла после записи в SCON, сбросившей RI в 0, сигнал ПРИЕМ сбрасывается и устанавливается флаг прерывания приемника RI (бит в регистре SCON).

Для осуществления передачи байта данных достаточно занести его в буфер данных SBUF, как это показано в примере:

MOV SCON, #0 ;настроить последовательный порт на передачу в                                                                              синхронном режимеMOV SBUF, A       ;передать содержимое аккумулятора по послед. портуJNB TI, $                 ; подождать окончания передачиMOV SBUF, #56H  ; передать по последовательному порту число 56hJNB TI, $                 ; подождать окончания передачи

Для осуществления приёма байта данных достаточно настроить порт на приём в синхронном режиме работы и обнулить флаг приёма RI, как это показано в примере:

;Настроить режим работы последовательного порта---------------------------------MOV SCON,#00010000b ;настроить последовательный порт на нулевой режим работы:    ;| | | | | | | |    ;| | | | | | |+----------;обнулить флаг приёмника RI    ;| | | | | |+-----------;обнулить флаг передатчика TI    ;| | | | |+------------;обнулить девятый бит приёмника RB8    ;| | | |+-------------;обнулить девятый бит передатчика TB8    ;| | |+---------------;разрешить работу приёмника    ;| |+----------------;в синхронном режиме не имеет значения    ;++----------------;включить синхронный режим работы оследовательного                                      ;порта;Так как предыдущая команда обнуляет флаг RI, то с этого момента начинается приём байта--------------------------------------------------------------------   JNB RI, $                        ;подождать окончания приёма байта по                                                     ;последовательному порту      MOV A,SBUF                ;и скопировать его в аккумулятор

В режиме 1 прием/передача данных осуществляется в формате восьмиразрядного УАПП. Через TxD передаются, а через RxD принимаются 10 бит: старт-бит (0), 8 бит данных и стоп-бит (1). При приеме стоп-бит заносится в бит RB8 peгиcтpa SCON. Скорость (частота) приема/передачи определяется частотой переполнений Таймера/Счетчика 1 fOV

Структурная схема последовательного порта и его временные диаграммы, в режиме 1 показаны на рис. 1.24, а, б.

В зависимости от состояния бита SMOD peгиcтpa PCON частота f1=foУ при SMOD=l и fl=f0y/2 при SMOD=0. Частота f1 делится на 16 для получения сигналов синхронизации передачи СИНХР Тх и приема СИНХР Rx.

 

      Рис. 1.24, а. Структурная схема УАПП в режимах 1,2,3.

 

В зависимости от состояния бита SMOD peгиcтpa PCON частота f1=f при SMOD=l и fl=f0y/2 при SMOD=0. Частота f1 делится на 16 для получения сигналов синхронизации передачи СИНХР Тх и приема СИНХР Rx.

Передача инициируется любой командой, использующей SBUF в качестве peгиcтpa назначения, в который производится запись. Вырабатываемый при этом внутренний импульс микроконтроллера ЗАПИСЬ В SBUF загружает предназначенный к передаче байт в младшие 8 разрядов peгиcтpa сдвига передатчика и инициирует начало работы блока управления передачей. В режиме 1 peгиcтp сдвига передатчика имеет 9 разрядов и в его 9-й разряд по импульсу ЗАПИСЬ В SBUF заносится "1" (стоп-бит).

Реально передача начинается в фазе SlP1 машинного цикла, следующего за ближайшим после ЗАПИСЬ В SBUF переполнением делителя на 16 в цепи сигнала СИНХР Тх (рис. 1.25). Таким образом, начало передачи синхронизировано делителем на 16, а не импульсам ЗАПИСЬ В SBUF. Период сигнала СИНХР Тх (синхронизация передачи) определяет время, в течение которого выдаваемый бит присутствует на выходе TxD (время трансляции бита).

 Передача начинается установкой активного (для режима 1 низкого уровня) внутреннего сигнала микроконтроллера ПОСЫЛКА, появление которого вызывает выдачу на выход TxD уровня старт-бита (ноль). После этого через время трансляции одного бита становится активным внутренний сигнал микроконтроллера ДАННЫЕ, который разрешает выдачу содержимого регистра сдвига передатчика на выход TxD (вывод Р3.0 микроконтроллера). При появлении активного сигнала ДАННЫЕ старт-бит на выходе TxD сменяется битам D0 регистра сдвига передатчика. По окончании времени трансляции бита D0 формируется первый внутренний импульс MCS-51 СДВИГ, по которому содержимое peгиcтpa сдвига передатчика сдвигается на один разряд и бит D0 на выходе TxD заменяется битам D1. Всего формируется 9 импульсов СДВИГ, в результате чего на выход TxD выдаются 8 бит данных и стоп-бит. По окончании выдачи всех бит посылки блок управления передачей устанавливает, как показано на рис.3б, флаг прерывания передатчика Т1 и снимает сигналы ПОСЫЛКА и ДАННЫЕ. Прием начинается при обнаружении перехода сигнала на входе RxD из "1" в "0". Для отслеживания такого перехода вход RxD аппаратно опрашивается с частотой fl (рис. 1.25, а). Когда переход сигнала на входе RxD из "1" в "0" обнаружен, немедленно сбрасывается счетчик-делитель на 16 в цепи сигнала СИНХР Rx (рис. 1.25, а).

В результате чего происходит совмещение моментов переполнения этого счетчика-делителя (импульсы СИНХР Rx на рис.2.21, б) с границами смены бита в принимаемой посылке на входе RxD.

Шестнадцать состояний счетчика-делителя делят время, в течение которого каждый бит принимаемой посылки присутствует на входе RxD, на 16 фаз, с 1-й по 16-ю для каждого бита.

 

Рис. 1.25, б. Временная диаграмма работы УАПП в режиме 1.

 

 

В фазах 7, 8 и 9 специальные устройства микроконтроллера, бит-детектор, считывает с входа RxD 3 значения принимаемого бита, по мажоритарному принципу "2 из 3-х" выбирает из них одно и падает его на вход регистра сдвига приемника. Блок управления приемом при этом формирует внутренний импульс микроконтроллера СДВИГ, в результате чего содержимое регистра сдвига приемника сдвигается на один разряд и принятый бит заносится в регистр сдвига приемника. Всего формируется 10 импульсов СДВИГ, а регистр сдвига приемника в режиме 1 является 9-разрядным. Поэтому после 10-го импульса СДВИГ в регистре сдвига приемника находятся биты данных D0-D7 и стоп-бит. После 10-го импульса СДВИГ блок управления приемам загружает данные из регистра сдвига приемник, а в SBUF, загружает стоп-бит из регистра сдвига приемника в разряд RB8 регистра SCON и устанавливает флаг прерывания приемника RI. Сигнал загрузки SBUF, RB8 и установки RI вырабатывается блоком управления приемам только в том случае, если в момент генерации последнего импульса СДВИГ одновременно выполняются следующие условия:

1.RI=0 и 

2. Либо SM2=0, либо принятый стоп-бит равен "1".

Если хотя бы одно из этих условий не выполняется, принятая посылка безвозвратно теряется, а флаг RI не устанавливается. Если оба приведенных условия выполнены, стоп-бит поступает в RB8, восемь бит данных поступают в SBUF и устанавливается флаг RI. В это же время, независимо от выполнения приведенных выше условий, последовательный порт вновь начинает отслеживание перехода сигнала из "1" в "0" на входе RxD.

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

Так как для последовательного порта требуется таймер, то, кроме настройки последовательного порта, при помощи регистра выбора режима работы таймеров TMOD настраивается таймер T1. Эта настройка тоже производится при помощи записи двоичной константы.

Скорость работы последовательного порта настраивается записью константы 0FDh в старший байт таймера T1.

Программа приёма одного байта по последовательному порту приведена ниже:

;Настроить режим работы последовательного порта---------------------------------MOV SCON,#01110000b       ;настроить последовательный порт на                                                ;первый режим работы                                                                         ;| | | | | | | |    ;| | | | | | | +-------;обнулить флаг приёмника RI    ;| | | | | |+---------;обнулить флаг передатчика TI    ;| | | | |+-----------;обнулить девятый бит приёмника RB8    ;| | | |+------------;обнулить девятый бит передатчика TB8    ;| | |+--------------;разрешить работу приёмника    ;| |+------------;проверять ошибку кадра (приём нулевого бита на месте                                ;стоп-бита)              ;++-------------;включить асинхронный режим работы последовательного                                 ;порта;Настроить режим работы таймера T1 ---------------------------------------------------ANL TMOD,#00001111b  ;подготовить таймер T1 к настройке                                                  ;(таймер T0 не трогать)ORL TMOD,#00100000b   ;перевести таймер T1 во второй режим                                                   ;работы (таймер T0 не трогать)                                          ;| | | |        ;| |++--------------------;перевести таймер T1 в режим автозагрузки                                          ;|+-----------------------;синхронизироваться от внутреннего генератора                                                ;+------------------------;запретить управление таймером от вывода INT1;Настроить таймер на генерацию 3-x микросекундного интервала времени---- MOV TH0, #fdh                 ;загрузить старший байт таймераMOV TL0, #fdh                 ;загрузить младший байт таймераSETB TR1                           ;включить таймер 1;******************************************************************;РАБОТА С ПОСЛЕДОВАТЕЛЬНЫМ ПОРТОМ;****************************************************************** JNB RI, $                         ;подождать окончания приёма байта по                                                  ;последовательному порту MOV A, SBUF                 ;и скопировать его в аккумулятор

Режимы 2 и 3 – это режимы 9-ти разрядного УАПП с постоянной (режим 2) и переменной (режим 3) скоростью обмена. В этих режимах 11 бит передаются/принимаются соответственно через выводы TxD/RxD в следующей последовательности: старт-бит, 9 бит данных, стоп-бит. 9-ый бит данных Режимы 2 и 3 - это режимы 9-разрядного УАПП с постоянной (режим 2) и переменной, (режим З) скоростью обмена. В этих режимах 11 бит передаются/принимаются при передаче определяется содержимым разряда ТВ8 регистра SCON. При приеме 9-й бит данных заносится в бит RB8 регистра SCON.

Скорость (частота) приема/передачи в режиме 2 программно настраивается на одну из двух возможных величин: fXTAL/32 и fXTAL/64, где fXTAL - частота синхронизации MCS-51. В режиме 3 скорость (частота) приема/передачи определяется частотой переполнений Таймера/Счетчика 1 fov.

Различие в скорости (частоте) приема/передачи является единственным отличием между режимом 2 и режимом 3. Во всем остальном эти два режима полностью идентичны.

На рис. 1.26 показаны временные диаграммы, иллюстрирующие работу последовательного порта в режимах 2 и З.

 

           

      Рис. 1.26. Временные диаграммы работы УАПП в режимах 2 и 3.

 

Передача инициируется любой командой, использующей SBUF в качестве регистра назначения (выполняющей операцию "Запись в SBUF"). Вырабатываемый при этом внутренний импульс микроконтроллера ЗАПИСЬ В SBUF загружает в младшие восемь разрядов регистра сдвига передатчика предназначенный к передаче байт и инициирует начало работы блока управления передачей. Так же, как и в режиме 1, в режимах 2 и 3 регистр сдвига передатчика имеет 9 разрядов. По импульсу 3АПИСЬ В SBUF в 9-й разряд регистра сдвига передатчика записывается значение бита ТВ8 регистра SCON. Передача начинается в фазе S1P1 машинного цикла, следующего за ближайшим после ЗАПИСЬ В SBUF переполнением делителя на 16 в цепи сигнала СИНХР Тх (рис. 1.26). Период сигнала СИНХР Тх (синхронизация передачи) определяет время, в течение которого выдаваемый бит присутствует на выходе TxD (время трансляции бита). Внутренние сигналы MCS-51 ПОСЫЛКА, ДАННЫЕ и СДВИГ по функциональному назначению и формированию в режимах 2 и 3 идентичны этим же сигналам в режиме 1. В отличие от режима 1 в режимах 2 и 3 на выход TxD выдается девять бит данных: D0-D7 и ТВ8. После первого импульса СДВИГ в освободившийся 9-й разряд регистра сдвига передатчика заносится "1" (стоп-бит). Всего формируется 9 импульсов СДВИГ, в результате чего все биты регистра сдвига передатчика последовательно выдаются на выход TxD. По окончании выдачи всех бит посылки блок управления передачей устанавливает, как показано на рис. 1.26, флаг прерывания передатчика ТI и снимает сигналы ПОСЫЛКА и ДАННЫЕ.

Прием начинается при обнаружении перехода сигнала на входе RxD из "1" в "0". Работа последовательного порта и блока управления приемом в режимах 2 и 3 полностью идентична режиму 1, включая мажоритарный отбор по принципу "2 из 3-х" значения каждого принимаемого бита с помощью бит-детектора. Регистр сдвига приемника в режимах 2 и 3 является 9-разрядным. Поэтому после 10-го импульса СДВИГ (рис. 1.26) в регистре сдвига приемника находятся 9 бит принятой посылки (обозначены на рис. 5 D0-D7 и RB8). После 10-го импульса СДВИГ блок управления приемом загружает биты D0-D7 из регистра сдвига приемника в. SBUF, переписывает 9-й разряд регистра сдвига приемника в бит RB8 регистра SCON и устанавливает флаг прерывания приемника RI в регистре SCON. Сигнал загрузки SBUF, RB8 и установки RI вырабатывается блоком управления приемом тогда и только тогда, когда в момент генерации последнего импульса СДВИГ выполняются одновременно следующие условия:

1.RI=0 и

2. Либо SM2=0, либо принятый 9-й бит данных равен 0.

Если хотя бы одно из этих условий не выполняется, принятая посылка безвозвратно теряется, а флаг RI не устанавливается. Если оба приведенных условия выполнены, принятый 9-й бит данных поступает в RB8, биты D0-D7 записываются в SBUF и устанавливается флаг RI. Независимо от выполнения приведенных выше условий последовательный порт вновь начинает отслеживание перехода сигнала из "1" в "0" на входе RxD. Особо необходимо отметить, что значение принятого стоп-бита в режимах 2 и 3 не влияет на SBUF, RB8 или RI.

Скорость (частота пересылки битов) последовательного обмена Fn в зависимости от режима работы последовательного порта определяется либо частотой синхронизации MCS-51 fXTAL (режимы 0 и 2), либо частотой переполнения Таймера/Счетчика 1 fOY (режимы 1 и 3).

В режиме 0 частота пересылки одного бита (скорость последовательного обмена) максимальна. Она постоянна и составляет:

                                             F no = fXTAL/12.

При необходимости работать с переменной скоростью используется режим 2 последовательного порта. В этом режиме скорость последовательной передачи зависит от состояния бита SMOD регистра SCON:

                             Fn2 = (2SMOD/64) *fXTAL

    Т.е. при SMOD=0 Fn2=fXTAL/64, а при SMOD = l Fn2=fXTAL/32. По сигналу сброс бит SMOD устанавливается в ноль. Для задания бита SMOD используются команды с байтовой адресацией, например,                 команда MOV 87Н, #80Н.

В режимах 1, 3 также имеется возможность изменить скорость последовательной передачи:

                Fnl = F=(2SМОD /32) *fOY, где fOY - частота переполнений Т/С 1.

Для использования Т/С 1 в качестве источника для задания частот Рn1 и F

необходимо: .

1) запретить прерывания от Т/С 1;

2) запрограммировать работу Т/С 1 в качестве таймера или в качестве счетчика, установив при этом для него один из режимов 0, 1 или 2;

3) запустить Т/С 1 на счет.

Обычно для синхронизации последовательного порта таймер Т/С1 включается в режим автозагрузки (режим 2).

В этом случае скорость последовательного обмена определяется по формуле:

                     Fn1=F=(2SМОD*fXTAL)/ (32* 12* [256-(ТН)]),

где (ТН - десятичный код содержимого ТН1. Если необходим последователь­ный обмен с очень низкой скоростью, то можно использовать Т/С 1 в режиме 16 ­разрядного таймера (режим 1), разрешив при этом прерывание от Т/С 1 с целью перезагрузки TL1/TH1 в подпрограмме обслуживания прерывания.

Режимы 2 и 3 последовательного порта позволяют организовать работу микроконтроллеров семейства MCS-51 в многопроцессорных системах, использующих для обмена информацией между микроконтроллерами разделяемый моноканал (коаксиальный кабель, витая пара, оптоволокно). В этих режимах принимается 9 бит данных и 9-й принятый бит записывается в бит RB8 peгиcтpa SCON. При этом, если бит SM2 peгиcтpa SCON установлен в "1", то после приема посылки флаг прерывания приемника RI будет установлен только в том случае, если RB8=1. Эту особенность работы последовательного порта в режимах 2 и 3 можно использовать для организации межконтроллерного обмена следующим образом.

Когда ведущий микроконтроллер хочет передать блок данных одному из ведомых микроконтроллеров, она выдает в моноканал посылку с адресом ведомого, которому будет передан блок данных. Адресная посылка отличается от посылки с данными тем, что в адресной посылке 9-й бит данных равен "1", а в посылке с данными - "0". Таким образом, при SM2=1 ни один ведомый микроконтроллер не будет реагировать на посылку с данными, но все ведомые среагируют на адресную посылку. Проанализировав полученный адрес, адресуемый микроконтроллер сбрасывает свой бит SM2, а остальные оставляют его без изменения и вновь переходят к выполнению прерванной программы. После этого ведущий микроконтроллер может начинать выдачу в моноканал блока данных, на посылки которого будет реагировать только микроконтроллер, у которого SM2=0.

Бит SM2 никак не участвует в работе последовательного порта в режиме 0. В режиме 1 бит SM2 может использоваться для контроля правильности принятого стоп-бита: в режиме 1, если SM2=1, флаг прерывания приемника RI не будет установлен, если принятый стоп - бит не равен "1".

В табл.1.10 приводится описание способов настройки Т/С1 для получения типовых частот передачи данных через УАПП.

 Таблица 1.10. Настройка таймера 1 для управления частотой работы УАПП

Частота приема/передачи (BAUD RATE)

Частота резонатора, МГц

SMOD

Таймер/счетчик 1

C/T Режим (MODE) Перезагружаемое число
Режим 0, макс: 1 МГц 12 X X X X
Режим 2, макс: 375 кГц 12 1 X X X
Режимы 1, 3: 62.5 кГц 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 0E8H
137.5 Гц 11.059 0 0 2 1DH
110 Гц 6 0 0 2 72H
110 Гц 12 0 0 1 0FEEBH

В нулевом режиме последовательный порт работает как обыкновенный сдвиговый регистр. Это позволяет использовать последовательный порт для увеличения количества внешних выводов микросхемы. Использование сдвиговых регистров для этой цели показано на рисунках 1.27 и 1.28.

Рис. 1.27. Использование нулевого режима работы последовательного порта в качестве расширителя портов.

Рис. 1.28. Использование нулевого режима работы последовательного порта для ввода информации.

 


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 266; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.04 с.)
Главная | Случайная страница | Обратная связь