[求助] CC2530使用DYP-ME007TX超声波测距

sunburn6192   2014-2-25 14:46 楼主
各位大侠,这个问题困扰我好几天了,我觉得自己水平虽然不算高,但搞单片机程序开发应该还可以,可这个看上去简单的程序我一直都无法解决。

我用的是 DYP-ME007TX串口超声波测距模块,这个在淘宝上有不少,这个模块只有三个引脚,分别是VCC、GND和OUT,它的特点是:

模块内部每50ms进行一次测距,    并从引脚输出一帧,含4个8位数据,帧格式为:0XFF+H_DATA+L_DATA+SUM
      1.0XFF:  为一帧开始数据,用于判断。
      2.H_DATA:距离数据的高8位。
      3.L_DATA:距离数据的低8位。
      4.SUM:    数据和,用于效验。其0XFF+H_DATA+L_DATA=SUM(仅低8位)
    注:H_DATA与L_DATA合成16位数据,即以毫米为单位的距离值。

以上就是说明书中的参数。我使用CC2530来编程,想要把4个8位数据取出来。我用的是CC2530的P0.4口接收数据,烧入程序后用串口调试助手来看结果,可是一点儿输出都没有,单步运行也都是0,以下是我的程序,大家给找找问题吧。

#include
#include

#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr)[0])

typedef unsigned char uchar;
typedef unsigned int uint;

char RxBuf;
uchar count;
char RxData[33];

void DelayMS(uint msec)
{
  uint i,j;
  for(i=0;i     for(j=0;j<1070;j++);
}

void InitUart(void)
{
  PERCFG=0x00;
  P0SEL|=0x0c;    //P0用作串口
  P0DIR&=~0x10;   //P0.4定义为输入口
  P2DIR&=~0xc0;   //P0口优先座位UART0
  P2INP|=0x20;
  U0CSR|=0x80;    //设置为UART方式
  U0GCR|=11;
  U0BAUD|=216;    //波特率设为115200
  UTX0IF=0;   //UART0 TX中断标志初始置位0
  U0CSR|=0x40;    //允许接收
  IEN0|=0x84;   //开总中断,允许接收中断
}

void UartSendString(char *Data,int len)
{
  uint i;
  for(i=0;i   {
    U0DBUF=*Data++;
    while(UTX0IF==0);
    UTX0IF=0;
  }
}

#pragma vector=URX0_VECTOR
__interrupt void UART0_ISR(void)
{
  URX0IF=0;   //清中断标志
  RxBuf=U0DBUF;
}

void main(void)
{
  CLKCONCMD&=~0x40;   //设置系统时钟源为32M晶振
  while(CLKCONSTA&0x40);    //等待晶振稳定为32M
  CLKCONCMD&=~0x47;   //设置系统主时钟频率为32M
  
  InitUart();
  P0SEL&=0xef;
  memset(RxData,0,32);
  
  char str[9]="distance:";    //新增
  
  while(1)
  {
    if(RxBuf!=0&&count<32)
    {
      RxData[count++]=RxBuf;
      UartSendString(str,9);
      UartSendString(RxData,32);
    }
    else      
    {
      if(count>=32)
      {
        count=0;    //计数清零
        memset(RxData,0,32);
      }
    }
    RxBuf=0;
  }
}

回复评论 (8)

在线等,大家给提个意见吧。
点赞  2014-2-25 15:09
你先确定下串口驱动那边代码有没问题,先不要接超声波试试。
点赞  2014-2-25 23:21
引用: 合纵物联团队 发表于 2014-2-25 23:21
你先确定下串口驱动那边代码有没问题,先不要接超声波试试。

您所说的串口驱动是什么意思啊?这个模块波特率9600,我在IAR里都设置了,我用DHT11试验,都是可以取出数据的,但这个超声波的就不行。
点赞  2014-2-26 08:59
那就是超声波那块配置有问题,你具体看下超声波代码什么地方影响了程序运行
淘宝:https://viiot.taobao.com/Q群243090717 多年专业物联网行业经验,个人承接各类物联网外包项目
点赞  2014-2-26 11:33
引用: wateras1 发表于 2014-2-26 11:33
那就是超声波那块配置有问题,你具体看下超声波代码什么地方影响了程序运行

我都仔细看过了,这个测距模块是直接输出的,资料上是这么写的:

本模块在使用中将占用单片机的一个IO口,连接好电源后,模块内部每50ms进行一次测距,
    并从引脚OUT一帧,含4个8位数据,帧格式为:0XFF+H_DATA+L_DATA+SUM
      1.0XFF:  为一帧开始数据,用于判断。
      2.H_DATA:距离数据的高8位。
      3.L_DATA:距离数据的低8位。
      4.SUM:    数据和,用于效验。其0XFF+H_DATA+L_DATA=SUM(仅低8位)
    注:H_DATA与L_DATA合成16位数据,即以毫米为单位的距离值。


以我愚见,就是说输出是一个32位的字符串,直接就是距离。我把输出接在P02上,但就是接收不到数据。板子上的RX灯会在上电时闪一下,然后就再也不闪了。串口方面的例程我都练习过很多次,各种寄存器的配置都快背下来了,这个超声波的程序看上去很简单,但怎么也做不出来,要不我也不至于上论坛发帖问。
点赞  2014-3-12 15:18
补充一下,程序里没有P0DIR那句,敲代码的时候写错了。
点赞  2014-3-12 15:20
引用: sunburn6192 发表于 2014-3-12 15:20
补充一下,程序里没有P0DIR那句,敲代码的时候写错了。

哥们,你的超声波现在可以用了吗?我也需要一份代码,如果你有,希望你联系我!1149194571     谢谢!
点赞  2014-7-27 16:40
请加我QQ3228353609我是您买的模块厂家技术
点赞  2017-10-12 15:25
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复