Рис. 13.7
.1000: Установить вывод микроконтроллера при совпадении
На вывод ССР1 выставляется ВЫСОКИЙ уровень. Защелка модуля ССР может быть сброшена только переключением модуля в режим 0000, т. е. при его выключении.
1001: Сбросить вывод микроконтроллера при совпадении
На вывод ССР1 выставляется НИЗКИЙ уровень. Защелка модуля ССР может быть установлена только выключением модуля.
1010: Генерировать прерывание при совпадении
Состояние вывода ССР1 не изменяется, единственным действием является установка флага ССР1 IF.
1011: Сформировать специальное событие при совпадении
Таймер 1 сбрасывается. При использовании модуля ССР2 (это единственное отличие в функционировании модулей ССР1 и ССР2) можно запустить преобразование АЦП (см. Рис. 14.11 на стр. 510).
В режимах 1000 и 1001 выводы микроконтроллера, используемые модулями ССР1 и ССР2, должны быть сконфигурированы как выходы. При отключенном модуле ССР (после любого сброса) эти выводы будут отображать состояние соответствующих битов порта. В качестве примера давайте рассмотрим выключение модуля ССР. Поскольку единственным способом переключения защелки модуля в ее исходное состояние является запись в регистр CCPCON режима 0000, логично будет записать это значение в соответствующий бит порта для исключения нежелательных выбросов. К примеру, при использовании режима 1001 бит регистра порта следует при инициализации установить в 1, чтобы после сброса на этом выводе присутствовал ВЫСОКИЙ уровень. В микроконтроллерах, выпускающихся в корпусах с количеством выводов более 28, вывод ССР1, как правило, задействует линию RC2, а вывод ССР2 — линию RC1.
В качестве примера предположим, что нам необходимо сконфигурировать Таймер 1 также, как и в предыдущем примере, — чтобы его переполнение происходило каждые 10 с. Для этого нам необходимо задать период тайм-аута, равный 16 с (коэффициент деления предделителя 8), а затем укоротить цикл. Соответственно в регистр CCPR1 следует загрузить 10
/16 от максимального значения (216 х 10/16), что составит h’A000’. При достижении таймером данного значения он будет автоматически сбрасываться, и если бит маски CCP1IE (а также биты PEIE и GIE) установлен, то будет генерироваться прерывание.Инициализационный код для данной задачи выглядит следующим образом:
movlw h’A0’
; Загружаем в CCPR1 число h’A000’movwf CCPR1H;
clrf CCPR1L;
movlw b’00001011’
; Режим ССР1 — 1011. Специальное событиеmovwf CCP1C0N
movlw b’00111011’
; Таймер 1 вкл. (1), внешний такт. сигнал (1)movwf T1CON
; Синхр. режим (0), генератор вкл. (1), 1:8 (111)bsf STATUS,RP0
; Переключаемся в 1-й банкbsf PIE1,CCP1IE
; Разрешаем прерывание от ССР1bcf STATUS,RP0
; Возвращаемся в 0-й банкbsf INTCON,PEIE
; Разрешаем прерывания от таймера/ССРbsf INTCON,GIE
; Разрешаем работу системы прерыванийПосле выполнения этих команд микроконтроллер будет автоматически прерываться каждые 10 с.
Поскольку в режиме 1011 вывод ССР1 отключен от модуля ССР, указанный вывод может использоваться как обычный вывод порта ввода/вывода независимо от модуля ССР1.
* * *