последовательно зажигать светодиоды по часовой стрелке с интервалом ассемблера 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