Пятница, Сентябрь 18, 2020

Бегущие огни AVR ASM

 

 

 

;При включении питания контроллера светодиод двигается в одну сторону.Если нажать кнопку,светодиод будет двигаться в другую сторону.
.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





НАЗАД                  Assembler PIC                  Си AVR                  ДАЛЬШЕ

Back to Top