本人新手一只,刚接触
单片机一个多月,接到一个大创项目是做便携式激光测距仪,于是我们在大淘宝上淘到一激光测距模块。
模块的
波特率9600bps, 8位数据位,1位起始位,一位停止位,无奇偶校验,买时自带ttl转USB串口
我们拿到模块开始用电脑测试,用串口调试助手直接发送上电代码,在发送单次测量即可返回测距距离的代码(以后只发送单次测量代码即可开始测量无需发送上电),随后我们将供电线,地线,rxd和txd分别接入单片机
开发板上,确定供电无问题,将读写线直接接到单片机的数据读写串口,并烧入以下程序(第一部只是为了测试模块在单片机控制下正常工作,所以没有编写写入程序),但无法使模块工作。
程序如下:
(已知程序中所编写字符串能正常发送给电脑)
#include<reg51.h>
unsigned char PuZh[16] = "80 06 02 78";//单次测量代码,用电脑操控便是以hex格式发送它
//--声明全局函数--//
void UsartConfigura
tion();
void Delay10ms(unsigned int c); //误差 0us
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
unsigned char i;
UsartConfiguration();
while(1)
{
for(i=0; i<11; i++)
{
SBUF = PuZh
; //将要发送的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
Delay10ms(500); //延时一下再发
}
}
/*******************************************************************************
* 函 数 名 :UsartConfiguration()
* 函数功能 :设置串口
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF9;
TL1=0XF9;
// ES=1; //打开接收中断
// EA=1; //打开总中断
TR1=1; //打开计数器
}
/*******************************************************************************
* 函 数 名 : Delay10ms
* 函数功能 : 延时函数,延时10ms
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Delay10ms(unsigned int c) //误差 0us
{
unsigned char a, b;
//--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
for (;c>0;c--)
{
for (b=38;b>0;b--)
{
for (a=130;a>0;a--);
}
}
}
这是该模块给的通信协议:
激光测距模块通讯协议波特率9600bps, 8位数据位,1位起始位,一位停止位,无奇偶校验.(波特率最好可以通过软件设置,用户可以自己设定,请提供设置命令) 功能描述命令代码返回代码备注读取参数FA 06 01 FFFA 06 81 ADDR xx xx xx..... CS读取常数,地址,回光量,温度读取机器号FA 06 04 FCFA 06 84 “DAT1 DAT2……DAT16”CSDATn为ASCII格式设置地址FA 04 01 ADDR CSFA 04 81 81操作成功FA 84 81 02 FF写入地址错误返回距离修改FA,04,06,符号(正或者负,负为0x2d,正为0x2b),0xXX(修正值,一个字节),CSFA,04,8B,77 操作成功FA,84,8B,01,F6操作失败设置数据返回时间间隔FA 04 05 MeaInterver CSFA 04 85 7D操作成功FA 84 85 01 FC写入时间间隔错误FA 84 85 01 FA操作失败设置距离起止点FA 04 08 Position CSFA 04 88 7A操作成功FA 84 88 01 F9操作失败设定量程FA 04 09 Range CSRange : 02,05,10,20,50,80FA 04 89 79操作成功FA 84 89 01 F8操作失败设定频率FA 04 0A Freq CSFreq : 03 10 20FA 04 8A 78操作成功FA 84 8A 01 F7操作失败设定分辨率FA 04 0C Resolution CSResolution :1(1mm),2(0.1mm)FA 04 8C 76操作成功FA 84 8C 01 F5操作失败设定上电即测FA 04 0D Start CSStart : 0(关闭),1(开启)FA 04 8D 75操作成功FA 84 8D 01 F4操作失败单次测量ADDR 06 02 CSADDR 06 82”3X 3X 3X 2E 3X 3X 3X”CS正确返回ADDR 06 82”’E’ ’R’ ’R’ ’-’ ’-’ ’3X’ ’3X’ ”CS错误返回连续测量ADDR 06 03 CSADDR 06 83” 3X 3X 3X 2E 3X 3X 3X”CS正确返回ADDR 06 83” ’E’ ’R’ ’R’ ’-’ ’-’ ’3X’ ’3X’”CS错误返回关机ADDR 04 02 CSADDR 04 82 CS 注:以上命令及返回数据均为16进制格式 · ADDR 为机器地址·Postion为1时由顶端算起,为0时由尾端算起,默认设置为尾端(程序中有测距仪长度,由距离修正到顶端后,再加此长度即可设置到尾端)·CS 为校验字节,其为前面所有字节求和,返回取反加1在单次测量和连续测量返回数据中,引号中为数据部分,其格式为ASCII格式 如:123.456米 显示为31 32 33 2E 34 35 36ADDR 默认值为80(128) 参数为出厂设置时,读取数据的命令:单次测量:80 06 02 78连续测量:80 06 03 77关机:80 04 02 7A
谢谢,期待啊。。。。项目还有一段时间,望大神帮帮吗
一周热门 更多>