. . . //Делаем то, что необходимо по прерыванию от таймера
}
}
return 0;
}
__irq __nested __arm voidTimerHandler0()
{
T0IR = 0x01;
VICADDRESS = 0; //Сброс прерывания
T0_event = 1; //Устанавливаем флаг события прерывания от таймера
}
Лабораторная работа включает в себя несколько фронтальных и индивидуальных заданий:
1. Написать программу обработки прерываний от таймера
Для этого функцию main прототипа проекта необходимо модифицировать следующим образом:
intmain (void)
{
SCS |= 0x20; // Разрешить генератор с кварцевым резонатором 12МГц
while( !(SCS & 0x40) ); //Подождать стабилизации частоты генератора
PCLKSEL0 = 0x0004; // 0000 0100 - двоичный вид комбинации 01 для разрядов 3:2
// Настроить порт
SCS |= 0x01; //Разрешить быстрый ввод/вывод
FIO2DIR = 0x00FF; // Биты 0-7 порта 2 на вывод для управления светодиодами
FIO2MASK = 0; //Все разряды порта 2 работают в быстром режиме
FIO2PIN = 0x00; // Выключить светодиоды
InitVIC(); //Инициализация системы прерываний
InitTimer0();//Инициализация таймера Т0
while (1)//Loopforever
{
//Ничего не делаем - все происходит в функции обработки прерывания
}
return 0;
}
В проект должны быть добавлены функции настройки прерываний из предыдущей работы и функция настройки таймера. В данном примере таймер настраивается на частоту 10Гц и в прерывании от таймера светодиоды меняют свое состояние. После проверки работоспособности данного примера необходимо модифицировать программу таким образом, чтобы на светодиодах был сформирован бегущий огонь с использованием прерываний от таймера.
2. Написать программу проверки состояния кнопок с подавлением дребезга контактов
Детальное описание алгоритма опроса кнопок находится в лабораторной работе номер 2. Основное отличие заключается в способе вызова функций опроса копок. Функция GetBTN1State()для кнопки 1 и аналогичные функции для других кнопок должны вызываться из обработчика прерывания таймера. При этом таймер должен быть перепрограммирован на частоту 50-100 Гц (10-20 миллисекунд) путем соответствующего изменения регистра T0MR0 в функции InitTimer0().
3. Написать программу проверки состояния энкодера
Детальное описание алгоритма проверки состояния энкодера находится в лабораторной работе номер 2. Аналогично предыдущему заданию необходимо использовать прерывание от таймера с измененным интервалом 10-20 миллисекунд
4. Написать программу регулировки яркости светодиодов с использованием широтно-импульсной модуляции
|
|
Рис.7. Управления яркостью светодиода с помощьюширотно-импульсной модуляции
Глаз человека перестает замечать пульсации источников излучения с частотой выше 20Гц. Если, к примеру, светодиод включен и выключен по 50% времени в течение периода (№1 на рис.7) то его яркость будет восприниматься глазом интегрально как 50% максимального уровня непрерывного свечения, а не как последовательность вспышек. Таким образом, сохраняя постоянный период, но меняя длительность включенного состояния светодиода можно плавно регулировать его яркость.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.