[an error occurred while processing this directive] [an error occurred while processing this directive]
Есть 3байта BIN в 4байта BCD, переделка в то, что нужно займет минут 10:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Baser 17 мая 2002 г. 13:39
В ответ на: А нет ли у кого проги на тему BIN to BCD для PIC 4-байтное двоичное число в двоично-десятичное (5-байтное) отправлено sgeraschenko 16 мая 2002 г. 20:46


;---------------------------------------------------------------;
; Binary to BCD convert 3-byte number ;
; Input: MTR3:MTR2:MTR1 - input binary 3-byte number, ;
; Output: MTR7:MTR6:MTR5:MTR4 - output BCD 4-byte number, ;
; Temp: MTR8,FSR - temporary registers. ;
;---------------------------------------------------------------;
BinBCD3:clrf MTR4
clrf MTR5
clrf MTR6
clrf MTR7
movlw 24 ; 24 shift steps
movwf MTR8

bcd30: bsf MTR8,7 ; 4 Out registers
movlw MTR4
movwf FSR
bcf STATUS,C
rlf MTR1
rlf MTR2
rlf MTR3
rlf MTR4
rlf MTR5
rlf MTR6
rlf MTR7

decf MTR8
movf MTR8,W
andlw b'00011111'
btfss STATUS,Z
goto bcd31
return

bcd31: swapf INDF,W
addlw 0B0h
btfss STATUS,C
goto bcd32
movlw 03h ; Out low nibble >= 5
addwf INDF

bcd32: movf INDF,W
addlw 0B0h
btfss STATUS,C
goto bcd33
movlw 30h ; Out high nibble >= 5
addwf INDF

bcd33: incf FSR
movlw 20h
subwf MTR8
movf MTR8,W
andlw b'11100000'
btfss STATUS,Z
goto bcd31
goto bcd30
;---------------------------------------------------------------;

для переделки увеличь число регистров, кол-во сдвигаемых регистров и число сдвигов с 24 до 32-х

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru