Sample drivers, 2 sample drivers – Sensoray 118 User Manual
Page 14

Sensoray Model 118 Smart A/D™ Instruction Manual
12
Programming
#define CMD_SET_GAGEZERO 176 /* SET GAGE ZERO */
#define CMD_SET_COEFFS 192 /* SET COEFFICIENTS */
#define CMD_SET_GAGESPAN 208 /* SET GAGE SPAN */
#define CMD_EXTENDED 240 /* EXTENDED OPCODE PREFIX */
// ====== EXTENDED COMMAND OPCODES ======
#define XCMD_GET_PRODUCTID 4 /* GET MODEL NUMBER */
#define XCMD_GET_VERSION 5 /* GET FIRMWARE VERSION */
#define XCMD_SET_HISPEED 8 /* SWITCH TO HIGH SPEED MODE */
// ====== STATUS REGISTER BIT MASKS ======
#define STATUS_CRMT 0x80 /* Command Register eMpTy */
#define STATUS_DAV 0x40 /* Data AVailable */
#define STATUS_ALRM 0x20 /* ALaRM sounding */
#define STATUS_FLT 0x10 /* board FauLT or reset */
// ====== SENSOR DEFINITION CODES ======
#define TYPE_TC_K 0x1C /* K thermocouple, 0.1 C/bit */
// ====== SENSOR SCALARS ======
#define SCALAR_VOLTS_5 0.0002 /* 5V range, 200uV/bit */
#define SCALAR_TC_K 0.1000 /* K thermocouple, 0.1C/bit */
5.3.2 Sample Drivers
// Handshake a command byte to the command register.
VOID SendByte( USHORT BasePort, UCHAR cmd_byte )
{
while ( !( inp( BasePort + 1 ) & STATUS_CRMT ) ); // wait for CRMT
outp( BasePort, cmd_byte ); // send command byte
}
// Handshake a response byte from the data register.
UCHAR ReadByte( USHORT BasePort )
{
while ( !( inp( BasePort + 1 ) & STATUS_DAV ) ); // wait for DAV
return inp( BasePort ); // read response byte
}
// Send a 16-bit integer value to Smart A/D board.
VOID SendWord( USHORT BasePort, SHORT Value )
{
SendByte( BasePort, ( Value >> 8 ) & 0xFF ) // send high byte
SendByte( BasePort, Value & 0xFF ) // send low byte
}
// Fetch a 16-bit integer value from Smart A/D board.
SHORT ReadWord( USHORT BasePort )
{
SHORT val = (SHORT) ReadByte( BasePort ) << 8; // read high byte
return val | (SHORT) ReadByte( BasePort ) ); // read low byte
{
// Reset Smart A/D board.
VOID ResetBoard( USHORT BasePort )
{
outp( BasePort + 1, 0 ); // reset the board
while ( inp( BasePort + 1 ) & STATUS_FLT ); // wait for FLT to clear
{