EasyManua.ls Logo

Fluke 2620A - E-2. Floating Point Conversion

Fluke 2620A
197 pages
To Next Page IconTo Next Page
To Next Page IconTo Next Page
To Previous Page IconTo Previous Page
To Previous Page IconTo Previous Page
Loading...
Appendices
Binary Upload of Logged Data (LOG_BIN?) (2625A only)
E
E-5
/* 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

Table of Contents

Related product manuals