Listing 2. Transmit Command Sequence void writeSHT1xCommand(int iMode) { unsigned char ucBitToCheck; unsigned char ucAckBit; driveDataLine(DATA_SHT); /* All 3 address bits always zero * so start with those */ writeSHT1xZero(DATA_SHT); udelay(2); writeSHT1xOne(SCK_SHT); udelay(2); writeSHT1xZero(SCK_SHT); writeSHT1xZero(DATA_SHT); udelay(2); writeSHT1xOne(SCK_SHT); udelay(2); writeSHT1xZero(SCK_SHT); writeSHT1xZero(DATA_SHT); udelay(2); writeSHT1xOne(SCK_SHT); udelay(2); writeSHT1xZero(SCK_SHT); /* Now transmit the 5 command bits, * in the order of MSb to LSb */ for (ucBitToCheck=0x10; ucBitToCheck != 0;) { if (iMode & ucBitToCheck) writeSHT1xOne(DATA_SHT); else writeSHT1xZero(DATA_SHT); udelay(2); writeSHT1xOne(SCK_SHT); udelay(2); writeSHT1xZero(SCK_SHT); ucBitToCheck >>= 1; } /* Now tri-state the data DIO so the * device can ACK the transfer */ tristateDataLine(DATA_SHT); udelay(2); writeSHT1xOne(SCK_SHT); udelay(2); ucAckBit = readSHT1x(DATA_SHT); writeSHT1xZero(SCK_SHT); mdelay(250); }