Смекни!
smekni.com

Микропроцессорное устройство управления электронными весами (стр. 3 из 3)

ldi r27,high(dysplay_table+8);дисплея в регистр X.

ldY+,r16; загрузка стоимости из памяти

ld Y+,r17

rjmpIntToStr

rjmpdisplay

;считывание данных с клавиатуры

l6: ldir26,low(key_table); загрузка начального адреса

ldi r27,high(key_table);таблицы скан-кодов

lde r17,0

l15: ld r16,X+

cpr16,scancode; расшифровка скан-кода

breql16; если нужный скан-код найден, переход к заполнению данных

inc r17

cpi r17,11

breq l18

rjmp l15

l18: cpi scancode,0xD7;обработка нажатия ввода

brnedisplay

ldir20,0

ldir28,low(dysplay_table +3); загрузка конечного адреса

ldir29,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

brnel19

ldir28,low(price); загрузка конечного адреса

ldir29,high(dysplay_table +3); символов, отображающих цену

st Y+,r16

st Y+,r17

jmp display

l16: mov key,r17

mov r17,pointer

cpi r17,0

brne l18

; если заполнение начато заново, обнуляется вся строка

ldir28,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);отображающейцену

ldir28,low(dysplay_table+6); загрузка адреса предпоследнего

ldir29,high(dysplay_table+6);символа строки, отображающей цену

ld r16,Y-

st X-,R16

ld r16,Y-

st X-,R16

ld r16,Y-

st X-,R16

stY,key; запись символа

ldi r16,1

add r17,r16

cpi r17,4

brlo l17

ldi r17,0

l17: mov pointer,r17

;отображение на дисплее

display: ldir26,low(dysplay_table); загрузка начального адреса буфера

ldi r27,high(dysplay_table);дисплея в регистр X.

ldir16,0x00; r16 используется для адресации индикатора

l8: ldr17,X+; r17 используется для временного хранения кода символа

andir16,0x0F

lslr17;формирование байта для отправки на дисплей

lsl r17

lsl r17

lsl r17

add r17,r16

out PORTC,r17

cpi r16,0x01

breq l9

cpi r16,0x05

breq l9

cpi r16,0x0A

breq l9

out PORTD,0x01;гашение запятой

rjmp l10

l9: outPORTD,0x00; отображение запятой

l10: cpi r16,0x0F

brne l8

;подпрограмма преобразования числа в строку

IntToStr: ldi r20,10

ldi r21,0

ITS4: cp r16,r20

cpc r17,r21

brlo ITS1

mov r18,r16

mov r19,r16

ldi r16,0

ldi r17,0

ITS2: cp r18,r20

cpc r19,r21

brlo ITS3

sub r18,r20

sbs r19,r21

inc r16

adc r17,r19

rjmp ITS2

ITS3: ld X+,r16

rjmp ITS4

ITS1: ld X+,r16

reti