Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.doc
Скачиваний:
288
Добавлен:
20.06.2014
Размер:
1.06 Mб
Скачать
        1. Таймер t1

          1. Назначение и свойства таймера t1

16-разрядный таймер T1 позволяет более точно определять промежутки времени, отслеживать события и генерировать сигналы. Его основные характеристики таковы:

  • разрядность 16 бит, в том числе 16-битная ШИМ;

  • два независимых устройства сравнения (A и B);

  • устройство захвата;

  • сброс таймера при совпадении (автоматическая перезагрузка);

  • ШИМ с корректировкой фазы;

  • ШИМ с переменным периодом;

  • генератор частоты;

  • счетчик внешних событий;

  • четыре независимых источника прерываний (TOV1, OCF1A, OCF1B, ICF1).

Видно, что у таймеров T0 и T1 много общего. Однако таймер T1 расширяет возможности T0 по некоторым параметрам. Количественные отличия — разрядность 16 бит и два устройства сравнения. Качественное — устройство захвата. Кроме того, одноименные режимы работы таймеров T0 и T1 имеют отличия.

          1. Структура таймера t1

Рис. Схема структуры таймера T1

BOTTOM — 0x0000.

MAX — 0xFFFF.

TOP — одно из фиксированных значений: 0x00FF, 0x01FF, 0x03FF, или значение регистров OCR1A или ICR1.

Выход OC1 должен быть установлен до того, как будет инициализирован регистр направления соответствующего порта для работы OC1 на выход. Это можно сделать, например, установкой бита FOC1 в нормальном режиме.

          1. Регистры таймера t1

Таймер T1 содержит следующие регистры:

  • TCCR1A/B (Timer/Counter Control Register), два 8-битных регистра управления, определяют входной тактовый сигнал, задают режимы генерации сигнала и работы выхода;

  • TCNT1 (Timer/Counter Register), 16-битный счетный регистр, считает такты внутреннего или внешнего, на входе T1, тактового сигнала;

  • OCR1A/B (Output Compare Register), два 16-битных регистра сравнения, содержат значение, которое в каждом такте сравнивается со значением TCNT1, при совпадении сравниваемых значений может быть сгенерировано прерывание или заданное изменение сигнала на выходе OC1;

  • ICR1 (Input Capture Register), 16-битный регистр, в который записывается значение TCNT1 при возникновении события на входе ICP1 или выходе аналогового компаратора, кроме того, этот регистр может использоваться для задания TOP.

Доступ к 16-битным регистрам осуществляется через 8-битную шину данных процессора за два цикла. В 16-битном таймере имеется 8-битный регистр временного хранения, в который помещается старший байт 16-битного регистра. При записи процессором байта в младшую часть 16-битного регистра и этот байт, и байт из регистра временного хранения, помещенный в него ранее, одновременно записываются в 16-битный регистр. При чтении процессором младшего байта старший одновременно записывается в регистр временного хранения, откуда должен будет прочитан следующей командой.

Пример.

; Set TCNT1 to 0x01FF

ldi r17,0x01

ldi r16,0xFF

out TCNT1H,r17

out TCNT1L,r16

; Read TCNT1 into r17:r16

in r16,TCNT1L

in r17,TCNT1H

В C-коде это скрыто:

unsigned int i;

/* Set TCNT1 to 0x01FF */

TCNT1 = 0x1FF;

/* Read TCNT1 into i */

i = TCNT1;

Регистр временного хранения один, и он используется при обращении ко всем 16-битным регистрам. Поэтому если нужно записать в несколько регистров значения с одинаковым старшим байтом, то его достаточно записать только один раз.

Если разрешены прерывания, то между командами обращения к 16-битному регистру может произойти прерывание. Если его обработчик может изменить значение регистра временного хранения, то перед обращением к 16-битному регистру прерывания нужно запретить.