binaris - decimalis szubrutin
Miko Imre
imre.miko at siemens.com
Thu Nov 3 11:05:16 CET 2005
Hello,
Ha assembly-ben kell, akkor innen mazsolazz:
http://majki.freeweb.hu/elektro/pic/progs/progs.htm
ezen belul is a math_104.zip tartalmazza azt, ami neked kell.
Modszer:
Fogod a 2 byte-os hexa szamodat, mondjuk legyen ez a 1910h
megszorzod a 10 annyiadik hatvanyaval, amennyi tizedesjegyet
az eredmenyben latni akarsz. Mondjuk ha 3-at, akkor 1000-el:
(5 lehet max, mert a 6 tizedes eseten a szorzas eredmenye mar nem fer el 32
biten, de ugy latom neked a 4 is eleg)
1910h * 1000 = 0061E680h
Ezutan eldobod az utolso byte-ot (osztod 256-al): 0061E6h
Ezt atalakitod BIN2BCD24 macro-val decimalisa,
akkor kapod a 25062 decimalis szamot. Kiiraskor meg kiteszed a tizedesjegyet
a megfelelo helyre: 25.062
Ja igen a negativ ertekeket eloszor viszgalni, kell, megjegyezni valahol,
hogy negativ es kepezni kell a kettes komplemenset.
Tehat valahogy igy megy ez nalam:
BARG16 <- 16 bites homerseklet
bcf FLAG_SIGN
CMPC16 BARG16, 32768
JB lb_positiv
NEG16 BARG16 ; negativ a szam -> negalom
bsf FLAG_SIGN ; es eltarolom, hogy negativ
lb_positiv MOVC16 AARG16, 1000 ; 1000-el szorozunk
MUL16 ; AARG16 * BARG16 eredmeny
az AARG32-be kerul
MOV24 BARG24, AARG24
BIN2BCD24
; eredmeny a AARGB0:AARGB1:AARGB2 regiszterekben, pl:
02:50:62 (BCD) azaz 025062 azaz 25.062
; kiiratas meg megnezni, hogy az elojel milyen, ennek
megfeleloen "-" jel kiir, aztan meg a szamok
Ja igen
A tobb byteos regiszterek nalam MSB first modon vannak tarolva,
es az egyes byte-okat kulon is el lehet erni, pl:
AARG32 = AARGB0:AARGB1:AARGB2:AARGB3
AARG24 = AARGB0:AARGB1:AARGB2
AARG16 = AARGB0:AARGB1
Udv
Imre
-----Original Message-----
From: elektro-bounces at tesla.hu [mailto:elektro-bounces at tesla.hu] On Behalf
Of b.joe
Sent: 2005.november 3. 6:39
To: elektro at tesla.hu
Subject: binaris - decimalis szubrutin
Hello elektro!
A kovetkezo kodolasra nem tud valaki egy binaris - decimalis atalakito
szubrutint?
PIC16fxxx-hez kellene,
Ketto regiszter lenne a bemenet es X regiszter lenne a kimenet.
Internally, this calculation is performed by the DS1624 to provide 0.03125 C
resolution.
The temperature reading is provided in a 13 bit,
two s complement reading by issuing READ TEMPERATURE command.
Table 2 describes the exact relationship of output data to measured
temperature.
The data is transmitted serially through the 2 wire serial interface, MSB
first.
The DS1624 can measure temperature over the range of -55 C to +125 C in
0.03125 C increments.
For Fahrenheit usage a lookup table or conversion factor must be used.
TEMPERATURE/DATA RELATIONSHIPS Table 2
TEMP DIGITAL OUTPUT (Binary) DIGITAL OUTPUT (Hex)
+125C 01111101 00000000 7D00h
+25.0625C 00011001 00010000 1910h
+0.5C 00000000 10000000 0080h
+0C 00000000 00000000 0070h
-0.5C 11111111 10000000 FF80h
-25.0625C 11100110 11110000 E6F0h
-55C 11001001 00000000 C900h
--
udv.:
jozsi
-----------------------------------
Szponzorunk: http://tonerbolt.hu/
More information about the Elektro
mailing list