标题: 关于51单片机485通讯数组数据发送不成功的问题 [打印本页]
作者: yuyong 时间: 2018-11-20 15:06
标题: 关于51单片机485通讯数组数据发送不成功的问题
我在电脑上用串口助手发送了下图的这样一组数据。
55AA00 000101 00D900 000000 000000 000000 000025 646973 70 32 3a 30 32383435 00000d0a
现在需要用51单片机发送该组数据,希望也能达到串口助手里的设置的参数效果
波特率9600 ,校验位 无 数据位8 停止位1
16进制发送
单片机是51的,晶振11.0592
我想把这些数据存放在一个数组,然后通过485把数组发送出去,编了个程序如下:
#include"reg52.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
u8 jieshou[]={0x55,0xAA,0x00,0x00,0x01,0x01,0x00,0x09,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x64,0x69,0x73,0x70,
0x32,0x3A,0x30,0x32,0x38,0x34,0x35,0x00,0x00,0x0D,0x0A};
void main()
{
u8 i; //定义循环序号
u16 t; //定义延时参数
TMOD=0X20; //置T1定时器工作方式2
TH1=0xfd;TL1=0xfd; //置T1计数初值(波特率9600b/s)
SCON=0x40; //置串行方式1,禁止接收
PCON=0; //置SMOD=0
ET1=0; //禁止T1中断
ES=0; //禁止串行中断
TR1=1; //T1启动
while(1)
{
for(i=0;i<36;i++)
{
SBUF=jieshou[ i]; //串行发送一帧数据
while(TI==0); //等待一帧数据发送完成
TI=0; //清发送中断标志
for(t=0;t<11000;t++); //延时500ms
}
}
问题是:1)能否这样写在数组里??
2)为什么程序发送不成功?
请高人指点,如果这样不对程序应该怎么写?
作者: wulin 时间: 2018-11-20 21:45
用这个程序验证串口通讯没有什么问题,就是会无限循环发送36个16进制数。你在串口助手里看不到发送的数据可能是没有操作好串口助手。
作者: 小猫猫爱吃鱼 时间: 2018-11-20 22:56
把每一位的16进制数,用空格分开
作者: dzbj 时间: 2018-11-20 23:58
你没操作485片子 发送时要把485片子的管脚置1 具体哪个管脚你看一下手册
作者: 小小样 时间: 2018-11-21 00:10
程序应该没问题
作者: yuyong 时间: 2018-11-21 16:06
谢谢大家,搞了半天,串口助手里忘了把16进制显示勾上
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |