По внешнему прерыванию оба байта из регистров COUNT: COUNT+1 копируются в пользовательские регистры DATUM: DATUM+1, после чего счетчик тиков и Таймер 0 обнуляются для регистрации следующего события. Фоновая программа постоянно опрашивает регистр NEW, ненулевое содержимое которого говорит о том, что имеется новое значение. В дальнейшем это значение можно будет, например, записать в последовательную EEPROM, как в Примере 12.3 на стр. 439, или же передать по последовательному каналу в ПК для последующей обработки и отображения.
* * *
Большинство PIC-микроконтроллеров среднего и старшего уровней имеют, по крайней мере, два дополнительных таймера/счетчика со следующими возможностями:
Таймер 1
Этот 16-битный таймер имеет собственный вспомогательный генератор и программируемый предделитель. Состояние этого таймера можно запомнить по внешнему событию. Кроме того, он может изменять состояние определенного вывода микроконтроллера при достижении некоторого предустановленного значения.
Таймер 2
Этот 8-битный счетчик имеет как программируемый предделитель, так и программируемый постделитель. Модуль счета данного таймера может задаваться программистом. Кроме того, этот таймер можно использовать для аппаратной генерации сигнала с широтно-импульсной модуляцией.
Модуль захвата/сравнения/ШИМ
Оба таймера могут работать совместно с модулем захвата/сравнения/ШИМ (Capture/Compare/PWM — ССР), который позволяет считывать текущее состояние Таймера 1 («захват»), сравнивать состояние Таймера 1 с заданным значением («сравнение»), а также обеспечивает автоматическую генерацию ШИМ-сигнала на базе Таймера 2.
Для тактирования этого таймера может использоваться внешний сигнал — либо подаваемый на вход TICKI микроконтроллера, либо от собственного генератора Таймера 1. Кроме того, в качестве тактового сигнала таймера может использоваться системный тактовый сигнал частотой
Регистр управления Таймера 1 T1CON (см. Рис. 13.5) используется для задания различных функций таймера. После сброса все биты этого регистра равны О, что соответствует следующим установкам: Таймер 1 и его внешний генератор отключены, коэффициент деления предделителя равен 1, для тактирования таймера используется системный тактовый сигнал.
Рис. 13.5.
∙ TMR1ON
Установка бита T1CON[0] в 1 разрешает работу Таймера 1. В одних случаях[173] связанные с Таймером 1 выводы микроконтроллера автоматически переключаются в режим входа независимо от установок регистров TRIS, а в других[174] — программа должна принудительно переключить эти выводы на вход.
∙ TMR1CS, T10SCEN
Если бит TMR1CS (T1CON[1]) установлен в 1, то Таймер 1 будет тактироваться от системного тактового сигнала. В противном случае используется внешний источник тактовых импульсов.
В последнем случае счет осуществляется либо по нарастающему фронту сигнала на выводе T1CKI, либо, если бит разрешения генератора Таймера 1 TIOSCEN (T1CON[3]) установлен в 1, по сигналу «собственного» генератора таймера, независимого от основного генератора микроконтроллера. Наличие такого генератора позволяет избежать подбора частоты основного кварцевого резонатора в соответствии с требованиями таймера, чем мы и воспользовались в нашем детекторе пиков ЭКГ на базе Таймера 0 (см. стр. 460). В качестве времязадающего элемента в этом генераторе используется кварцевый резонатор, подключаемый к выводам TIOSCO/TICKI и T10SC1. Максимальная частота такого резонатора составляет 200 кГц, однако, как правило, используется часовой кварц с частотой 32.768 кГц (215 Гц).
∙ T1CKPS[1:0]
Независимо от источника тактовых импульсов инкрементирование 16-битного счетного регистра может производиться как непосредственно по данному сигналу, так и по каждому второму, четвертому или восьмому импульсу. Это определяется установками битов T1CON[5:4], как показано на Рис. 13.5.