последовательно зажигать светодиоды по часовой стрелке с интервалом ассемблера 0,5 секунды

Не могу сообразить, как написать код на ассемблере, чтобы получить нужный результат: последовательно зажигать светодиоды по часовой стрелке с интервалом в 0,5 секунды. Ассемблер не моя сильная сторона, я примерно представляю, как написать этот cide на C, но ассемблер для меня немного сложен. Может быть у кого-то есть идеи, что мне делать. Спасибо за любую помощь

      .device AT90USB162
.include "usb162def.inc"B
.def tmp= r16
.equ RedDiod=5
.equ YellowDiod=6
.equ GreenDiod=0;PD
.equ BlueDiod=2
.cseg
.org $0000 
 rjmp reset 
.org $0040
;*******начало основной программы
reset:
ldi tmp,high(RAMEnd)

 ldi tmp,low(RAMEnd)
 out spl,tmp

ldi tmp,$00 
 out PortB,tmp
 out PortC,tmp
 ldi tmp,0b00010010
 out PortD,tmp
 ldi tmp,0b11111111 
 out DDRB,tmp 
 ldi tmp,0b11111100 ;
 out DDRC,tmp 
 ldi tmp,0b01101001 ;
 

out DDRD,tmp 
delay:
 ldi r17,0xff; количество повторів
 ldi r18,0x7 ; у r17-r20
 ldi r19,0
 ldi r20,0
_delay: subi r17,0x1
 sbci r18,0
 sbci r19,0
 sbci r20,0
 brcc _delay
 ret
main:
ldi tmp,(1<<RedDiod)|(1<<YellowDiod)|(1<<BlueDiod)
 out PortC,tmp
ldi tmp,(1<< GreenDiod)
 out PortD,tmp
 end: jmp end

0 ответов

Другие вопросы по тегам