;Когда нажимаем на любую кнопку,то контакты замыкаются и размыкаются несколько микросекунд.Это называется дребезг контактов.В Протеусе этого вы не увидете,но если сделаете реальную схему, то светодиод будет загораться и тухнуть не всегда.Сделаем задержку в программе в том месте где кнопка нажимается и отпускается.
.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                  ДАЛЬШЕ