Добрый день, Форумчане! Помогите пожалуйста разобраться с таймером1. Необходимо после отлавливания внешнего прерывания INT0 запустить таймер1 с прерыванием по совпадению. Период таймера от 200 до 20000. Внешнее прерывание я отлавливаю и запускаю таймер1, но прерывания нет, хотя таймер тикает и при совпадении обнуляется и идет дальше по кругу - в отладчике смотрел...Помогите найти, где я накосячил...Работаю в avr studio, мк atmega16. Вот код:
Код:
void INCUBATOR_Init()
{
//TIME_Init();
DDRB &= (1 << 0) | (1 << 1);
PORTB |= (1 << 0) | (1 << 1);
DDRC |= (1 << 0);
PORTC &= ~(1 << 0);
DDRD &= ~(1 << 2);
PORTD |= (1 << 2);
GICR |= (1 << INT0); //разрешили прерывание
MCUCR = 0x00;
SREG |= (1 << 7);
}
//----------
ISR(INT0_vect)
{
if(!enableZeroCross)
{
enableZeroCross = true;
OCR1A = delay_dimmer; // Значение для сравнения
TCNT1 = 0; // счетчик в ноль
TCCR1B |= (1 << CS10) | ( 1<< WGM12); // без предделителя и режим СТС по совпадению
TIMSK = (1 << OCIE1A); // Разрешить прерывание при совпадении TCNT1 и OCR1A
}
}
//----------
ISR(TIMER1_COMPA_vect)
{
if(enableZeroCross)
{
TCNT1 = 0;
TCCR1B = 0x00;
PORTC |= (1 << 0); // включить симмистор
_delay_us(50);
PORTC &= ~(1 << 0);
enableZeroCross = false;
}
}