Konwersja czesci ulamkowej binarnej na BCD
Masz problem? Zapytaj na forum elektroda.pl
From: "Tomasz Bednarz" <tb_at_nospam_internet.pl>
Subject: Konwersja czesci ulamkowej binarnej na BCD
Date: Tue, 21 Jan 2003 21:05:54 +0100
Poszukuje algoytmu konwersji
czesci ulamkowej liczby binarnej 8 bitow
na lostac w kodzi BCD tak aby czesc ulamkowa moc wyswietlic
W zasadzie wystarczyloby mi konwertowac
czesc ulamkowa na liczbe 8 bitowa
reperzentujaca cyfry czesci dziesietnych i setnych
--
----------------------------------------------
Tomasz Bednarz
tb_at_nospam_internet.pl; tb_at_nospam_silesianet.pl
GG: 1230781; ICQ: 29732767
http://tb.silesianet.pl
----------------------------------------------
From: "Tomasz Bednarz" <tb_at_nospam_internet.pl>
Subject: Re: Konwersja czesci ulamkowej binarnej na BCD
Date: Fri, 24 Jan 2003 16:56:19 +0100
Użytkownik "Tomasz Bednarz" <tb_at_nospam_internet.pl> napisał w wiadomości
news:b0k9bp$rcn$1_at_nospam_portraits.wsisiz.edu.pl...
Poszukuje algoytmu konwersji
czesci ulamkowej liczby binarnej 8 bitow
na lostac w kodzi BCD tak aby czesc ulamkowa moc wyswietlic
W zasadzie wystarczyloby mi konwertowac
czesc ulamkowa na liczbe 8 bitowa
reperzentujaca cyfry czesci dziesietnych i setnych
przecież to proste
10110101=181
181/256=0,7070312
Wynik konwersji "normalnej" należy podzielić przez 256.
Tak tylko jak to podzielic?
Bo jezeli binarnie poprzesuwasz to masz znow 0,10110101 a mnie potrzeba w
BCD
trzebaby to chyba podzielic w FLOAT BCD
Ale takie dzielenie to kupa czasu !
Ja wykombinowalem cos innego
Poniewaz te liczbe ulamkowa mam z dokladnoscia do 0,03125 czyli do 5 bitu po
przecinku to moznaby pododawac wagi botow odpowiednie poprzesuwane ale wtedy
trzebaby dodawac wieeeelkie liczby - tez zle!
Ale mnie potrzeba dokladnosci do 2 miejsc po przecinku dlatego poobcinalem
wago tak:
0,50 0,25 0,12 0,06 0,03 i z takim dodawaniem mieszcze sie na jednym bajcie
zatem wyskrobalem cos takiego:
kod dla PICa
;----------------------------------------------------------------------- ;
FL2BIN - konwersja liczby binarnej ulamkowej 5 bitowej na reprezentacje
; ilosci setnych - z dokladnoscia do 2 miejsc po przecinku
; we : w
; wy : WYNIK
FRACT org 0x40
LICZ org 0x40
WYNIK org 0x40
;-----------------------------------------------------------------------
FL2BIN clrf WYNIK
movlw .5
movwf LICZ
F2B rlf FRACT,f
btfss STATUS,C
goto F2D
movf LICZ,W
call dek_fra
addwf WYNIK,f
F2D decfsz LICZ,f
goto F2B
return
dek_fra addwf PCL,f
retlw d'00'
retlw d'03'
retlw d'06'
retlw d'12'
retlw d'25'
retlw d'50'
;-----------------------------------------------------------------------
A moze ktos ma lepszy pomysl ?
TB
From: jfox_at_nospam_poczta.onet.pl (J.F.)
Subject: Re: Konwersja czesci ulamkowej binarnej na BCD
Date: Fri, 24 Jan 2003 21:19:23 GMT
On Fri, 24 Jan 2003 16:56:19 +0100, Tomasz Bednarz wrote:
Poszukuje algoytmu konwersji
czesci ulamkowej liczby binarnej 8 bitow
na lostac w kodzi BCD tak aby czesc ulamkowa moc wyswietlic
przecież to proste 10110101=181
181/256=0,7070312
Wynik konwersji "normalnej" należy podzielić przez 256.
Tak tylko jak to podzielic? Bo jezeli binarnie poprzesuwasz to masz
znow 0,10110101 a mnie potrzeba w BCD
trzebaby to chyba podzielic w FLOAT BCD
Ja wykombinowalem cos innego [...]
Ale po co tak ? przemnoz przez 10 [co jest wzglednie banalne - trzy
przesuniecia i jedno dodawanie]. To co wyjdzie "przed przecinkiem"
to pierwsza cyfra BCD. Reszte mnozysz przez 10 itd - az ci sie znudzi.
0,10110101*1010 = 111,00010010 -> 7
0,00010010*1010 = 0,10110100 -> 0
0,10110100*1010 = 111,00001000 -> 7
0,00001000*1010 = 0,01010000 -> 0
0,01010000*1010 = 11,00100000 -> 3
0,00100000*1010 = 1,01000000 -> 1
itd - ale skonczyc warto po 3 cyfrze [mozna zaokraglac], bo oryginal
jest niewiele bardziej dokladny
J.