各位大侠,这个问题困扰我好几天了,我觉得自己水平虽然不算高,但搞单片机程序开发应该还可以,可这个看上去简单的程序我一直都无法解决。
我用的是 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;
}
}
你先确定下串口驱动那边代码有没问题,先不要接超声波试试。
您所说的串口驱动是什么意思啊?这个模块波特率9600,我在IAR里都设置了,我用DHT11试验,都是可以取出数据的,但这个超声波的就不行。
那就是超声波那块配置有问题,你具体看下超声波代码什么地方影响了程序运行
淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
我都仔细看过了,这个测距模块是直接输出的,资料上是这么写的:
本模块在使用中将占用单片机的一个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我是您买的模块厂家技术