有关CC2530读出AM2302的问题,等待大侠的帮忙!

2020-01-30 14:04发布

我根据51C语言的程序写的,在CC2530中运行,得到的数据不管温度还是湿度都是53.5!!!!!!!!!!!! 谁有用过AM2302的请帮忙一下!我的代码贴出来,大家看看。

#include <ioCC2530.h>
#include <string.h>
#include "UART.H"

#define uint unsigned int
#define uchar unsigned char
#define Data P0_5

uint wen,shi;
uchar wbai,wshi,wge,sbai,sshi,sge,s,crc,i,j;
uint ww[16],ss[16],cc[8];

void Delay_us() //1 us延时
{
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");   
    asm("NOP");
    asm("NOP");
    asm("NOP");   
    asm("NOP");
    asm("NOP");
   
}

void Delay_10us() //10 us延时
{
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();   
}

void Delay_ms(uint Time)//n ms延时
{
  unsigned char i;
  while(Time--)
  {
    for(i=0;i<100;i++)
     Delay_10us();
  }
}
void Data_IN(void)
{
  P0SEL &= ~0x20;   //定义为普通IO口
  P0DIR &= ~0x20;   //定义为输入
  P0INP &= ~0x20;   //打开上拉
}
void Data_OUT(void)
{
  P0SEL &= ~0x20;   //定义为普通IO口
  P0DIR |=  0x20;   //义为输出
  P0INP &= ~0x20;   //打开上拉
}
void cton()
{
   wen=0;
   shi=0;
   for(j=0;j<16;j++)
    {
          wen=wen|(ww[j]<<(15-j));
    }
           for(j=0;j<16;j++)
    {
          shi=shi|(ss[j]<<(15-j));
    }
   wbai=wen%1000/100;
   wshi=wen%100/10;
   wge=wen%10;
   sbai=shi%1000/100;
   sshi=shi%100/10;
   sge=shi%10;

}
       

uint read_Sbit()
{
   Data_IN();
   while(!Data)
   Delay_us();
   Delay_us();
   Delay_us();
   Delay_us();
   Delay_us();
   Delay_us();
   Delay_us();
   Delay_us();
   Delay_us();
   if(0==Data)
   {
            return 0;
   }
   while(Data);

          return 1;
}
void read_Data()
{
  Data_OUT();
  Data=0;
  Delay_ms(20);
  Data=1;
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Data_IN();
    while(!Data)
    {

    }

    while(Data)
    {
                 
    }
                   
      for(j=0;j<16;j++)
      {
                  //shi=shi|((read_Sbit()<<j)&0xffff) ;
                  ss[j]=read_Sbit();

      }

          for(j=0;j<16;j++)
      {
                  //wen=wen|((read_Sbit()<<j)&0xffff) ;
                  ww[j]=read_Sbit();
      }

          for(j=0;j<7;j++)
      {
                  //crc=crc|((read_Sbit()<<j)&0xff) ;
                  cc[j]=read_Sbit();

      }

}
/***************************
          主函数
***************************/
void main(void)
{
        Delay_ms(1000);//让设备稳定
        InitUart();    //串口初始化
        while(1)
        {         

         read_Data();
         cton();
         UartSend_OneChar(wbai+0x30);
         UartSend_OneChar(wshi+0x30);
         UartSend_OneChar(wge+0x30);
         UartSend_OneChar(0x0d);
         UartSend_OneChar(0x0a);
         UartSend_OneChar(sbai+0x30);
         UartSend_OneChar(sshi+0x30);
         UartSend_OneChar(sge+0x30);
         UartSend_OneChar(0x0d);
         UartSend_OneChar(0x0a);
         UartSend_OneChar(0x0d);
         UartSend_OneChar(0x0a);
         
         Delay_ms(1000);  //延时,使周期性1S读取1次
       
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。