.Include "tn2313def.inc" .def Tmp=r16 ;Для временного хранения значений .dseg Setup: .byte 1 ;Флаг режима настройки .cseg .org 0 ... ;Тут векторы прерываний ;################################ Reset: ;Начальная инициализация # ;################################ ldi Tmp, 0b00000101 out TCCR1B, Tmp1 ;Предделитель таймера 1024 ldi Tmp, 0xCC out OCR1AH, Tmp1 ;Загружаем старший байт компаратора out OCR1AL, Tmp1 ;Загружаем младший байт компаратора ldi Tmp, 0 sts Setup, Tmp ;Сбрасываем флаг режима настройки SEI ;Разрешаем прерывания ;##################### Main: ;Основной цикл # ;##################### Тут опрашиваю кнопки, если какая-то нажата и флаг настройки не установлен, то вызываю SetupActivity rjmp Main ;######################################## SetupActivity: ;Войти в режим настройки # ;######################################## ldi Tmp, 1 sts Setup, Tmp ;Устанавливаем флаг режима настройки ldi Tmp, 0 out TCNT1H, Tmp ;Обнуляем старший байт счетчика out TCNT1L, Tmp ;Обнуляем младший байт счетчика ldi Tmp, 0b01000000 out TIMSK, Tmp ;Разрешаем прерывание от компаратора таймера 1 rjmp Main ;############################################ TIM1_COMPA: ;Прерывание таймера компаратора # ;############################################ push Tmp In Tmp, SREG push Tmp ldi Tmp, 0 out TIMSK, Tmp ;Запрещаем прерывание от компаратора таймера 1 sts Setup, Tmp ;Сбрасываем флаг режима настройки pop Tmp out SREG, Tmp pop Tmp reti