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).  |