#include #include /* Дефайны */ #define F_CPU 1000000UL // тактовая частота #define PIND_MASK 0b00001100 // Маска для сравнения с PIND /* Переменные */ volatile uint8_t next_state, prev_state, up_state, down_state, state; int sw34; // Передача /* Прерывания */ ISR(TIMER1_COMPA_vect) { next_state = PIND & PIND_MASK; // Считываем текущее значение битов if (next_state != prev_state) { switch (prev_state) { case 8: { if (next_state == 3) state++; if (next_state == 0) state--; break; } case 0: { if (next_state == 2) state++; if (next_state == 1) state--; break; } case 4: { if (next_state == 0) state++; if (next_state == 3) state--; break; } case 12: { if (next_state == 1) state++; if (next_state == 2) state--; break; } default: { break; } } prev_state = next_state; // Присваиваем текущему состоянию предыдущее } TCNT1H = 0x00; TCNT1L = 0x00; // Обнуляем счетчик(на всякий случай) } void timer1_init() { TCCR1A = 0x00; TCCR1B |= (1<