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.