Следует отметить, что включенный Таймер 1 увеличивает потребление микроконтроллера на величину порядка 20 мкА. Особенно следует обращать на это внимание, если Таймер 1 используется для вывода микроконтроллера из режима пониженного потребления, в котором потребление микроконтроллера с выключенной периферией составляет всего 0.9 мкА (все цифры приведены для моделей PIC16F87X).
* * *
Совместно с Таймером 1 (а также, как мы увидим позже, и с Таймером 2) используется один (например, в PIC16F62X) или два (например, в PIC16F87X) модуля
Модуль ССР выполняет три основных функции:
• При его работе в режиме
• При работе в режиме
• При работе в режиме
Во всех случаях, когда используется Таймер 1, он должен работать в синхронном режиме, т. е. бит
Каждый модуль ССР имеет свой регистр управления, используемый для задания конфигурации модуля. Во всех случаях используемые модулями выводы необходимо вручную конфигурировать как вход или выход в соответствии с режимом работы модуля.
Работа модуля в режиме захвата показана на Рис. 13.6. В этом режиме имеются следующие подрежимы:
∙ 0000
При сбросе по питанию или по снижению напряжения питания все биты регистра обнуляются. При этом модуль ССР отключается, а предделитель сбрасывается. Чтобы избежать непредусмотренных прерываний при изменении режима работы модуля, его рекомендуется выключать перед сменой режима.
∙ 0100
По спадающему
Модуль ССР2 функционирует точно так же, за исключением того, что соответствующие биты флага CCP2IF и маски CCP2IE прерывания расположены в регистрах PIR2 (PIR2[0]) и PIE2 (Р1Е2[0]) соответственно. Причем во многих моделях среднего уровня эти биты являются единственными задействованными в указанных регистрах.
∙ 0101
Описанный выше процесс захвата производится по нарастающему
∙ 0110
Захват производится по четвертому нарастающему фронту на выводе ССР
∙ 0111
Захват производится по шестнадцатому нарастающему фронту на выводе ССР
Рис. 13.6.
После наступления заданного события процессор может считать сохраненное значение (время) либо в обработчике прерывания, либо после установки опрашиваемого флага CCPIF в 1. Если Таймер 1 после каждого события сбрасывается, то данное значение представляет собой время, прошедшее с момента наступления предыдущего события. Если же инкрементирование Таймера 1 не прекращается, то для определения времени между событиями достаточно вычесть новое значение из значения, запомненного во время предыдущего прерывания. Поскольку режим модуля ССР допускается изменять «налету», мы можем измерять интервал между нарастающим и спадающим фронтами на входе модуля ССР1, переключая между операциями захвата бит ССР1М[0]. При изменении режима возможна самопроизвольная установка флага прерывания ССР1IF. Чтобы предотвратить генерацию ложного прерывания, необходимо перед изменением режима сбрасывать бит ССР1IЕ, а после изменения режима — бит ССР1IF. Также можно использовать разные модули для захвата по каждому из фронтов, скажем, модуль ССР1 — для захвата по нарастающему фронту, а модуль ССР2 — для захвата по спадающему фронту (см. Пример 13.3).