- •Часть 1. Изучение интегрированной системы mcStudio
- •Порядок работы с интегрированной системой mcStudio
- •Запуск интегрированной системы mcStudio
- •2. Написание программы на языке Ассемблер
- •Визуализация контролируемых ресурсов микроконтроллера
- •4. Выполнение симуляции программы
- •5. Создание и отладка новой программы
- •6. Загрузка ранее созданной программы
- •7. Выход из интегрированной системы mcStudio
- •8. Некоторые дополнительные возможности mcStudio
- •Часть 2. Изучение команд передачи данных
- •Задание
- •Оформление программы
- •Контрольные вопросы
- •Задание
- •Контрольные вопросы
- •Лабораторная работа № 3 Реализация функций времени. Часть 1 Введение
- •Задание
- •Контрольные вопросы
- •Лабораторная работа № 4 Реализация функций времени. Часть 2 Введение
- •Задание
- •Контрольные вопросы
- •Задание
- •Контрольные вопросы
- •Лабораторная работа № 6 Программирование последовательного порта микроконтроллера Введение
- •Задание
- •Контрольные вопросы
- •Варианты заданий
- •Контрольные вопросы
- •Особенности использования демонстрационной версии интегральной системы mcStudio
- •Библиографический список
Задание
Составить программу отображения на линейном дисплее, содержащем три семисегментных индикатора (три разряда), любых трёх десятичных чисел в диапазоне от 0 до 255, например 125. Использовать динамический способ организации интерфейса микроконтроллера с линейным дисплеем. Для управления сегментами использовать порт Р0, для выбора разряда - три вывода порта Р3. Цифры выводить с частотой 50 Гц. Вывод одной цифры обеспечить подпрограммой, вызываемой прерыванием от таймера.
Для моделирования трёх семисегментных индикаторов необходимо создать их три модели в редакторе окружения. Для этого после создания проекта зайдите в редактор окружения Файл\Редактор окружения\Внешние устройства. Затем щёлкните левой кнопкой мыши по значку с изображением семисегментного индикатора, а затем в поле Окружение. В выпавшем окне Выбор типа индикатора выберите строчку 7-сегментный индикатор и щёлкните левой кнопкой мыши по кнопке OK. В поле Окружение появится изображение индикатора в рамке из чёрных квадратиков. Перетащите его путём нажатия левой кнопки мыши в выбранное вами место поля. Затем щёлкните левой кнопкой мыши по слову (нет) в строчке Адрес. Щёлкните по кнопке, состоящей из трёх точек …, в этой же строке справа от слова (нет). Появится поле Индикатор редактирование адр…, в котором щёлкните левой кнопкой мыши по полю справа от надписи Байт 0:. Затем щёлкните левой кнопкой мыши по выпавшей надписи (вывод контроллера). В результате появятся надписи (вывод контроллера) во всех полях битов байта. Затем щёлкните левой кнопкой мыши по кнопке OK. В появившейся таблице найдите строчку Неактивная рамка и щёлкните левой кнопкой мыши по слову нет, а затем по кнопке справа и далее по слову есть. Затем найдите строчку Неактивные сегменты и щёлкните левой кнопкой мыши по слову нет, а затем по кнопке справа и далее по слову есть. Затем в поле Окружение вставьте таким же образом ещё один индикатор, а после ещё один. Разместите три индикатора с помощью мыши рядом на одной линии. После этого сохраните файл модели трёх индикаторов и вернитесь в MCStudio, щёлкнув левой кнопкой мыши Файл\Вернуться в MCStudio.
Внимание! В модели индикатора нет вывода катода, поэтому независимо от выбора знакоместа все индикаторы будут показывать одинаковые цифры.
Контрольные вопросы
Как организуется динамический вывод информации на дисплей с семисегментными индикаторами?
Чем будет отличаться от заданной программа для вывода на трехразрядный индикатор чисел от 0 до 999?
Составьте блок-схему динамического вывода информации на 5- разрядный дисплей. Какие дополнительные ресурсы микроконтроллера для этого потребуются?
Если частота обновления цифр на индикаторе задается прерыванием, поступающим от таймера, каким образом могут быть обработаны прерывания от других источников без сбоя индикации?
Лабораторная работа № 6 Программирование последовательного порта микроконтроллера Введение
Встроенный последовательный порт микроконтроллера служит для обмена данными с внешними устройствами в последовательном коде. Порт может работать в синхронном (0-й режим) и асинхронном режимах работы (1, 2, 3 режимы). В данной работе рассматривается асинхронный режим работы. Он характерен тем, что посылки состоят из последовательности байтов. При этом между байтами может быть произвольный временной интервал. Начало и конец байта определяются служебными старт- и стоп- битами. Перед стоп-битом может находиться бит, дополняющий число битов в байте до четного или нечетного количества. Байт данных вместе со служебными битами составляет кадр. При асинхронном обмене синхронизация приемника с передатчиком осуществляется во время приема одного кадра и инициируется старт-битом.
Для осуществления обмена скорость приема/передачи для микроконтроллера и внешнего устройства должна быть одинаковой (иначе, длительность бита в кадре должна быть известна детектору битов приемника). Установку скорости приема/передачи и числа битов в кадре называют инициализацией приемопередатчика. При инициализации производится установка битов в регистрах SCON, PCON, IE, TMOD. Регистр управления последовательным портом SCON предназначен для приема и хранения кода 8-битного слова, содержащего информацию о режиме работы. Имена битов регистра приведены в табл. 1.
Таблица 1
Бит |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Наименование |
SM0 |
SM1 |
SM2 |
REN |
TB8 |
RB8 |
TI |
RI |
RI – флаг запроса прерывания от приемника. Устанавливается аппаратно по окончании приема последовательного кадра, сбрасывается программно после обслуживания прерывания.
TI – флаг запроса прерывания от передатчика. Устанавливается аппаратно по окончании передачи кадра, сбрасывается программно после обслуживания прерывания.
SM0, SM1 – старший и младший биты для установки номера режима приемопередачи:
SM0 = 0, SM1 = 0 – режим 0, синхронный последовательный ввод/вывод со скоростью Fosc/12;
SM0 = 0, SM1 = 1 – режим 1, асинхронный ввод/вывод с 10-битовым кадром (старт-бит, 8 бит последовательных данных DO..D7, стоп-бит) и переменной скоростью передачи;
SM0 = 1, SM1 = 0 – режим 2, асинхронный ввод/вывод данных с 11-битовым кадром (старт-бит, 8 бит последовательных данных 00..07, служебный бит D8, стоп-бит) и фиксированной скоростью передачи Fosc/32 или Fosc/64;
SM0 = 1, SM1 = 1 – режим 3, асинхронный ввод/вывод с 11-битовым кадром (состав кадра соответствует режиму 2) с переменной скоростью передачи.
SM2 – бит запрета приема кадров с нулевым восьмым битом (D8 - 0). Устанавливается и сбрасывается программно. В режиме 0 - должен быть сброшен.
REN – бит разрешения приема последовательных данных. Устанавливается и сбрасывается программно.
ТВ8 – восьмой бит (D8) передатчика в режимах 2 и 3. Устанавливается и сбрасывается программно для задания подлежащего передаче значения служебного бита в кадре (признака информации, передаваемой в кадре).
RВ8 – восьмой бит (D8) приемника в режимах 2 и 3. Устанавливается и сбрасывается аппаратно для фиксирования принятого значения служебного бита в кадре (признака информации, принятой в кадре).
Рассмотрим режимы асинхронной работы приемопередатчика.
В режиме 1 скорость обмена (частота пересылки битов Fn1) определяется частотой переполнения таймера/счетчика 1 (Т/С1):
Fn1=(2SMOD/32)fov , (1)
где fov – частота переполнения Т/С1, SMOD – значение бита (1 или 0) в регистре PCON.
Для использования Т/С1 в качестве источника для задания частоты обмена Fn1 необходимо:
запретить прерывания от Т/С1;
запрограммировать работу Т/С1 в качестве таймера, установив для него один из режимов работы таймера 0, 1 или 2;
запустить Т/С1 на счет.
Обычно для синхронизации последовательного порта Т/С1 включается в режим автозагрузки (режим 2). В этом случае скорость последовательного обмена определяется по формуле:
Fn1 = (2SMODfBQ)/(3212[256 – (TH)]), (2)
где TH – десятичный код содержимого TH1.
Через вывод TxD (P3.1) приемопередатчик передает или с вывода RxD (P3.0) принимает 10 последовательных бит: старт-бит 0, 8 бит данных D0..D7 и стоп-бит 1. При приеме стоп-бит копируется в бит RB8 регистра SCON.
Передача инициируется любой командой, в которой получателем байта является регистр SBUF.
Прием начинается при обнаружении перехода сигнала из состояния 1 в состояние 0 на входе RxD. Все принятые 8 бит данных затем запоминаются в SBUF, и устанавливается флаг RI. После окончания приема кадра устройство управления приемом вновь начинает отыскивать переход из 1 в 0 на входе RxD. До окончания приема следующего байта ранее принятый байт должен быть считан из регистра SBUF подпрограммой обработки прерывания от последовательного порта, иначе он потеряется. В этой подпрограмме должен быть предусмотрен сброс флага RI и размещение принятого байта во внутренней или внешней памяти данных.
В режимах 2,3 кадр содержит дополнительный программируемый бит D8, который при передаче копируется из флага ТВ8 регистра SCON и является служебным битом – признаком для разделения кадров на два класса. При приеме бит D8 копируется в флаг RB8 для фиксирования класса принятого кадра.
В режиме 2 скорость передачи в зависимости от значения флага SMOD в регистре PCON может быть равна либо Fosc/32 (SMOD – 0), либо Fosc/64 (SMOD = 1). В режиме 3 так же, как в режиме 1, скорость передачи определяется частотой переполнения Т/С1. В случае SMOD = l скорость совпадает с частотой переполнения, а при SMOD = 0 скорость передачи в 2 раза меньше.
Флаги RI и TI могут осуществлять запрос на прерывание. В режимах 1, 2, 3 установка флага SM2 разрешает установку флага RI и генерации запроса на прерывание от него только при приеме кадра с D8 = l. Для режима 1 это означает контроль кадра на наличие стоп-бита. Для режимов 2 и 3 такая организация работы обеспечивает выделение кадров одного класса, в которых D8 = 1. Кадры, в которых D8 = 0, в этом случае в SBUF не записываются и теряются.
Возможность реагировать только на кадры с RB8 = 1 может быть использована при построении межмашинной магистрали управляющей распределенной системы, состоящей из нескольких микроконтроллеров MCS51, объединенных в единую сеть.
В табл. 2 приведен ряд стандартных скоростей последовательного обмена и то, как они могут быть реализованы с помощью Т/С1 в режимах 1,3.
Таблица 2
Режимы работы последовательного порта |
Скорость приема/ передачи, кБод |
fBQ, МГц |
SMOD |
Разряды TMOD
С/ТM1M0 |
TH1 |
Примечание |
Режим 2 |
Макс. 375 |
12 |
1 |
Х Х Х |
Х |
|
Режимы 1,3 |
62,5 |
12 |
1 |
0 1 0 |
FFH |
|
19,2 |
11,059 |
1 |
0 1 0 |
FDH |
|
|
9,6 |
11,059 |
0 |
0 1 0 |
FDH |
|
|
4,8 |
11,059 |
0 |
0 1 0 |
FAH |
|
|
2,4 |
11,059 |
0 |
0 1 0 |
E4H |
|
|
1,2 |
11,059 |
0 |
0 1 0 |
E8H |
|
|
0,1375 |
11,059 |
0 |
0 1 0 |
18H |
|
|
|
0,110 |
6 |
0 |
0 1 0 |
72H |
|
0,110 |
12 |
0 |
0 0 1 |
FEH |
TL1=EBH |
Прерывание от последовательного порта, если оно разрешено, вызывается установкой флага прерывания от приемника RI или флага прерывания передатчика TI в регистре SCON. В отличие от всех остальных флагов, RI и TI сбрасываются только программным путем обычно в пределах подпрограммы обработки прерывания. Стартовый адрес подпрограммы обработки прерывания (вектор прерывания) жестко фиксирован и равен 0023H. Разрешение прерывания от последовательного порта в регистре IE достигается установкой в 1 бита ES и бита общего разрешения прерываний EA.
Ниже приведен пример программы инициализации последовательного порта для работы на частоте 12 МГц со скоростью 62,5 кБод.
mov scon,#01010000b ; установка битов регистра SCON: комбинация
; SM0 = 0 и SM1 = 1 устанавливает 8-битовую
; работу приемопередатчика, REN = 1
;устанавливает разрешение приема.
mov tmod,#00100000b ;установка битов регистра TMOD: комбина- ;ция М1.1 = 1 и М1.0 = 0 устанавливает ;режим работы таймера Т/С1 с автозагрузкой ; (режим 2), когда число в регистре TH1 при ;переполнении таймера загружается в ре- ;гистр TL1. Таймер работает как 8-битовый.
mov tl1,#00h ; начальное значение TL1.
mov th1,#ffh ; число ffh для автозагрузки.
mov tcon,#40h ; установка бита tr1 в регистре TCON (разре;шение работы таймера Т/С1)
mov pcon,#10000000b ;установка бита SMOD (удвоение скорости
; передачи).
setb es ; разрешение прерываний от последовательного
;порта.
setb ea ; снятие запрета на прерывания всех типов.
