485通信协议怎么规定

来源:百度知道 编辑:UC知道 时间:2024/07/02 00:12:41
目前毕业设计,要做AVR单片机与其他芯片通讯。老师要写485的通讯协议,这个协议要用C语言写,到底什么协议啊??这个协议有什么用处呢,不是直接连起来就可以了吗?请高人指教,不必帮我写。
三楼打的比方很好,但我还不知道如何使用485进行通讯,和其他通讯有什么区别?

485则是教室里面一个老师和很多个学生交谈,当老师(主控设备)点名(即轮询到某个485地址码)要求某个学生(从设备)回答问题,这个学生如果没有翘课(从设备故障或者通信故障)的话,就应答站起来回答问题。在老师点名,学生答问的过程中,都是只有一个人发言,因为485总线有这样的仲裁机制,所以才可以实现点到多点的通信

你在协议里面实现这个功能就可以了,编程是基于串口编程,VB直接调用串口控件的。

把通讯做成命令,应答的帧形式,最好是帧长度固定。
举个例子,
主机发送给从机的数据
帧头 命令 参数1 参数2 参数3 参数4 校验和 帧尾
从机回复的数据
回复帧头 应答命令 结果1 结果2 结果3 结果4 校验和 回复帧尾

在从机接收到帧头和命令后,并不进行处理,而是暂存起来,知道接收到帧尾,并接校验通过后,才真正执行。
假如从收到帧头起,一定的时间内,还没有收到完整的帧,或者帧校验失败,那么从机用特殊的格式回复。
当然,超时时间也可以不从帧头算,从上一个字节算也可以。

这样的帧结构就能保证通讯的正确性,一般来讲,帧越长,通讯效率越高,但是占用暂存空间越打,而且出错的可能越大,出错后付出的代价也越大,实时性也越差,而且帧长度超过一定值后,通讯效率也不会再明显增加。
帧越短,通讯效率越低,但是灵活。
像上面的例子,帧长度是8,通讯效率是62.5%。如果将帧长度改为16,通讯效率变为81.25%

下面是源代码:
直接拷贝就能够编译通过了。当然要把寄存器改了。只有几行需要改的哈:
#include "tot.h"
#define GOOD_PARSE 0
#define BADID_PARSE 1
#define BADLEN_PARSE 2

short parsed;
char *pbuf;

void tsip_input_proc(TSIPPKT *rpt,unsigned char inbyte);
v