Вс сен 02, 2012 14:42:49
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;
}
}