Последовательный порт МК51

 

Программный доступ к регистрам приемника и передатчика последовательного интерфейса МК51 осуществляется обращением к регистру SBUF. При записи в SBUF байт загружается в регистр передатчика, при чтении SBUF байт читается из регистра приемника.

Управление работой последовательного порта осуществляется с помощью регистра SCON, все разряды которого программно доступны по записи и чтению (рис. 7.1):

 

 

Порт может работать в следующих четырех режимах.

Режим 0. Информация передается (младшими битами вперед) и принимается через вход приемника RxD (P3.0). Через выход передатчика TxD (P3.1) выдаются импульсы синхронизации, стробирующие каждый передаваемый или принимаемый бит информации. Формат посылки — 8 бит. Частота приема и передачи — fBQ/12. Передача начинается любой командой, которая использует регистр SBUF в качестве регистра назначения, прием — при сбросе флага RI (если REN=1).

Режим 1. Информация передается через выход передатчика, а принимается через вход приемника. Формат посылки — 10 бит: старт-бит (ноль), восемь бит данных и стоп-бит (единица). Частота приема и передачи задается таймером-счетчиком Т/С1.

Режим 2. Формат посылки — 11 бит (рис. 7.2): старт-бит, восемь бит данных, программируемый девятый бит и стоп-бит. Передаваемый девятый бит данных принимает значение бита ТВ8. Бит ТВ8 регистра SCON может быть программно установлен в 1 или 0, или в него можно поместить значение бита Р из регистра PSW для повышения достоверности принимаемой информации (контроль по паритету). При приеме девятый бит принятой посылки поступает в бит RB8 регистра SCON. Частота приема и передачи задается программно и может быть равна fBQ/32 (SMOD=1) или fBQ/64 (SMOD=0). Бит SMOD регистра PCON можно установить в 1 командой MOV PCON,#80H.

 

Режим 3. Полностью идентичен режиму 2, только частота приема и передачи задается (как и в режиме 1) таймером Т/С1 и равна (2SMOD/32)fOV, где fOV — частота переполнения Т/С1. Обычно для синхронизации последовательного порта Т/С1 включается в режим перезагрузки (режим 2). В этом случае fOV=fBQ/{12 [256 – – (TH1)]}. Прерывания от Т/С1 запрещаются.

 

Передача инициируется любой командой, использующей регистр SBUF в качестве регистра назначения. На выход TxD выдается девять бит данных: D0-D7 и ТВ8. По окончании передачи устанавливается флаг прерывания передатчика TI. Прием начинается при обнаружении перехода сигнала на входе RxD из 1 в 0. В фазах 7, 8 и 9 специальное устройство МК бит-детектор считывает со входа RxD значения принимаемого бита и по мажоритарному принципу выбирает одно из них. По окончании приема устанавливается флаг прерывания приемника RI.

 

Назначение остальных битов регистра SCON:

REN — разрешение приема последовательных данных;

TI — флаг прерывания передатчика. Устанавливается аппаратно в конце выдачи 8-го бита в режиме 0 или в начале стоп-бита в других режимах. Сбрасывается программно;

RI — флаг прерывания приемника. Устанавливается аппаратно в конце времени приема 8-го бита в режиме 0 или через половину интервала стоп-бита в других режимах при SM2=0;

SM2 в режиме 0 должен быть равен 0. При SM2=1 в режиме 1 флаг RI не активизируется, если не принят стоп-бит, а в режимах 2 и 3 — если 9-й принятый бит данных равен 0.

Пример 18.Разработать программу инициализации последовательного порта для работы со скоростью 110 бод (бит/с) при частоте кварца 6 МГц, программы приема и выдачи символа.

 

; Программирование режимов таймера и последовательного порта

 

CLR TR1 ; Останов таймера 1

MOV TH1,#72H ; Установка скорости пересылки

MOV SCON,#11011100B ; Режим 9-разрядной посылки

MOV TMOD,#00100000B ; Режим автозагрузки Т/С1

SETB TR1 ; Запуск таймера 1

; Прием символа из внешнего устройства в аккумулятор

 

JNB RI,$ ; Ожидание завершения приема

MOV A,SBUF ; Чтение символа в аккумулятор

CLR RI ; Очистка флага приема

 

; Передача символа из аккумулятора внешнему устройству

 

JNB TI,$ ; Ожидание окончания передачи

CLR TI ; Очистка флага передачи

MOV SBUF,A ; Выдача символа

 

Пример 19. Организовать асинхронный программный обмен данными в последовательном формате (строки символов) между двумя микроконтроллерами со скоростью 2400 бод (бит в секунду). Каждый символ передается последовательностью семи информационных бит и бита контроля четности. Разработать подпрограммы передачи и приема символа. Режим прерываний не использовать.

Последовательный порт настраиваем на режим 1 (SM0=0, SM1=1) с возможностью принимать все сообщения (SM2=0, REN=1). Флаг TI искусственно установим в единицу, обеспечивая начальную готовность регистра SBUF для вывода. Таким образом, в регистр SCON следует загрузить управляющее слово 01010010В.

Таймер 1 будем использовать в режиме 2 (8 бит с автоперезагрузкой) в качестве генератора скорости передачи данных. Для получения частоты 2400 бод в старший регистр таймера необходимо загрузить число 0F4H (дополнительный код числа минус 12) при частоте кварца 11059 кГц.

Требуемый режим работы таймера задаем записью в регистр TMOD управляющего слова 00100000В. Программный запуск таймера осуществим командой SETB TR1.

Таким образом, инициализацию (выбор необходимой конфигурации) таймера и последовательного порта реализуем с помощью следующей последовательности команд:

 

CLR TR1

MOV TMOD,#00100000B

MOV SCON,#01010010B

MOV TH1,#0F4H

SETB TR1

Передачу символа реализует подпрограмма TBYTE. Она добавляет разряд четности к находящемуся в аккумуляторе 7-раз-рядному коду символа (код ASCII) и осуществляет передачу байта при наличии готовности последовательного порта.

 

TBYTE: MOV C,P ; Добавление разряда

CPL C ; четности в старший

MOV ACC.7,C ; бит аккумулятора

JNB TI,$ ; Ожидание разрешения

CLR TI ; передачи очередного байта

MOV SBUF,A ; Передача байта

RET

Прием символа реализует подпрограмма RBYTE. Она вводит очередной символ в аккумулятор из последовательного порта и устанавливает перенос в случае ошибки четности.

 

RBYTE: JNB RI,$ ; Ожидание готовности

CLR RI ; приемника

MOV A,SBUF ; Прием байта в аккумулятор

MOV C,P ; Установка С=1 в случае

CPL C ; ошибки передачи

ANL A,#7FH ; Выделение символа

RET








Дата добавления: 2016-01-09; просмотров: 1687;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.011 сек.