搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2013-3-16 10:27:41 | 显示全部楼层 |阅读模式
我根据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次
       
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-3-16 10:37:55 | 显示全部楼层
这个不错,楼主V587,楼主给力;
但是我不懂,上面就是意见
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-22 03:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表