Witam, muszę napisać stoper w assemblerze (akurat pod płytkę ATxmega256a3bu) i nie wiem jak zrobić 3 rzeczy:

  1. Wciśnięcie ponownie przycisku START skutkuje tym, że stoper się zatrzymuje i wyświetla daną liczbę.
  2. Przycisk reset zeruje i stopuje stoper.
  3. Wykorzystując 2 wyświetlacze 7-segmentowe wyświetlić liczbę jednostek jako sekundy oraz kropkę, a na drugim liczbę dziesiątek jako milisekundy tak aby dokładność zliczania była 0.1s.

Udało mi się napisać coś takiego:

ldi r16, 0b11111111 
sts portc_dir,r16

ldi r17, 0b01000000 ; zero
sts portc_out,r17

b1:
lds r18, porte_in ; sw0
SBRS r18,5
call petla
jmp b1

b2:
lds r19, portf_in ; sw1
SBRC r19,1
ldi r17,0b01000000
jmp b2

petla:

ldi r17, 0b11111001 ; 1 
sts portc_out,r17
clr r17
call Delay

ldi r17, 0b00100100 ;2
sts portc_out,r17
clr r17
call Delay

ldi r17, 0b00110000 ;3
sts portc_out,r17
clr r17
call Delay

ldi r17, 0b00011001 ;4
sts portc_out,r17
clr r17
call Delay

ldi r17, 0b00010010 ;5
sts portc_out,r17
clr r17
call Delay

ldi r17, 0b00000011 ;6
sts portc_out,r17
clr r17
call Delay

ldi r17, 0b01011000 ;7
sts portc_out,r17
clr r17
call Delay

ldi r17, 0b00000000 ;8
sts portc_out,r17
clr r17
call Delay

ldi r17, 0b00011000 ;9
sts portc_out,r17
clr r17
call Delay

ldi r17, 0b01000000 ; zero
sts portc_out,r17
clr r17
call Delay

jmp petla


Delay:
ldi r17,1 ; zawartość acc2 = 0
ldi r16,50 ; zawartość acc = 0
ldi r18,245
jmp Del_0
Del_0 :
inc r16 ; zwiększ zawartość acc
brne Del_0 ; skocz gdy acc różne od 0
inc r17 ; zwiększ zawartość acc2
brne Del_0 ; skocz gdy acc2 różne od 0
inc r18
brne Del_0
ret

Zdaję sobie sprawę, że można to zupełnie inaczej napisać, ale staram się najpierw ogarnąć jego całkowite działanie.