Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка пргр МП.docx
Скачиваний:
11
Добавлен:
01.07.2025
Размер:
16 Мб
Скачать
☆

Б.2 Лабораторная работа № 2 «Таймеры. Система прерываний»

Б.2.1 Задание

Разработать и реализовать драйвер системного таймера микроконтроллера ADuC812. Написать тестовую программу с использованием разработанного драйвера по алгоритму, соответствующему варианту задания.

Б.2.2 Таймеры-счетчики

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

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

Микроконтроллер ADuC812 имеет три программируемых 16-битных таймера/счетчика: таймер 0, таймер 1, таймер 2. Каждый таймер состоит из двух 8-битных регистров THX и TLX. Все три таймера могут быть настроены на работу в режимах «таймер» или «счетчик».

В режиме «таймер» регистр инкрементируется каждый машинный цикл,

т.е. можно рассматривать это как подсчет машинных циклов. Так как машинный цикл состоит из 12 перепадов напряжения на тактовом входе микроконтроллера, частота инкрементирования таймера в 12 раз меньше тактовой частоты микроконтроллера (соответствующего кварцевого резонатора).

В режиме «счетчик» регистр инкрементируется по перепаду из «1» в «0» внешнего входного сигнала, подаваемого на вывод микроконтроллера T0, T1 или T2 (см. принципиальную электрическую схему контроллера SDK-1.1). Когда опрос показывает высокий уровень в текущем машинном цикле и низкий уровень в следующем, счетчик увеличивается на 1. Таким образом, на распознавание периода требуются два машинных цикла, максимальная частота подсчета входных сигналов равна 1/24 частоты кварцевого резонатора. На длительность периода входных сигналов ограничений сверху нет. Для гарантированного прочтения входной сигнал должен удерживать значение «1», как минимум, в течение одного машинного цикла микроконтроллера.

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

Б.2.3 Описание работы

Данная лабораторная работа посвящена изучению таймера и системы прерываний микроконтроллера ADuC812. Основными функциями системного таймера являются: измерение интервалов времени и выполнение периодических задач. В данной работе с помощью таймеров требуется управлять светодиодными индикаторами (динамическая индикация) или звуковым излучателем (проигрывание мелодии), входящими в состав контроллера SDK-1.1.

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

Функция

Описание

void InitTimer(void)

Инициализация таймера.

unsigned long GetMsCounter(void)

Получение текущей метки времени в миллисекундах.

unsigned long DTimeMs(unsigned long t0)

Измерение количества миллисекунд, прошедших с временной метки t0 и до текущего времени.

void DelayMs(unsigned long t)

Задержка на t миллисекунд.

Кроме того, могут быть реализованы функции работы с таймером в режиме «счетчик» (например, чтение счетчика).

Драйвер светодиодных индикаторов/звукового излучателя (зависит от варианта задания) должен быть реализован по тому же принципу, что и драйвер системного таймера. А именно: в обработчике прерывания от таймера должна выполняется сама динамическая индикация/проигрывание мелодии – примеры периодических задач, а через API-функции осуществляется настройка отображения анимации/звука и управление этими процессами. Б.2.3.1 Пояснения для вариантов заданий с использованием светодиодов

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

Яркость свечения светодиода можно регулировать, меняя скважность сигнала управляющего питанием светодиода. Скважность – это отношение периода следования (повторения) импульсов одной последовательности к их длительности. Величина, обратная скважности, называется коэффициентом заполнения. Сигнал со скважностью, равной двум, т.е. длительностью импульсов равной длительности пауз между ними, называется меандром. Внешне меандр представляет собой прямоугольное колебание.

Рис. 127. Пример сигнала со скважностью 4

Таким образом, при скважности питающего сигнала равной 1, светодиод будет светиться с максимальной яркостью. При скважности сигнала управления равной 4 (см. рис. 127), светодиод будет светиться с яркостью 25% от максимальной и т.д. Кроме того, нужно стремиться уменьшить период и увеличить частоту сигнала управления, чтобы избежать эффекта мерцания светодиодов.