er, r16
jmp display
; перерахунок даних
l7: in r16, low (ADC); читання АЦП
in r17, high (ADC)
; перерахунок одиниць АЦП в реальну вагу. Вага дорівнює 1000 * ADC/1024, операції множення і ділення на константу реалізовані шляхом операцій зсуву і віднімання
mov r18, r16
mov r19, r17
lsl r16
rol r17
lsl r16
rol r17
lsl r16
rol r17
lsl r16
rol r17
lsl r16
rol r17
lsl r16
rol r17
sub r16, r18
sbc r17, r19
sub r16, r18
sbc r17, r19
sub r16, r18
sbc r17, r19
lsr r17
ror r16
lsr r17
ror r16
lsr r17
ror r16
lsr r17
ror r16
lsr r17
ror r16
lsr r17
ror r16
ldi r26, low (weight)
ldi r27, high (weight)
st X +, r16
st X +, r17
; розрахунок вартості
ld X +, r18; завантаження значення ціни з пам'яті
ld X +, r19; завантаження значення ціни з пам'яті
ldi r20, 0
ldi r21, 0
ldi r22, 0
ldi r23, 0
ldi r24, 0
ldi r25, 0
ldi r0, 0
ldi r2, 0
ldi r3, 0
; множення ціни на вага
l11: add r20, weight_l
adc r21, weight_h
adc r22, r0
adc r23, r3
inc r24
adc r25, r0
cp r24, r18
cpc r25, r19
brne l11
; розподіл на тисячу
l12: ldi r24, 0xE8
ldi r25, 0x03
cp r20, r24
cpc r21, r25
ldi r24, 0
cpc r22, r24
cpc r23, r24
brne l13
ldi r24, 0xE8
sub r20, r24
sbc r21, r25
sbc r22, r0
sbc r23, r0
ldi r24
add r2, r24
adc r3, r0
rjmp l12
l13: st X +, r20; завантаження вартості в пам'ять
st X +, r21
; перетворення чисел в символи
ldi R26, low (dysplay_table); завантаження початкової адреси буфера
ldi R27, high (dysplay_table); дисплея в регістр X.
ldi r16, 0; заповнення буфера нульовими символами
ldi r17, 0
cpi r16, 16
brlo l14
st X, r17
inc К16
l14: ldi r28, low (weight)
ldi r29, high (weight)
ld Y +, r16; завантаження ваги з пам'яті
ld Y +, r17
rjmp IntToStr
ldi r26, low (dysplay_table +4); завантаження початкової адреси буфера
ldi r27, high (dysplay_table +4); дисплея в регістр X.
ld Y +, r16; завантаження ціни з пам'яті
ld Y +, r17
rjmp IntToStr
ldi r26, low (dysplay_table +8); завантаження початкової адреси буфера
ldi r27, high (dysplay_table +8); дисплея в регістр X.
ld Y +, r16; завантаження вартості з пам'яті
ld Y +, r17
rjmp IntToStr
rjmp display
; зчитування даних з клавіатури
l6: ldi r26, low (key_table); завантаження початкової адреси
ldi r27, high (key_table); таблиці скан-кодів
lde r17, 0
l15: ld r16, X +
cp r16, scancode; розшифровка скан-коду
breq l16; якщо потрібний скан-код знайдений, перехід до заповнення даних
inc r17
cpi r17, 11
breq l18
rjmp l15
l18: cpi scancode, 0xD7; обробка натискання введення
brne display
ldi r20, 0
ldi r28, low (dysplay_table +3); завантаження кінцевого адреси
ldi r29, high (dysplay_table +3); символів, що відображають ціну
; переклад даних з строкового виду в числовий
l19: ld r16, Y-
ldi r17, 0
mov r18, r16
mov r19, r17
lsl r16
rsl r17
lsl r16
rsl r17
lsl r16
rsl r17
lsl r16
rsl r17
add r16, r18
adc r17, r19
add r16, r18
adc r17, r19
ld r18, Y
ldi r19, 0
add r16, r18
adc r17, r19
inc r20
cpi r20, 3
brne l19
ldi r28, low (price); завантаження кінцевого адреси
ldi r29, high (dysplay_table +3); символів, відображають ціну
st Y +, r16
st Y +, r17
jmp display
l16: mov key, r17
mov r17, pointer
cpi r17, 0
brne l18
; якщо заповнення розпочато заново, обнуляється вся рядок
ldi r28, low (dysplay_table); завантаження початкової адреси символів,
ldi r29, high (dysplay_table); відображають ціну
ldi r16, 0
st Y +, r16
st Y +, r16
st Y +, r16
st Y +, r16
ldi r26, low (dysplay_table +7); завантаження адреси кінця рядка,
ldi r27, high (dysplay_table +7); отображающей ціну
ldi r28, low (dysplay_table +6); завантаження адреси перед...