Код для 2313
;-------------------------Инициализация таймера
ldi temp, high(kzad ) ; Записываем коэффициент задержки
out OCR1AH, temp
ldi temp, low(kzad )
out OCR1AL, temp
ldi temp, 0x03 ; Выбор режима работы таймера
out TCCR1B, temp
;---------------------------Подпрограмма задержки
wait: cpi data, 1 ; Проверяем код задержки
brne w1
ldi temp, 0x40 ; Разрешаем прерывание по совпадению
rjmp w2
w1: ldi temp, 0x80 ; Разрешаем прерывания no переполнению
w2: out TIMSK, temp
clr temp
out TCNT1H,temp ; Обнуляем таймер
out TCNT1L,temp
ldi flz,0 ; Сбрасываем флаг задержки
sei ; Разрешаем прерывания
cpi data, 2 ; Если это задержка 2-го типа
breq w4 ; Переходим к концу подпрограммы
w3: cpi flz, 1 ; Ожидание окончания задержки
brne w3
w4: ret ; Завершаем подпрограмму
;------------------При срабатывании прерывания выполняется
progr: ldi flz,1 ; Установка флага задержки
reti ; Завершаем обработку прерывания
Мой код под 261(таймер 0):
;-------------------------Инициализация таймера
ldi temp, high(kzad ) ; Записываем коэффициент задержки
out OCR0B, temp
ldi temp, low(kzad )
out OCR0A, temp
ldi temp, 0x03 ; Выбор режима работы таймера
out TCCR0B, temp
;---------------------------Подпрограмма задержки
wait: cpi data, 1 ; Проверяем код задержки
brne w1
ldi temp, 0xC0 ; Разрешаем прерывание по совпадению
out TCCR0A, temp
ldi temp,0x19 ; Тут разрешил все возможные прерывания кроме переполнения(ничего другого не пришло в голову)
sts TIMSK, temp
rjmp w2
w1: ldi temp, 0x80 ; Разрешаем прерывания no переполнению
out TCCR0A, temp
ldi temp,0x02
sts TIMSK, temp
w2: clr temp
out TCNT0H,temp ; Обнуляем таймер
out TCNT0L,temp
ldi flz,0 ; Сбрасываем флаг задержки
sei ; Разрешаем прерывания
cpi data, 2 ; Если это задержка 2-го типа
breq w4 ; Переходим к концу подпрограммы
w3: cpi flz, 1 ; Ожидание окончания задержки
brne w3
w4: ret ; Завершаем подпрограмму
;-----------------------Прерывание
progr: ldi flz,1 ; Установка флага задержки
reti ; Завершаем обработку прерывания
буду благодарен любому совету

