Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ_МИУС_14.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.81 Mб
Скачать

Лабораторная работа Последовательный порт однокристальных микроконтроллеров семейства Intel 8051

1. Цель работы

Изучить особенности и режимы работы последовательного порта однокристальных микроконтроллеров семейства Intel 8051.

2. Общие сведения

Очень часто микроконтроллеры работают не обособленно, а в составе сложной МП-системы. Они занимаются сбором и предварительной обработкой информации, которая затем передается на более высокий уровень (например, в технологическую микро-ЭВМ).

Производить параллельный обмен в такой ситуации неудобно – требуется использование множества линий связи. Поэтому большинство ЭВМ имеют в своем составе средство обмена по последовательному интерфейсу – последовательный порт.

Микроконтроллеры семейства Intel 8051 имеют в своем составе универсальный асинхронный приёмопередатчик - UART (Universal Asynchronous Receiver-Transmitter). Передача информации производится последовательным кодом (младшим битом вперед), в дуплексном режиме обмена. В резидентной памяти программ для последовательного порта зарезервирован адрес вектора прерывания - 23H. Работой UART управляют два регистра специальных функций. Регистр управления/статуса SCON и специальный буферный регистр SBUF.

Регистр SBUF представляет собой два независимых регистра: буфер приёмника и буфер передатчика. Загрузка байта в SBUF немедленно вызывает начало процесса передачи через последовательный порт (используется внешний вывод TхD). Когда байт считывается из SBUF, это значит, что его источником является буфер приёмника последовательного порта (используется вход приемника RхD). Данные передаются/принимаются младшим битом вперед. Последовательный порт может работать в четырех различных режимах.

Регистр SCON предназначен для управления и контроля состояния UART. Регистр содержит управляющие биты выбора режима работы, девятый бит передаваемых данных, а также биты прерывания.

Таблица 1 – Формат регистра управления SCON

Символ

Разряд

Имя и назначение

SM0

SCON.7

Биты 0 и 1 управления режимом работы UART.

Устанавливаются/сбрасываются программно.

SM1

SCON.6

SM2

SCON.5

Бит управления режимом UART. Устанавливается программно для запрета приёма сообщения, в котором девятый бит равен 0

REN

SCON.4

Бит разрешения приёма. Устанавливается/сбрасывается программно для разрешения/запрета приёма последовательных данных.

TB8

SCON.3

Передача бита 8. Устанавливается/сбрасывается программно для задания девятого передаваемого бита

RB8

SCON.2

Приём бита 8. Устанавливается/сбрасывается аппаратно для фик­сации девятого принимаемого бита

TI

SCON.1

Флаг прерывания передатчика. Устанавливается аппаратно при окончании передачи. Сбрасывается программно после обслуживания прерывания

RI

SCON.0

Флаг прерывания приёмника. Устанавливается аппаратно по окончании приема. Сбрасывается программно после обслуживания прерывания

Таблица 2 – Выбор режима работы UART

SM0

SM1

Режим работы

0

0

Режим 0. Сдвигающий регистр ввода/вывода. Фиксированная скорость передачи

0

1

Режим 1. Режим UART - 8 бит. Изменяемая скорость передачи

1

0

Режим 2. Режим UART - 9 бит. Фиксированная скорость передачи

1

1

Режим 3. Режим UART - 9 бит. Изменяемая скорость передачи

Режим 0 - восемь бит данных передаются и принимаются через вход приёмника RхD. Выход передатчика TхD используется для выдачи импульсов синхронизации, которые сопровождают каждый бит. За один машинный цикл передаётся один бит. Частота передачи равна FРЕЗ/12.

Режим 1 - передаются или принимаются 10 бит данных в формате:

старт-бит=0, 8 бит данных, стоп-бит=1

Скорость приёма/передачи задаётся таймером.

Режим 2 - передаются или принимаются 11 бит данных в формате:

старт-бит=0, 8 бит данных, программируемый девятый бит В8, стоп-бит=1

Девятый бит может использоваться для повышения достоверности путём контроля чётности, в него можно записать значение признака паритета из PSW. Частота приёма/передачи выбирается программно и может быть равна FРЕЗ/32 или FРЕЗ/64 частоты резонатора в зависимости от состояния бита SMOD в регистре PCON.

Режим 3 - совпадает с режимом 2, но частота приёма/передачи задаётся таймером.

Пример. Произвести циклический вывод через последовательный порт кода символа "*" при рабочей частоте микроконтроллера 11,059 МГц и скорости передачи данных 1200 Бод. Каждый цикл должен сопровождаться стробирующим сигналом на линии Р1.1 микроконтроллера длительностью 200 мкс.

