;Если нажать на кнопку-светодиодначинает мигать,отпустить-гаснет.Сдесь мы напишем функцию задержки,т.к. контроллер исполняет комманды 4 000 000 в секунду,а программа как вы поняли это просто бесконечный цикл,нам нужно заставить чтото делать его.Мы сделаем так,что контроллер просто будет отнимать от чисел 1-цу нужное нам время.
.include "tn2313def.inc"
.list
.def temp=r16
.def i=r17
.def j=r18
.def k=r19
.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: sbi portb,0 ;Нужно потушить светодиод
in temp,pind ;Читаем порт D
sbrc temp,0 ;Кнопка нажата?
rjmp start ;Нет
cbi portb,0 ;Да.Зажигаем светодиод.
rcall delay ;Идем онимать единицу
sbi portb,0 ;Возвращаемся и тушим светодиод
rcall delay ;Опять идем отнимать единицу
rjmp start ;И всё сначала
delay: push i ;Сохраняем в стеке r17
push j
push k
ldi i,15
iloop: dec i
breq exit
ldi j,15
jloop: dec j
breq iloop
ldi k,255
kloop: dec k
brne kloop
rjmp jloop
exit: pop k
pop j
pop i
ret
НАЗАД Assembler PIC Си AVR ДАЛЬШЕ