;При включении питания контроллера светодиод двигается в одну сторону.Если нажать кнопку,светодиод будет двигаться в другую сторону.
.include "tn2313def.inc"
.list
.def temp=r16
.def i=r17
.def j=r18
.def k=r19
.def rab=r20
.cseg
.org 0
ldi temp,ramend
out spl,temp
ldi temp,0x80
out acsr,temp
ldi temp,0
out ddrd,temp
ldi temp,0xff
out ddrb,temp
out portb,temp
out portd,temp
start: in temp,pind ;Копируем содержимое порта Д.
sbrc temp,0 ;Кнопка нажата?
rjmp s3 ;Нет.
s1: ldi rab,0b10000000;Да.Запись начального значения.
s2: ldi temp,0xff ;Маска.
eor temp,rab ;xor temp с rab,результат в temp
out portb,temp ;и на "экран".
rcall delay ;Задержка.
lsr rab ;Сдвиг бита влево.
brcc s2 ;Если бит С в регистре Status не поднялся-продожать
rjmp start
s3: ldi rab,0b00000001;Сюда попадём если кнопка ненажата.
s4: ldi temp,0xff ;Делаем всё что сверху только наоборт.
eor temp,rab
out portb,temp
rcall delay
lsl rab
brcc s4
rjmp start
delay: push i ;Сохраняем в стеке r17
push j
push k
ldi i,10
iloop: dec i
breq exit
ldi j,15
jloop: dec j
breq iloop
ldi k,100
kloop: dec k
brne kloop
rjmp jloop
exit: pop k
pop j
pop i
ret