RS485总线上有多个设备不同的通讯协议而且都会回复不同数据我的设备怎样从大量数据识别我的指令

在RS485总线上有多个设备,并且是不同的通讯协议,而且都会回复不同数据,我的设备怎样从大量数据中拿到我对应令关于串口接收大量数据,我的设备控制是两字节,到我设备接收我的... 在RS485总线上有多个设备,并且是不同的通讯协议,而且都会回复不同数据,我的设备怎样从大量数据中拿到我对应令关于串口接收大量数据,我的设备控制是两字节,到我设备接收我的控制指令时就处理,现在问题我的串口波特率是4800 所有大的指令都由上位机发出。我用的单片机 ST89C52 ,怎样才能保证不出错,串口响应快速。我用的串口中断就收,但是发现有时不能响应,有需要多发一次指定才能响应。
/*********************************************************

串行中断服务函数

*********************************************************/

void serial() interrupt 4
{
if(RI) //当接收完一个字节的数据后,RI会自动置位,即RI=1
{
uchar a;
RI=0; //接受中断标志软件清零
a=SBUF; //把缓存在单片机的数据给a
rxdata[count]=a; //将接受数据放入预置数组
count++; //数组自动递增,用于存储下一个数据
if(count==2) //当接收完功能码之后,自动清0,从新接收
{
if ((rxdata[0]==0xaa)&&(rxdata[1]>0))
{
flag_finish=1; //接受完功能码的标志位
}
else
{
flag_finish=0;
init();
}
count=0;

}
}
}
展开
 我来答
希望中学团委
2019-12-20 · TA获得超过185个赞
知道答主
回答量:147
采纳率:0%
帮助的人:4.4万
展开全部

RS485总线上有多个设备不同的通讯协议而且都会回复不同数据我的设备怎样从大量数据识别我的指令

RS-485多机通讯

在多机通信中,最重要的是保证通信有条不紊地进行,因此需要严格的通信协议和完善的通信软件。RS-485方式构成的多机通信系统采用主从式结构:主机控制多个从机,作为从机的单片机不主动发送命令或数据,一切都由主机单片机控制;并且在一个多机系统中,只有一台主机,各台从机之间不能相互通信,即使有信息交换也必须通过主机转发。采用RS-485构成的多机通信系统原理。

在总线末端接一个匹配电阻,吸收总线上的反射信号,使得正常传输信号无毛刺。匹配电阻的取值应该与总线的特性阻抗相当。在总线上没有信号传输时,总线处于悬浮状态,容易受干扰信号的影响。将总线上的差分信号的正端A+和负端B-之间接一个10K的电阻;负端B-和地间接一个10K的电阻,形成一个电阻网路。当总线上没有信号传输时,正端A+的电平大约为3.2V,负端B-的电平大约为1.6V,即使有干扰信号,也很难产生串行通信的起始信号0,从而增加了总线抗干扰的能力。(来于百度百科)

lycdl
高粉答主

2018-10-12 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4957万
展开全部
中断程序有点复杂,执行时间会变长,不能及时从中断程序中返回。
改进方法,1,不要接收完两个字节再判断,浪费时间,肯定会接收大量无用数据也经过判断再放弃。改成接收每个字节都判断是否为0xAA,不是,马上退出中断,是,再设置标志位,计数为1,保存,下次再接收才为第二个字节,再判断第二个字节对不对。对了,返回执行,不对,清除标志位。
2,中断程序千万不要再初始化,init();,延长返回时间不说,因为SCON=0x50;会清除RI标志位,可能在执行中断程序期间(因中断程序太长了)已经又接收了一个数据,也有Rl=1产生,但因初始化清除了RI,返回主程序就不再响中断了,结果丢了一个数据。假如恰好是0xAA,就丢了一次命令字节。
3,一个命令代码用两个字节表示,有点少,假如其它设备也发一个0xAA,就会误接收了。至少用4个字节,再加一个校验和,保证接收正确,万无一失。
4,用手机回答,纯手工输入,望采纳。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式