Микроконверторы фирмы Analog Devices в микропроцессорных приборных комплексах. Виноградов А.Б - 157 стр.

UptoLike

157
RLC A ; сдвиг байта на 1 бит с учетом CY
MOV @R1,A ;----------------------------------
INC R1 ;переход к более старшему байту
DJNZ B,RLCN_1 ;повторить для следующ байта
MOV B,PSW ;сохр флаги
MOV A,R1 ;
CLR C ;
SUBB A,#4 ;
MOV R1,A ;восст R1
MOV PSW,B ;восст флаги
RET
;-------------------------------------------------------------------------------
;Подпрограмма преобразования 32-разрядного двоичного целого числа без знака в
;5-байтное целое беззнаковое упакованное двоично-десятичное число.
; R0 - адрес буфера для результата, 5-байтного упакованного BCD числа.
; В старш половине @R0 - ед миллиардов, в младш половине @R0+5 - единицы.
;
; R1 - адрес 32-разрядного буфера с двоичным целым числом без знака.
; В @R1 - младший байт, в @R1+4 - старш байт.
;Использует подпрограммы: RLN32
;-------------------------------------------------------------------------------
B32BCD: MOV A,#5 ;
B32BCD_1: MOV @R0,#0 ;
INC R0 ;
DJNZ ACC,B32BCD_1 ;обнулили результат
DEC R0 ;
MOV A,#4 ;задаем кол-во байт двоичного числа
RL A ;
RL A ;
RL A ;
B32BCD_2: PUSH ACC ;
MOV B,#5 ;
CLR C ;
B32BCD_3: MOV A,@R0 ;
ADDC A,@R0 ;
DA A ;
MOV @R0,A ;
DEC R0 ;
DJNZ B,B32BCD_3 ;
MOV A,R0 ;
ADD A,#5 ;
MOV R0,A ;
LCALL RLN32 ;повернули исходное число на 1 бит влево
MOV A,@R0 ;
ADDC A,#0 ;
MOV @R0,A ;
POP ACC ;
DJNZ ACC,B32BCD_2 ;повторить для всех битов исходного числа
MOV A,R0 ;
INC A ;
SUBB A,#5 ;
MOV R0,A ;восстановили R0
RET
;-----------------------------------------------------------------------------
;Подпрограмма преобразования 5-байтового упакованного двоично-десятичн числа
;в 10-байтовое неупакованное двоично-десятичное число.
;R0 должен указывать на ст байт упакованного двоично-десятичного числа
;R1 должен указывать на ст байт (ед миллиардов) неупакованного двоичн-дес числа
;-----------------------------------------------------------------------------
BCD10BCD: MOV R2,#0 ;нач уст ст цикла
BCD10BCD_1: MOV A,@R0 ;---------------------
SWAP A ; выделяем ст тетраду
ANL A,#00001111b ;---------------------
MOV @R1,A ;
MOV A,@R0 ;---------------------