add b ; x9
add b ; x10
dcx h ; спозиц. на единицы
add M ; прибавим единицы
mov c,a ; сохраним в (C)
inx h ;
inx h ; на сотни
mov l,M ; возьмем сотни
mvi h,0 ;
dad h ;
dad h ;
mov d,h ;
mov e,l ; :(DE)=x4
dad h ;
dad h ;
dad h ; (HL)=x32
xchg ;
RST 1 ;
xchg ; :(DE)=x36
dad h ; (HL)=x64
RST 1 ; (HL)=x100
mov e,c ; десятки и единицы
mvi d,0 ;
RST 1 ; сложим все.
RET ; выход с рез-том в (HL)
;----------------------------------
Get1DEC: in Port2C ; позиц. код (9-8) с дек. перекл.
cma ;
ani 00000011b ;
mov d,a ;
in Port2B ; позиц. код (7-0) с дек. перекл.
cma ;
mov e,a ;
ora d ;
JZ Check10 ; выход по нулю
mov a,e ;
call PosToBin8 ;
ora a ;
JNZ Check10 ; если уже есть число
mov a,d ;
call PosToBin8 ;
adi 8 ; учтем что это был ст. бойт
Check10: dcr a ; т.к. нулевая позиция = 1h
cpi 10 ; проверка пределов
RC ; выход если число в пределах 10
mvi a,9 ; ограничение
RET ;
ENDPROC ;
;----------------------------------
;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
; DISPLAY
; Обновление экрана согласно текущему режиму индикации.
;----------------------------------
Display PROC ;
lda IndMode ; режим
dcr a ;
rlc ; x2 байта
mov e,a ;
mvi d,0 ;
lxi h,Cur_PDmin ;
RST 2 ; споз. на нужный
mov c,M ;
mov b,M ;
call HexToDec ; в двоично-дес.
mov a,h ;
ani 0Fh ;
sta DDisp100 ; сотни
mov a,l ;
ani 0F0h ;
rrc ;
rrc ;
rrc ;
rrc ;
sta DDisp10 ; десятки
mov a,l ;
ani 0Fh ;
sta DDisp1 ; единицы
lda DDisp1 ;
call Recode7 ;
out Ind1 ; вывод в инд. '1'
lda DDisp10 ;
call Recode7 ;
out Ind10 ; вывод в инд. '10'
lda DDisp100 ;
call Recode7 ;
out Ind100 ; вывод в инд. '100'
RET ;
;----------------------------------
HexToDec: xra a ; преобр. 16-битного двоичного
mov h,a ; в двоично-десятичное
mov l,a ;
mov d,b ; (DE) - исх. число
mov e,c ;
mov c,a ;
mvi b,16 ; счетчик циклов
Cycle: xchg
dad h
xchg
mov a,l
adc l
daa
mov l,a
mov a,h
adc h
daa
mov h,a
mov a,c
adc c
daa
mov c,a
dcr b ; проверка конца цикла
JNZ Cycle ;
mov a,c ; на выходе (AHL)
ret ;
;---------------------------------Recode7: lxi h,Z_GEN ;
add L ; позиционируемся на символ
mov L,a ;
mvi a,0 ;
adc h ;
mov h,a ;
mov a,M ;
ret ; выход с кодом в (A)
ENDPROC ;
;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
; GETADATA
; Получим данные с двух входных каналов и положим в ADCdata1 и 2.
;----------------------------------
GetAData PROC ;
mvi a,4*2+1 ; PC4=1
out Port1RCW ; канал 1
call Delay5ms ; чтобы установилось напряжение
call ADCwork ; возьмем значение_1
shld Last_PD ; и сохраним
mvi a,4*2+0 ; PC4=0
out Port1RCW ; канал 2
call Delay5ms ; чтобы установилось напряжение
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.