![]() Email автора. Copyright: Сухарев Евгений, 2005 |
Таймер/счётчик 1 (TC1) представляет из себя 16-битный модуль, содержащий 10 8-битных
регистров. Эти регистры фактически являются набором из 5 16-битных регистров. Счёт происходит в
регистрах TCNT1H (Timer counter 1 High byte) и TCNT1L (Low byte), вместе составляющих 16-битный
регистр TCNT1. ВНИМАНИЕ! Если использовать прямое чтение 8-битных регистров TCNT1H и TCNT1L, то
нельзя быть уверенным, что эти регистры прочитались одновременно. Может произойти следующая
ситуация: Счётчик содержал значение $01FF, Вы считали TCNT1H (содержащий значение 01 в какую-то
переменную). За это время произошёл счётный импульс, и содержимое TCNT1L стало равно $00, а в
TCNT1H записалось значение $02. Теперь Вы читаете значение TCNT1L в другую переменную, получаете
в этой переменной значение $00 (ведь таймер-счётчик уже произвёл счёт). 16-битное
значение этих переменных получилось $0100, но на момент считывания старшего байта содержимое
счётчика было $01FF, и младший байт у Вас должен был прочитаться как FF. Для предотвращения такой ситуации
служит временный регистр, содержащийся в блоке таймера-счётчика. Этот регистр прозрачный, т.е.
действует автоматически. При считывании значения регистра TCNT1L в переменную, содержимое TCNT1H
попадает в этот регистр. Затем при чтении старшего байта в переменную, считывается значение
временного регистра. Временный регистр абсолютно прозрачен для пользователя, но для его корректной
работы необходимо соблюдать такую последовательность действий: ![]()
Биты COM1A1,COM1A0, COM1B1 и COM1B0 - контролируют поведение выводов OC1A и OC1B. ![]() Где биты ICNC1, ICES1, WGM13 и WGM12 также служат для PWM, а CS12, CS11 и CS10 настраивают скорость счёта следующим образом: ![]()
В случае, если в эти биты записаны значения 000, ТС0 остановлен. Если записано 001, то тактовая частота
процессора подаётся через схему делителя без изменений, и на каждый такт процессора ТС1 увеличивает
значение в регистре TCNT1. Соответственно, если в CSxx Записано 101, то увеличение значения в TCNT1
происходит на каждый 1024-ый такт процессора.
16-битные регистры OCR1A и OCR1Bслужат для задания значения, при достижении которого в
режиме счёта, ТС1 генерирует соответствующие прерывания.
Обработка прерываний от TC1
ТС1 при переполнении значения TCNT1 посылает процессору сигнал Timer/Counter 1 Overflow. Также процессору
посылается сигнал Timer/Counter 1 A или B Compare Match при совпадении значений в регистрах TCNT1 и OCR1A
и OCR1B соответственно. Реакция процессора на эти сигналы (вызов соответствующих прерываний) зависит от
значения регистров TIMSK и флага I в Status регистре процессора.
Бит 2 - TOIE1 - Когда этот бит установлен в 1 и разрешены прерывания, процессор реагирует на сигнал
переполнения ТС1 и вызывает прерывание по вектору $010 (OVF1addr). |