G'day Steve, When I did this for my PIC 12C509 based DS1820 to RS-232 device, I multiplied by nine, divided by five, and then added thirty two. At the point in my code that I needed to do it, I had the measurement in degrees centigrade, scaled by one hundred, in a sixteen bit signed integer, such that 23.54 degrees is binary value for decimal 2354. pushl16 d'9' ; multiply by nine call sb_multiply pushl16 d'5' ; divide by five call sb_divide ; (therefore multiply by 1.8) call sb_nip ; drop remainder pushl d'128' ; add thirty two (3200) pushl d'12' call sb_add As you can see, the means by which the solution is expressed is very simple. It does depend on my stack math package, which uses an FSR/INDF stack of data, in the same way that FORTH programmers would use. Maybe this is a math library for you? This package is on the web at Observant types will notice that this conversion will corrupt the value if the intermediate result after multiplication by nine exceeds the signed integer size of fifteen bits. Anything above 36.40 degrees celcius, or 97.52 degrees fahrenheit, will not be converted properly. The DS1820 to RS-232 converter is described at -- James Cameron mailto:quozl@us.netrek.org http://quozl.netrek.org/ -- http://www.piclist.com hint: To leave the PICList mailto:piclist-unsubscribe-request@mitvma.mit.edu