I think that I solved this...
From include file FP32.A18:
Code:
; 32 bit floating point representation
; EXPONENT 8 bit biased exponent
; It is important to note that the use of biased exponents produces
; a unique representation of a floating point 0, given by
; EXP = HIGHBYTE = MIDBYTE = LOWBYTE = 0x00, with 0 being
; the only number with EXP = 0.
; HIGHBYTE 8 bit most significant byte of fraction in sign-magnitude representation,
; with SIGN = MSB, implicit MSB = 1 and radix point to the right of MSB
; MIDBYTE 8 bit middle significant byte of sign-magnitude fraction
; LOWBYTE 8 bit least significant byte of sign-magnitude fraction
; EXPONENT HIGHBYTE MIDBYTE LOWBYTE
; xxxxxxxx S.xxxxxxx xxxxxxxx xxxxxxxx
; |
; RADIX
; POINT
IeeFormat:
http://www.h-schmidt.net/FloatConverter/IEEE754.html
As you can see in IEE format, only 7 bit of exponent is in first byte, so bit 23 should be shifted to first bit of byte3, when shifting to right exponent.
Here is binary for 23.75:
Code:
IEE 41BE0000 = 01000001 10111110 00000000 00000000
MCHIP 833E0000 = 10000011 00111110 00000000 00000000
Darel 82BE0000 = 10000010 10111110 00000000 00000000
As you can see Darrel's code set sign instead of first bit of exponent.
Here is my code, done in PBP
Code:
MyIEEEtoMCHIP:
B.BYTE0=A.BYTE0
B.BYTE1=A.BYTE1
B.BYTE2=A.BYTE2 : B.23=A.31 'SIGN
B.BYTE3=A.BYTE3<<1 : B.24=A.23
RETURN
A-IEEE
B-Microchip
I'll try to fix Darrel's macro.
Bookmarks