Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы МП.New.doc
Скачиваний:
27
Добавлен:
23.11.2019
Размер:
1.08 Mб
Скачать

2.2.1. Режим Normal

Это наиболее простой режим работы таймеров/счетчиков. В этом режиме счетный регистр функционирует как обычный суммирующий счетчик. По каждому импульсу тактового сигнала clkTn инкрементируется счетный регистр. При переходе через значение $FFFF возникает переполнение, и счет продолжается со значения $0000. В том же такте сигнала clkTn, в котором обнуляется регистр TCNTn, флаг прерывания по переполнению TOVn устанавливается в 1. Блоки сравнения обоих таймеров в этом режиме могут использоваться как для генерации прерываний, так и для формирования сигналов. Состояние выходов ОСnА/ОСnВ/ОСnС каждого из блоков сравнения 16-битных таймеров/счетчиков определяется содержимым битов СОМnx1:СОМnx0 регистров TCCRnA, как показано в Табл. 2.6.

Таблица 2.6. Управление выводами ОСnА/ОСnВ/ОСnС в режиме Normal

COMnxl

COMnx0

Описание

0

0

Таймер/счетчик Тn отключен от вывода ОСnx

0

1

Состояние вывода меняется на противоположное

1

0

Вывод сбрасывается в 0

1

1

Вывод устанавливается в 1

Примечание, n = 1,3,4,5; х = А, В или С.

Состояние выхода любого блока сравнения также может быть изменено принудительно, записью лог. 1 в бит FOCnA/FOCnB/FOCnC регистра TCCRnC. Прерывание при этом не генерируется.

2.3. Программирование 16-тибитных таймеров/счетчиков

Программирование таймеров/счетчиков заключается в выполнении следующих шагов:

  1. выбрать источник тактового сигнала таймера/счетчика;

  2. задать режим работы таймера/счетчика;

  3. при использовании режима СТС задать модуль счета в регистре OCRnA или ICRn (в зависимости от выбранного режима работы);

  4. при использовании прерываний, генерируемых при работе таймера/счетчика, разрешить эти прерывания.

Пример.

.org 0x0000 //директива, определяющая, что следующая команда будет //расположена в памяти по указанному адресу

jmp main // переход к основной программе. Происходит при включении //питания или при сбросе микроконтроллера

.org 0x001C

jmp timer1ovf //переход к подпрограмме обработки прерывания от //переполнения таймера 1

timer1ovf: // начало подпрограммы обработки прерывания от переполнения //таймера 1

{сюда помещаете действия, которые должны выполняться при переполнении таймера}

reti //возврат из подпрограммы обработки прерывания

main:

{инициализировать стек и порты ввода/вывода, задать режим работы таймера}

ldi r16,0x04

out TIMSK,r16 //разрешение прерывания от переполнения таймера 1

sei //разрешение прерываний в микроконтроллере

{создать бесконечный цикл}

Лабораторная работа №2 (4 часа)

«Режим CTC работы таймеров-счетчиков. Обслуживание внешних и внутренних прерываний»

Цель работы

  1. Изучить систему прерываний микроконтроллеров AVR.

  2. Изучить работу таймеров в режиме CTC.

Порядок выполнения работы

1. Реализовать на индикаторной матрице контроллера включение светодиодов по заданному алгоритму:

  • произвести последовательное циклическое включение светодиодов "бегущий огонь". Использовать первый таймер в качестве формирователя времени свечения светодиодов индикаторной матрицы контроллера;

  • использовать кнопки стенда для переключения скорости «бегущего огня». Кнопки подключены к входам INT0…INT3 внешних прерываний микроконтроллера

Для выполнения задания использовать режим выходного сравнения таймеров.