Для циклической передачи данных с произвольной скоростью наиболее часто используется Режим 1. Учитывая особенности архитектуры и системы команд микроконтроллера алгоритм работы программы можно реализовать несколькими способами. Но в любом случае необходимо выполнить следующие действия по настройке и организации работы последовательного порта.

  1. Выбрать для последовательного порта Режим 1, установив соответствующие биты регистра SCON. Для этого необходимо записать в регистр SCON число 0100 0000В – 40h.

  2. Выбрать для таймера режим 2 с автоперезагрузкой при помощи соответствующих битов в регистре TMOD, записав число 0010 0000В – 20h.

  3. Запрограммировать таймер Т1 на заданную скорость передачи данных, загрузив в старший регистр таймера TH1 соответствующее число.

Частота передачи данных последовательного порта задается таймером T1 в режиме с автоперезагрузкой и определяется выражением:

F= 2SMODFРЕЗ/(32х12х(256 —ТН1)),

где SMOD – состояние управляющего бита SMOD в регистре PCON, для примера SMOD=0;

FРЕЗ – частота кварцевого резонатора, для примера FРЕЗ = 11,059 МГц;

ТН1 – содержимое регистра старшего байта таймера T1, для примера TH1= E8h=232.

F= 20 x 11,059х106/(32х 12(256-232))=11,059х106/(384х24)=1,119 кГц.

Таким образом, при скорости передачи данных 1200 Бод и частоте 11,059 МГц необходимо загрузить в регистр TH1 число 0Е8h (см. таблицу П1).

  1. Включить таймер Т1, установив бит TR1.

  2. Записать в буферный регистр последовательного порта SBUF код символа "*" – 2Ah (см. таблицу П2).

  3. Для организации циклического вывода данных необходимо после каждой передачи выполнять сброс флага передатчика TI и записывать код символа в буфер.

Вариант программы 1 использует проверку состояния флага передатчика TI, который устанавливается аппаратно по окончании передачи. Формирование стробирующего сигнала на линии Р1.1 длительностью 200 мкс реализовано при помощи подпрограммы STROBE_200.

Счетчик в регистре R1 организован таким образом, чтобы при рабочей частоте 11,059 МГц обеспечить задержку 200 мкс, т.е. на время необходимое для выполнения 92 двухцикловых команд DJNZ (см. расчет в комментарии). Символ $ используется в программе для обозначения автоматического перехода на ту же командную строку. При другой частоте или длительности строб-сигнала число в счетчике R1 нужно изменить.

START: CLR P1.1 ;сброс сигнала на линии P1.1

MOV SCON,#40h ;выбор Режима 1 для последовательного порта

MOV TMOD,#20h ;выбор Режима 2 для таймера Т1

MOV TH1,#0E8h ;выбор скорости передачи данных 1200Бод при F=11,059МГц

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

M1: MOV SBUF,#’*’ ;загрузка в буфер последовательного порта символа '*’

CALL STROBE_200

WAIT: JNB TI, WAIT ;цикл ожидания окончания передачи, проверка флага TI

CLR TI ;сброс флага прерывания передатчика

JMP M1 ;переход к новому циклу передачи данных

STROBE_200: SETB P1.1 ;формирование сигнала на линии P1.1

MOV R1,#92 ;длительность сигнала 92x2x(12/11,059)=200

DJNZ R1,$ ;проверка счетчика R1

CLR P1.1 ;сброс сигнала на линии P1.1

RET ;выход из подпрограммы

END

В варианте программы 2 по адресу вектора 23H размещена команда перехода к подпрограмме обслуживания прерывания последовательного порта Serial. Для организации обслуживания прерывания необходимо в регистр IE записать значение 1001 0000В – 90h, сняв блокировку прерываний битом ЕА, и разрешив прерывание последовательного порта битом ES.

JMP START

ORG 23h ;организация обслуживания прерывания

JMP SERIAL ;от последовательного порта

START: CLR P1.1 ;сброс сигнала на линии P1.1

MOV SCON,#40h ;выбор Режима 1 для последовательного порта

MOV TMOD,#20h ;выбор Режима 2 для таймера Т1

MOV TH1,#0E8h ;выбор скорости передачи данных 1200Бод при F=11,059МГц

MOV IE, #90H ;разрешение прерывания от последовательного порта

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

MOV SBUF,#'*’ ;загрузка в буфер последовательного порта символа ‘*’

JMP $ ;цикл ожидания окончания передачи, проверка флага TI

SERIAL: CLR TI ;сброс флага прерывания передатчика

MOV SBUF,#'*' ;загрузка в буфер последовательного порта символа '*'

CALL STROBE_200 ;вызов подпрограммы формирования 200 мкс

RETI ;выход из прерывания

STROBE_200: SETB P1.1 ;установка сигнала на линии P1.1

MOV R1,#92 ;формирование длительности сигнала 92x2x(12/11,059)=200

DJNZ R1,$ ;проверка счетчика R1

CLR P1.1 ;сброс строб-сигнала на линии P1.1

RET ;выход из подпрограммы

END