Простейший 8-битный счетчик

 

8-разрядный таймер/счетчик 0 (Timer/Counter0) тактируется сигналом синхронизации процессорного ядра (СК) или от встроенного предделителя (Preskaller), или от внешнего контакта ТО (рис. 12.1).

 

 
 

 

 


Рис.12.1. Таймер/счетчик 0 микроконтроллера ATmegal63

 

Таймер счетчик предназначен для выполнения простейших операций: его содержимое программно доступно процессорному ядру для чтения и записи, а при переполнении счетчика вырабатывается запрос на прерывание программы.

 

Для управления счетчиком используются (рис. 12.2):

0 регистр управления TCCR0 (Timer/Counter0 Control Register),

0 регистр данных TCNT0 (Timer/Counter0),

0 регистр флагов прерывания TIFR (Timer/Counter Interrupt Flag Register),

0 регистр маски прерывания TIMSK (Timer/Counter Interrupt Mask Register),

0 регистр состояния микроконтроллера SREG (Status Register).

Если таймер/счетчик осуществляет счет внешних импульсов, то последние синхронизируются сигналом синхронизации процессорного ядра.

 

 
 

 

 


Рис. 12.2. Регистры, участвующие в управлении таймером/счетчиком 0

 

Регистр TCCR0 (Timer/Counter 0 Control Register) управляет тактовой частотой таймера/счетчика 0.

0 Биты 2..0 - CS02, CS01, CS00 (Clock Select0, Bit 2,1 and 0) - задают коэффициент деления предделителя таймер/счетчика 0 и тип внешнего сигнала (табл. 12.1).

 

Таблица 12.1. Коэффициенты деления предделителя таймера/счетчика 0

 

CS02 CS01 CS00 Описание
Остановка таймера
СК
CK/8
CK/64
СК / 256
СК/1024
Внешний контакт T0, задний фронт
Внешний контакт T0, передний фронт

Timer/Counter0 является суммирующим счетчиком, доступным для чтения и записи. Регистр TCNT0 хранит содержимое счетчика.

Регистр - TIMSK (Timer/Counter Interrupt Mask Register) является регистром маски прерываний.

0 Бит 0 - TOIE0 (Timer/Counter0 Overflow Interrupt Enable) - разрешение прерывания при переполнении счетчика. Когда бит TOIE0 установлен, а также установлен бит I в регистре SREG (Status Register), то прерывание при переполнении Timer/Counter0 разрешается. Соответствующий вектор прерывания TIMER0 OVF имеет адрес $012. Прерывание произойдет при установке бита TOV0 в регистре TIFR (Timer/Counter Interrupt Flag Register). Регистр- TIFR (Timer/Counter Interrupt Flag Register) является регистром флагов прерывания.

0 Бит 0 - TOV0 (Timer/Counter0 Overflow Flag) - флаг переполнения таймера/счетчика 0. Бит устанавливается при переполнении таймера/счетчика 0 и сбрасывается аппаратно при выполнении соответствующего прерывания ($012) или программно при записи 0. Прерывание происходит, если бит I в регистре SREG установлен, а также установлен бит TOIE0 (Timer/Counter0 Overflow Interrupt Enable) в регистре TIMSK.