volatile uint8_t count = 0;
void setup()
{
DDRB = 24 ;
cli(); // Запретить прерывания
timer1_init();
timer2_init();
sei(); // Разрешить глобальные прерывания
}
void loop()
{
if (count == 254)
{
count = 0;
PORTB ^=(1<<4);
}
}
//Инициализация 16 битного таймера в режиме
void timer1_init (void)
{
TCCR1A = 0; // Зануляем регистры управления
TCCR1B = 0; // Зануляем регистры управления
TCCR1B |= (1<<WGM12); // Установим режим CTC1 Сброс по совпадению
TIMSK1 |= (1<<OCIE1A); // Включаем прерывание по совпаденю и
// устанавливаем бит разрешения прерывания 1ого счетчика по совпадению с OCR1A(H и L)
OCR1A = 30000; // Запись в регистр число для сравнения
TCCR1B |= (1<<CS12); // Установим предделитель 256
}
//------------------------
void timer2_init (void)
{
TCCR0A = 0; // Занулить регистр управления, работа в нормальном режиме
TCCR0B = 0; // Занулить регистр управления, работа в нормальном режиме
TCCR0B = 5; // Работа таймера с предделителем 1024
TIMSK0 |=(1<<TOIE0); // Установить прерывание по переполнению
}
//Обработчик прерываний по таймеру1
ISR (TIMER1_COMPA_vect)
{
PORTB ^= (1<<5);
}
//------------------------
//Обработчик прерываний по таймеру0
ISR (TIMER2_OVF_vect)
{
count++;
}
//------------------------*/