微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > CC2530使用DYP-ME007TX超声波测距

CC2530使用DYP-ME007TX超声波测距

时间:10-02 整理:3721RD 点击:
各位大侠,这个问题困扰我好几天了,我觉得自己水平虽然不算高,但搞单片机程序开发应该还可以,可这个看上去简单的程序我一直都无法解决。

我用的是 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 <ioCC2530.h>
#include <string.h>

#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<msec;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<len;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;
}
}

在线等,大家给提个意见吧。

你先确定下串口驱动那边代码有没问题,先不要接超声波试试。

您所说的串口驱动是什么意思啊?这个模块波特率9600,我在IAR里都设置了,我用DHT11试验,都是可以取出数据的,但这个超声波的就不行。

那就是超声波那块配置有问题,你具体看下超声波代码什么地方影响了程序运行

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

本模块在使用中将占用单片机的一个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灯会在上电时闪一下,然后就再也不闪了。串口方面的例程我都练习过很多次,各种寄存器的配置都快背下来了,这个超声波的程序看上去很简单,但怎么也做不出来,要不我也不至于上论坛发帖问。

补充一下,程序里没有P0DIR那句,敲代码的时候写错了。

哥们,你的超声波现在可以用了吗?我也需要一份代码,如果你有,希望你联系我!1149194571 谢谢!

请加我QQ3228353609我是您买的模块厂家技术

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top