[an error occurred while processing this directive]
|
;*********************************************************************
;2.Текст программы "bin16ASCII15"- преобразование 16-битного двоичного
;значения в неупакованный BCD формат
;*********************************************************************
;* Количество слов кода :22 + возврат
;* Количество циклов :60/220 (Мин/Макс) + возврат
;* Использованные младшие регистры :5 (fASCIIL/tASCII0,fASCIIH,tASCII2,
;* tASCII3,tASCII4)
;* Использованные старшие регистры :3 (cnt16a/tASCII1,tmp16a,tmp16b)
;*********************************************************************;***** Регистровые переменные подпрограммы
;* Примечания: 1. Переменные fASCIIL и tASCII0 должны размещаться в
;* одном регистре.
;* 2. Переменные cnt16a и tASCII1 должны размещаться в одном
;* регистре.
;* 3. Переменные, определгнные в младших регистрах могут быть
;* также определены и в старших регистрах..def fASCIIL =r11
.def tASCII0 =r11
.def fASCIIH =r12
.def tASCII2 =r13
.def tASCII3 =r14
.def tASCII4 =r15
.def tASCII1 =r16
.def cnt16a =r16
.def tmp16a =r17
.def tmp16b =r18;***** Код
bin2ASCII16:
ldi tmp16a, low(10000)
ldi tmp16b, high(10000)
rcall bin2ASCII_digit
mov tASCII4, cnt16a
ldi tmp16a, low(1000)
ldi tmp16b, high(1000)
rcall bin2ASCII_digit
mov tASCII3, cnt16a
ldi tmp16a, low(100)
ldi tmp16b, high(100)
rcall bin2ASCII_digit
mov tASCII2, cnt16a
ldi tmp16a, low(10)
ldi tmp16b, high(10)
bin2ASCII_digit:
ldi cnt16a, -1
bin2ASCII_digit_loop:
inc cnt16a
sub fASCIIL, tmp16a
sbc fASCIIH, tmp16b
brsh bin2ASCII_digit_loop
add fASCIIL, tmp16a
adc fASCIIH, tmp16b
ret
E-mail: info@telesys.ru