ISR(TIMER1_CAPT_vect){ TCNT1 = 0; dht_save_time_id++; if ( dht_save_time_id > 3 ) { dt[dtcnt] = ICR1<<8; dtcnt++; if ( ICR1<1500 ) { data[dNum] &= ~(1<<dPos); } // 0 else { data[dNum] |= (1<<dPos); } // 1 dPos--; if ( dPos < 0) { dPos=7; dNum++; } } if ( dht_save_time_id == 42 ) { interrupt_flag++; dht_check_act = true; dht_done = true; DHT_DDR |= (1 << DHT_BIT); // Пин как выход DHT_PORT |= (1 << DHT_BIT); // Выход HIGH } } // Прерывание таймера ISR(TIMER0_COMPA_vect) { TCNT0 = 0; dht_en_timer++; if ( dht_en_timer >= 65) { dht_en_timer =0; dht_done = false; dtcnt=0; interrupt_flag = 1; dht_check_act = true; DHT_DDR |= (1 << DHT_BIT); // Пин как выход DHT_PORT |= (1 << DHT_BIT); // Выход HIGH dht_save_time_id = 0; } } // Прерывание таймера ISR(TIMER1_COMPA_vect) { TCNT1 = 0; dht_check_act = true; TCCR1B = 0b00000000; if ( interrupt_flag < 3 ) { interrupt_flag++; } } // Установка таймера void setup_timer() { // Настраиваем таймер 1 в режиме CTC TCCR0B = 0b00000101; // Устанавливаем значение сравнения для частоты 1 Гц OCR0A = 250; // Разрешаем прерывание сравнения A TIMSK0 |= (1 << OCIE0A); // Настраиваем таймер 1 в режиме CTC TCCR1A = 0b00000000; TCCR1B = 0b00000000; // Устанавливаем значение сравнения для частоты 1 Гц OCR1A = 250; // Разрешаем прерывание сравнения A TIMSK1 = 0b00100010; }