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