Четверг, Сентябрь 24, 2020

Мигающий светодиод AVR ASM

 

 

;Если нажать на кнопку-светодиодначинает мигать,отпустить-гаснет.Сдесь мы напишем функцию задержки,т.к. контроллер исполняет комманды 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                  ДАЛЬШЕ


 

Back to Top