83 lines
1.8 KiB
C
83 lines
1.8 KiB
C
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;
|
|
}
|
|
|