Таймер. Основные характеристики таймеров, страница 4

                    . . . //Делаем то, что необходимо по прерыванию от таймера

             }

       }

       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.  Написать программу регулировки яркости светодиодов с использованием широтно-импульсной модуляции

50%

 

50%

 
Принцип  управления яркостью светодиода с помощьюширотно-импульсной модуляции(ШИМ) показан на рис.7.

Рис.7. Управления яркостью светодиода с помощьюширотно-импульсной модуляции

Глаз человека перестает замечать пульсации источников излучения с частотой выше 20Гц. Если, к примеру, светодиод включен и выключен по 50% времени в течение периода (№1 на рис.7) то его яркость будет восприниматься глазом интегрально как 50% максимального уровня непрерывного свечения, а не как последовательность вспышек. Таким образом, сохраняя постоянный период, но меняя длительность включенного состояния светодиода можно плавно регулировать его яркость.