- •Часть 1. Изучение интегрированной системы mcStudio
- •Порядок работы с интегрированной системой mcStudio
- •Запуск интегрированной системы mcStudio
- •2. Написание программы на языке Ассемблер
- •Визуализация контролируемых ресурсов микроконтроллера
- •4. Выполнение симуляции программы
- •8. Некоторые дополнительные возможности mcStudio
- •5. Создание и отладка новой программы
- •6. Загрузка ранее созданной программы
- •7. Выход из интегрированной системы mcStudio
- •Часть 2. Изучение команд передачи данных
- •Задание
- •Оформление программы
- •Контрольные вопросы
- •Задание
- •Контрольные вопросы
- •Лабораторная работа № 3 Реализация функций времени. Часть 1 Введение
- •Задание
- •Контрольные вопросы
- •Лабораторная работа № 4 Реализация функций времени. Часть 2 Введение
- •Задание
- •Контрольные вопросы
- •Задание
- •Контрольные вопросы
- •Лабораторная работа № 6 Программирование последовательного порта микроконтроллера Введение
- •Задание
- •Контрольные вопросы
- •Варианты заданий
- •Контрольные вопросы
- •Особенности использования демонстрационной версии интегральной системы mcStudio
- •Библиографический список
Задание
Составить программу, в которой основная программа должна инвертировать бит Р1.0, а в подпрограмме обработки прерывания производиться измерение длительности импульса прерывания (нулевого уровня) на входе Р3.2. Программа должна обеспечивать возможность неоднократного (до 5 раз) измерения длительности импульса. Результат каждого измерения разместите в регистрах R1 и R2.
Для задания длительности импульса прерывания используйте модель кнопки, соединённой с линией Р3.2.
Модернизировать предыдущую программу, чтобы учесть возможность переполнения таймера с размещением каждого результата в регистрах R0, R1 и R2.
Составьте программу измерения длительности импульса внешнего генератора, используя файл модели генератора.
Контрольные вопросы
Что такое прерывание?
Какие источники прерываний имеются в MCS51?
Каким образом разрешаются и запрещаются прерывания?
Каким образом устанавливается прерывание по уровню или фронту от внешних источников прерывания?
Что такое приоритет прерывания и сколько уровней приоритета имеется в базовой модели семейства MCS-51?
Для чего устанавливают уровень приоритета прерываний?
Каким образом при написании программы первая команда подпрограммы обработки прерывания устанавливается на вектор (фиксированный адрес начала данной подпрограммы обработки прерывания)?
Куда происходит возврат после выхода из подпрограммы обработки прерывания?
Как избежать выполнения подпрограммы обработки прерывания без запроса прерывания?
Как записывается подпрограмма обработки прерывания, если ее объем больше восьми байт?
В каких случаях используются команды sjmp и ajmp?
Лабораторная работа № 5
Динамический вывод информации на трехразрядный
семисегментный индикатор
Введение
Семисегментные индикаторы используются для отображения цифровой информации, а также некоторых других символов. Индикатор содержит семь сегментов для изображения цифры и один для изображения точки. Каждый сегмент представляет собой светодиод, излучающий свет при протекании прямого тока. Аноды светодиодов имеют отдельные выводы, а катоды имеют один общий вывод. Имеются индикаторы с раздельными выводами катодов и общим выводом анодов. Внешний вид индикатора с общим выводом катодов и схема соединения его сегментов и децимальной точки представлены на рисунке.
Для высвечивания цифры на аноды сегментов, образующих изображение цифры, необходимо подать положительные потенциалы (логические единицы), а на общий вывод катодов и аноды сегментов, которые не должны высвечиваться, нулевые потенциалы (логические нули). Так, чтобы высветить цифру 5 на аноды индикатора надо выдать код 01101101, а на катод 0. Соответствие имени сегмента номеру разряда в байте приведено в таблице.
Номер разряда |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Сегмент |
H |
G |
F |
E |
D |
E |
B |
A |
Для отображения нескольких символов одновременно используют несколько индикаторов, расположенных в одну линию (линейный дисплей). Существует два способа организации интерфейса микроконтроллера с линейным дисплеем: статический и динамический. При статическом способе цифры на индикаторах дисплея высвечиваются непрерывно. При программном преобразовании кодов на каждый индикатор требуется восемь выводов порта микроконтроллера для подачи напряжений на катоды сегментов и еще один вывод для анода. Для трехразрядного дисплея потребуется 25 выводов портов.
При динамическом способе используется инерционность восприятия зрительной информации человеком. Если информация обновляется с частотой выше 20 Гц, то она представляется неизменяемой. Цифры в индикаторах (разрядах) дисплея высвечиваются по очереди. На аноды всех индикаторов дисплея подается код одной и той же цифры. На катод индикатора нужного разряда (который должен высвечиваться) подается 0, а на катоды остальных 1(чтобы не высвечивались). Процедура подачи кода на катоды называется выборкой знакоместа, а сам код – кодом выборки. Код выборки состоит из нескольких единиц и только одного нуля. Ноль на катоде обеспечивает высвечивание индикатора. В результате высвечивается один разряд (например, разряд единиц), остальные погашены, так как разность потенциалов между их анодами и катодами равна нулю. Затем происходит подача кода другой цифры (например, для разряда десятков) на аноды индикаторов и другого кода выборки. Ноль перемещается на катод другого индикатора, что вызывает высвечивание на нем цифры. Такой код выборки называется "бегущий ноль". Перед индикацией цифры для исключения мерцания все индикаторы гасятся подачей кода выборки, состоящего из одних единиц. Для динамического способа требуется намного меньшее количество входов портов. Так, для трехразрядного дисплея при индикации чисел не более 255 требуется 8 входов порта для кода цифры и 3 входа для кода выборки.
При составлении блок-схемы программы индикации необходимо учесть следующее. Число, которое должно быть выведено на дисплей, поступает в микроконтроллер или вырабатывается в нем в двоичном коде. Для определения цифр единиц, десятков, сотен и т.д. его необходимо перекодировать в двоично-десятичный код. Для высвечивания цифры необходимо полученный двоично-десятичный код цифры преобразовать в код цифры семисегментного индикатора и выдать его на выводы индикатора. В оперативной памяти по адресам, равным значениям индицируемых цифр, необходимо разместить семисегментные коды цифр. Например, в ячейке памяти 00H размещается код цифры 0, который равен 00111111b, в ячейке 01H - код цифры 1, в ячейке 02Н - код цифры 2 и т.д. Такое размещение семисегментных кодов существенно упрощает процедуру перекодировки, а сам способ перекодировки называется табличным. Другим вариантом размещения таблицы семисегментных кодов может быть размещение ее в памяти программ. Вывод каждой цифры можно оформить в виде подпрограммы, вызываемой прерыванием от переполнения таймера, который будет обеспечивать индикацию цифры с частотой 50 Гц.
Блок-схема подпрограммы вывода цифры может выглядеть следующим образом.
Вход в подпрограмму по прерыванию от таймера.
Гашение всех индикаторов (бланкирование).
Чтение двоично-десятичного кода цифры. (Преобразование двоичного кода числа в его представление в двоично-десятичных кодах цифр производится в основной программе.)
Перекодировка в семисегментный код.
Вывод байта индикации.
Вывод байта выборки.
Инкремент указателя адреса цифры.
Инкремент указателя байта выборки или сдвиг байта выборки.
Декремент счетчика знакомест.
Если все знакоместа обслужены, то переинициализация (т.е. загрузка начальных адресов цифры и байта выборки, установка начального значения счетчика знакомест) и выход из подпрограммы. Если не все знакоместа обслужены, то продолжение подпрограммы.
