// 读取DHT11传送的5个字节,但只返回湿度值 unsigned char getAllBytes(void) { unsigned char temp, loopCount; unsigned char tempHHigh, tempHLow, tempTHigh, tempTLow, tempCheckSum; unsigned char returnData; //如果读取湿度不成功,则返回0xff,否则返回相对湿度值 returnData = 0xff; //主机拉低20ms (要求大于18ms) DHT11=0; delay100us(200); DHT11=1; //总线由上拉电阻拉高 主机延时20us delay10us(); delay10us(); delay10us(); delay10us(); //主机设为输入 判断从机响应信号 DHT11=1; //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!DHT11) { loopCount = 200; //判断从机是否发出 80us 的低电平响应信号是否结束,或是否超时 while( !DHT11 && loopCount-- ); loopCount = 200; //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态,或是否超时 while( DHT11 && loopCount-- ); //数据接收状态 tempHHigh = getOneByte(); tempHLow = getOneByte(); tempTHigh = getOneByte(); tempTLow = getOneByte(); tempCheckSum = getOneByte(); DHT11=1; //数据校验 temp = tempHHigh + tempHLow + tempTHigh + tempTLow; if( temp == tempCheckSum && temp>0 ) { // 数据有效 返回湿度 returnData = tempHHigh; } }// end if return returnData; }
void test_setOneByteWithWriteMask(void) { i2c_setRegister(4,0); i2c_setRegisterReadWriteMasks(4,0x00,0xF0); setOneByte(address,4,0xFF); TEST_ASSERT_EQUAL_HEX8(0x0F,getOneByte(address,4)); }
void test_setOneByteIsCorrect(void) { setOneByte(address,1,43); TEST_ASSERT_EQUAL_UINT8(43,getOneByte(address,1)); }
void test_getOneByteIsCorrect(void) { i2c_setRegister(3,26); TEST_ASSERT_EQUAL_UINT8(26,getOneByte(address,3)); }