Пример #1
0
// 读取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;

}
Пример #2
0
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));
}
Пример #3
0
void test_setOneByteIsCorrect(void)
{
  setOneByte(address,1,43);
  TEST_ASSERT_EQUAL_UINT8(43,getOneByte(address,1));
}
Пример #4
0
void test_getOneByteIsCorrect(void)
{
  i2c_setRegister(3,26);
  TEST_ASSERT_EQUAL_UINT8(26,getOneByte(address,3));
}