Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

BIN16BCD5 - някакви идеи ?!
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=2874
Страница 1 от 1

Автор:  me40 [ Пон Сеп 11, 2006 1:23 pm ]
Заглавие:  BIN16BCD5 - някакви идеи ?!

Здравейте !
Някакви други идеи за преобразуване на 16 бит. число в двойно-десетично.
Аз го правя по следният начин:
BIN16BCD5 macro BIN_DIG_H, BIN_DIG_L
local end_conv
local ch_10000
local ch_1000
local ch_100
local ch_10
local lp_1000
local lp_100
local lp_10
movff BIN_DIG_H,DIG_10
movff BIN_DIG_L,DIG_1
clrf DIG_100
clrf DIG_1000
clrf DIG_10000
ch_10000
SUBLF D'10000',DIG_10,DIG_1
bnc ch_1000
incf DIG_10000,f
bra ch_10000
ch_1000
ADDLF D'10000',DIG_10,DIG_1
lp_1000
SUBLF D'1000',DIG_10,DIG_1
bnc ch_100
incf DIG_1000,f
bra lp_1000
ch_100
ADDLF D'1000',DIG_10,DIG_1
lp_100
SUBLF D'100',DIG_10,DIG_1
bnc ch_10
incf DIG_100,f
bra lp_100
ch_10 ADDLF D'100',DIG_10,DIG_1
lp_10
movlw D'10'
subwf DIG_1,w
bnc end_conv
movwf DIG_1
incf DIG_10,f
bra lp_10
end_conv
endm


SUBLF macro Literal_16, Dest_H, Dest_L
movlw LOW (Literal_16)
subwf Dest_L,f
movlw HIGH (Literal_16)
subwfb Dest_H,f
endm

ADDLF macro Literal_16, Dest_H, Dest_L
movlw LOW (Literal_16)
addwf Dest_L,f
movlw HIGH (Literal_16)
addwfc Dest_H,f
endm
Но в действителност проц. ми увисва, а при преобразуването на 8-бит нямам никакви проблеми (по същият метод)

Ако някой може да приложи код (по друг начин) или да сподели идея.

Автор:  Ки4о [ Пон Сеп 11, 2006 1:48 pm ]
Заглавие: 

Аз ползвам следното :
Входни регистри:
binh_reg
binl_reg
Изходни регистри:
tenk_reg
thous_reg
hund_reg
tens_reg
ones_reg

Програма:

conv_16bin_bcd
banksel binh_reg
swapf binh_reg,w
andlw B'00001111'
addlw B'11110000'
movwf thous_reg
addwf thous_reg,f
addlw H'E2'
movwf hund_reg
addlw H'32'
movwf ones_reg
movf binh_reg,w
andlw B'00001111'
addwf hund_reg,f
addwf hund_reg,f
addwf ones_reg,f
addlw H'E9'
movwf tens_reg
addwf tens_reg,f
addwf tens_reg,f
swapf binl_reg,w
andlw B'00001111'
addwf tens_reg,f
addwf ones_reg,f
rlf tens_reg,f
rlf ones_reg,f
comf ones_reg,f
rlf ones_reg,f
movf binl_reg,w
andlw B'00001111'
addwf ones_reg,f
rlf thous_reg,f
movlw H'07'
movwf tenk_reg
movlw H'0A'
label1 addwf ones_reg,f
decf tens_reg,f
btfss STATUS,C
goto label1
label2 addwf tens_reg,f
decf hund_reg,f
btfss STATUS,C
goto label2
label3 addwf hund_reg,f
decf thous_reg,f
btfss STATUS,C
goto label3
label4 addwf thous_reg,f
decf tenk_reg,f
btfss STATUS,C
goto label4
retlw 0

Работи без проблеми.Айде успех :wink:

Автор:  Gogo [ Пон Сеп 11, 2006 2:11 pm ]
Заглавие: 

Търси тук: http://www.piclist.com/techref/microchip/routines.htm - има всичко каквото ти трябва :D По-точно:"Conversions"
Е това ми харесва: [url]http://www.piclist.org/techref/postbot.asp?by=time&id=piclist\1999\06\05\113527a[/url]

Автор:  me40 [ Пон Сеп 11, 2006 3:04 pm ]
Заглавие: 

Да, 24 - бит и на мен ми допада !
Довечера ще пробвам.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/