本帖最后由 xianting77 于 2017-3-19 16:41 编辑
使用的网友们调试通过的代码,由于SHT 既有输出,又有输入,将其配置成双向口, 是否就不需要手动配置成,输入或者输入了啊,但是很被悲惨,我就是不能正确监测到DHT11 ,我的IO配置对么,是什么原因么,是否可以有高手帮忙指点迷津
//Reset DHT11
void DHT11_Rst(void)
{
// DHT11_IO_OUT();
//SET OUTPUT
DHT11_DATA_Clr(); //GPIOA.0=0
DH11_Write(0);
CyDelay(25);
//Pull down Least 18ms
DHT11_DATA_Set(); //GPIOA.0=1
CyDelayUs(20) ; //Pull up 20~40us
}
uint8_t DHT11_Check(void)
{
uint8_t retry=0;
volatile uint8_t temp,temp1;
//DHT11_IO_IN(); //SET INPUT
while (DHT11_DQ_IN&&retry<100) //DHT11 Pull down 40~80us
{
retry++;
Delay_us(1);
}
if(retry>=100)
return 1;
else
retry=0;
while (!DHT11_DQ_IN&&retry<100) //DHT11 Pull up 40~80us
{
retry++;
Delay_us(1);
}
if(retry>=100)
return 1; //chack error
return 0;
}
uint8_t DHT11_Read_Bit(void)
{
volatile uint8_t retry=0;
volatile uint8_t temp =0 ;
while(DHT11_DQ_IN&&retry<100) //wait become Low level
{
retry++;
Delay_us(1);
}
retry=0;
while(!DHT11_DQ_IN&&retry<100) //wait become High level
{
retry++;
Delay_us(1);
}
Delay_us(40);//wait 40us
// temp = DH11_Read();
if(DHT11_DQ_IN)
return 1;
else
return 0;
}
|