RS485总线工作流程

485总线是一主多听的形式,必然分主机程序和从机程序。

在主机程序中需要做的就是发送从机地址,并开启串口中断,等待从机响应。

而从机首先出于接收状态,当总线有数据传输时,相应中断。对数据进行拆包(检验包头,帧头是否正确),读取地址数据存入全局变量,并与本机地址进行对比,正确函数则返回0x01,错误函数则返回0x00,广播地址则返回0x02。以上为从机中中断函数做的事,而从机的主函数则一直检验函数的返回值是否正确,若正确则执行主机发送的命令。


注:对数据拆包读取地址时,不能直接在函数中修改全局变量Serial_buf[],而是在函数的入口参数加入指向变量地址的指针。例如下面程序:

Serial_Address(unsigned char *s1)
{
unsigned char i;
unsigned char a[2]={0x00,0x01};
for(i=0;i<2;i++)
{
if((*(s1+i))!=0x99)
    break; //不是广播地址
if(i==2)
    return(0x02);//是广播地址
}
for(i=0;i<2;i++)
{
if((*(s1+i))!=a[i])
    return(0x00);//地址不同
}
return(0x01);                //地址相同


}

此程序中入口参数为s1,是指向存储地址的数组Serial_buf[]的指针变量,在此函数内用*s代替Serial_buf[]即可。


//我是分隔符

调试RS485总线遇到的问题:

1.这个问题准确来说是串口的问题,调试成功的程序刚下进去能够进行读写,并发送到上位机,而之后再开启的时候,就无法发送串口数据,这个问题很让人烦躁,找到之前调试好的程序都不行。后来发现下载的时候必须每次拔掉USB才能下载,就考虑是不是电脑串口驱动出了问题,就重新安装和电脑系统匹配的串口驱动,问题终于解决了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值