DSP读取DHT22数据

2019-07-16 16:37发布

DSP288335采用30M晶振的情况下,进行DHT22温湿度传感器数据读取,部分程序如下:
void COM(void)
{
Uint16 i;
comdata=0;
GpioCtrlRegs.GPADIR.bit.GPIO3=0;
for(i=0;i<8;i++)
{
  FLAG=0xFF02;
  while((!GpioDataRegs.GPADAT.bit.GPIO3)&&FLAG++);
  DELAY_US(10);
  DELAY_US(10);
  DELAY_US(10);
  temp=0;
  if(GpioDataRegs.GPADAT.bit.GPIO3)
  {
   temp=1;
   FLAG=0xFF02;
  }
  while((GpioDataRegs.GPADAT.bit.GPIO3)&&FLAG++);
  if(FLAG==0x0001)
   break;          //判断数据位是0还是1
  //如果高电平高过预定0高电平值则数据位为1
  comdata<<=1;
  comdata|=temp;
}
for(i=0;i<8;i++)
{
  comdata<<=1;
}
comdata=comdata&0x00FF;
}
void DHT22_RH(void)
{
GpioCtrlRegs.GPAMUX1.bit.GPIO3=0;//将GPIO设置成普通通用口
GpioCtrlRegs.GPADIR.bit.GPIO3=1;
GpioDataRegs.GPADAT.bit.GPIO3=0;
DELAY_US(600);
GpioDataRegs.GPADAT.bit.GPIO3=1;
DELAY_US(40);
GpioDataRegs.GPADAT.bit.GPIO3=1;
GpioCtrlRegs.GPADIR.bit.GPIO3=0;
if(!GpioDataRegs.GPADAT.bit.GPIO3)
{
  FLAG=0xFF02;
  while((!GpioDataRegs.GPADAT.bit.GPIO3)&&FLAG++);
  FLAG=0xFF02;
  while((GpioDataRegs.GPADAT.bit.GPIO3)&&FLAG++);
  COM();
  RH_data_H_temp=comdata;
  COM();
  RH_data_L_temp=comdata;
  COM();
  T_data_H_temp=comdata;
  COM();
  T_data_L_temp=comdata;
  COM();
  checkdata_temp=comdata;
  GpioCtrlRegs.GPADIR.bit.GPIO3=1;
  GpioDataRegs.GPADAT.bit.GPIO3=1;
  //数据校检
  temp=(T_data_H_temp+T_data_L_temp+RH_data_H_temp+RH_data_L_temp);
  if(temp==checkdata_temp)
  {
   RH_data_H=RH_data_H_temp;
   RH_data_L=RH_data_L_temp;
   T_data_H=T_data_H_temp;
   T_data_L=T_data_L_temp;
   checkdata=checkdata_temp;
  }
}
DHT22DATA[0]=RH_data_H;//将温湿度数据存储在DHT22DATA中
DHT22DATA[1]=RH_data_L;
DHT22DATA[2]=T_data_H;
DHT22DATA[3]=T_data_L;
}
为什么读出来的数据不正确
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。