Fluke 2620A, 2625A user manual Appendices, Figure E-2. Floating Point Conversion

Models: 2625A 2620A

1 197
Download 197 pages 4.31 Kb
Page 185
Image 185

Appendices

E

Binary Upload of Logged Data (LOG_BIN?) (2625A only)

/* Import globals from main program */ extern int timestamp[];

extern int misc[]; extern float values[];

/*

-* convert(): Convert a LOG_BIN? array of binary data into useful data

**

**Converts BCD values to integer, raw floating point values into float

**values usable under the Intel x86 (IBM PC) architecture.

**

 

 

** Inputs:

 

**

src

Array of binary data, from LOG_BIN? query

**

length

Number of bytes in src array

**

 

 

** Outputs:

 

**

timestamp[]

Set to decimal timestamp values

**

misc[]

Set to temp units, rate, and digital I/O values

**

values[]

Set to floating point values found in binary data

**

 

(must be room for a maximum of 22 floats)

*/

 

 

void

convert(src, length) unsigned char *src; int length;

{

unsigned char *m; int n;

/* Convert timestamp from BCD to decimal */ for (n=0; n < 6; n++, src++) {

/* Binary Coded Decimal (BCD) format, packs the upper nibble as the

*/

/* tens digit, the lower nibble as the ones digit. Convert this

*/

/* into an integer number.

*/

timestamp[n] = (10 * (*src >> 4) + (*src & 0x0f));

}

/* Save temperature units, measurement rate, and digital I/O values */ for (n=0; n < 3; n++) {

misc[n] = *src++;

}

/* Convert raw measurement data into floating point */ m = (unsigned char *)values;

for (length -= 9; length > 3; length -= 4) {

#ifdef sun

/* SunOS architecture (also works for Motorola CPUs) */ *m++ = src[0];

*m++ = src[1]; *m++ = src[2]; *m++ = src[3];

#else

/* Assume Intel x86 architecture */ *m++ = src[3];

*m++ = src[2]; *m++ = src[1]; *m++ = src[0];

#endif

src += 4;

}

}

Figure E-2. Floating Point Conversion

E-5

Page 185
Image 185
Fluke 2620A, 2625A user manual Appendices, Figure E-2. Floating Point Conversion