private void write4bits(byte value) { UInt16 registerValue; registerValue = MCP.readGPIOAB(); // speed up for i2c since its sluggish for (int i = 0; i < 4; i++) { registerValue &= (UInt16) ~(1 << DataPins[i]); registerValue |= (UInt16)(((value >> i) & 0x1) << DataPins[i]); } // make sure enable is low registerValue &= (UInt16) ~(1 << EnablePin); MCP.writeGPIOAB(registerValue); pulseEnable(); }