| 
 
初级会员 
 
	积分55金钱55 注册时间2019-7-17在线时间12 小时 | 
 
1金钱 
| 移植原子32的程序读取数据一直失败 
 //IO方向设置
 #define DHT11_IO_IN   P1DIR  &=~ BIT6//输入模式   DIR0时输入模式
 #define DHT11_IO_OUT  P1DIR|=BIT6  //输出模式
 ////IO操作函数
 #define        DHT11_DQ_OUT0   P1OUT  &=~  BIT6//输出0
 #define        DHT11_DQ_OUT1   P1OUT  |=  BIT6 //输出1
 #define        DHT11_DQ_IN     P1IN   &  BIT6 //读输入的电平
 
 
 
 
 void DHT11_Rst(void)        //复位DHT11
 {
 DHT11_IO_OUT;         //设置IO口为输出模式
 DHT11_DQ_OUT0;         //拉低DQ
 delay_us(9000);  //拉低至少18ms
 DHT11_DQ_OUT1;         //DQ=1
 delay_us(15);             //主机拉高20~40us
 
 }
 
 //等待DHT11的回应
 //返回1:未检测到DHT11的存在
 //返回0:存在
 unsigned char  DHT11_Check(void)
 {
 unsigned char retry=0;
 DHT11_IO_IN;//SET INPUT
 while (DHT11_DQ_IN&&retry<50)//DHT11会拉低40~80us
 {
 retry++;
 delay_us(1);
 };
 if(retry>=50)
 return 1;
 else
 retry=0;
 while (!DHT11_DQ_IN&&retry<50)//DHT11拉低后会再次拉高40~80us
 {
 retry++;
 delay_us(1);
 };
 if(retry>=50)
 return 1;
 return 0;
 }
 
 //从DHT11读取一个位
 //返回值:1/0
 unsigned char  DHT11_Read_Bit(void)
 {
 unsigned char retry=0;
 while(DHT11_DQ_IN&&retry<50)//等待变为低电平
 {
 retry++;
 delay_us(1);
 }
 retry=0;
 while(!DHT11_DQ_IN&&retry<50)//等待变高电平
 {
 retry++;
 delay_us(1);
 }
 delay_us(20);//大概等待40us
 if(DHT11_DQ_IN)return 1;
 else return 0;
 }
 //从DHT11读取一个字节
 //返回值:读到的数据
 unsigned char  DHT11_Read_Byte(void)
 {
 unsigned char i,dat;
 dat=0;
 for (i=0;i<8;i++)
 {
 dat<<=1;
 dat|=DHT11_Read_Bit();
 }
 return dat;
 }
 //从DHT11读取一次数据
 //temp:温度值(范围:0~50°)
 //humi:湿度值(范围:20%~90%)
 //返回值:0,正常;1,读取失败
 unsigned char  DHT11_Read_Data(unsigned char *temp,unsigned char *humi)
 {
 unsigned char buf[5];
 unsigned char i;
 DHT11_Rst();
 if(DHT11_Check()==0)
 {
 for(i=0;i<5;i++)//读取40位数据
 {
 buf[i]=DHT11_Read_Byte();
 }
 if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
 {
 *humi=buf[0];
 *temp=buf[2];
 }
 }else return 1;
 return 0;
 }
 
 //初始化DHT11的IO口 DQ 同时检测DHT11的存在
 //返回1:不存在
 //返回0:存在
 unsigned char DHT11_Init(void)//初始化DHT11
 {
 DHT11_IO_OUT;//P1.6设置为输出模式
 DHT11_DQ_OUT1;//p1.6输出高电平
 DHT11_Rst();  //复位DHT11
 return DHT11_Check();//等待DHT11的回应
 }
 
 
 
 | 
 |