Пробуйте так, у меня работает. Немного упростил - выбросил лишний цикл.
Спойлер
Код: Выделить всё
.include "m328pdef.inc"
.def temp = r16
.def temp1 = r17
.def reg_led = r20
.equ START = 0
;***Векторы прерываний***
.org $0000
rjmp INIT
.org $0002
rjmp STOP_PRESSED
;***Инициализация***
INIT:in temp,MCUCR
andi temp,~(1<<PUD)
out MCUCR, temp
ldi reg_led, 0xFE
ldi temp, $5F
out SPL, temp
ldi temp, $02
out SPH, temp
sec
set
ser temp
out DDRB, temp
out PORTB, temp
clr temp
out DDRD, temp
ldi temp, 0x05
out PORTD, temp
ldi temp, (1<< INT0)
out EIMSK, temp ;Разрешаем прерывание INT0
ldi temp, 0x00
sts EICRA, temp ;Прерывание по низкому уровню сигнала INT0
sei
;***Обработка прерывания (INT0) от кнопки STOP***
STOP_PRESSED:
sbic PIND,START ;***Ждем нажатия кнопки START***
rjmp STOP_PRESSED
reti
;***Переключаем светодиоды
LOOP: out PORTB, reg_led
rcall DELAY
ser temp
out PORTB,temp
brts LEFT
sbrs reg_led,0
set
ror reg_led
rjmp LOOP
LEFT:
sbrs reg_led,7
clt
rol reg_led
rjmp LOOP
;***Задержка***
DELAY:
ldi r17,2
d1: ldi r18,2
d2: dec r18
brne d2
dec r17
brne d1
ret


