;Когда нажимаем на любую кнопку,то контакты замыкаются и размыкаются несколько микросекунд.Это называется дребезг контактов.В Протеусе этого вы не увидете,но если сделаете реальную схему, то светодиод будет загораться и тухнуть не всегда.Сделаем задержку в программе в том месте где кнопка нажимается и отпускается.
.include "tn2313def.inc"
.list
.def temp=r16
.def i=r17 ;Объявим регистр счётчик
.cseg
.org 0
ldi temp,ramend
out spl,temp
ldi temp,0
out ddrd,temp
ldi temp,0xff
out ddrb,temp
out portb,temp
out portd,temp
ldi temp,0x80
out acsr,temp
start: in temp,pind
sbrc temp,0
rjmp start
rcall delay ;Задержка.Переходим на delay
in temp,pinb
sbrs temp,0
rjmp setbit
cbi portb,0
rjmp check
setbit: sbi portb,0
check: in temp,pind
sbrs temp,0
rjmp check
rcall delay
rjmp start
delay: push i ;Сохраним в стеке регистр
ldi i,200 ;Загружаем в i чило 200
loopi: dec i ;Отнимаем от i число 1
brne loopi ;Пока в Status регистре бит Z не станет 1 отнимаем i=i-1
pop i ;Восстановим из стека i
ret ;Извлекаем из стека адрес того места откуда rcall
НАЗАД Assembler PIC Си AVR ДАЛЬШЕ