51单片机485通讯协议怎么写 有代码最好
485通讯跟232通讯很相似,只是485是半双工的,需要加上方向控制

485通信协议怎么规定
把通讯做成命令,应答的帧形式,最好是帧长度固定。 举个例子,主机发送给从机的数据帧头 命令 参数1 参数2 参数3 参数4 校验和 帧尾从机回复的数据回复帧头 应答命令 结果1 结果2 结果3 结果4 校验和 回复帧尾在从机接收到帧头和命令后,并不进行处理,而是暂存起来,知道接收到帧尾,并接校验通过后,才真正执行。假如从收到帧头起,一定的时间内,还没有收到完整的帧,或者帧校验失败,那么从机用特殊的格式回复。当然,超时时间也可以不从帧头算,从上一个字节算也可以。这样的帧结构就能保证通讯的正确性,一般来讲,帧越长,通讯效率越高,但是占用暂存空间越打,而且出错的可能越大,出错后付出的代价也越大,实时性也越差,而且帧长度超过一定值后,通讯效率也不会再明显增加。帧越短,通讯效率越低,但是灵活。像上面的例子,帧长度是8,通讯效率是62.5%。如果将帧长度改为16,通讯效率变为81.25%下面是源代码:直接拷贝就能够编译通过了。当然要把寄存器改了。只有几行需要改的哈:#include "tot.h"#define GOOD_PARSE 0#define BADID_PARSE1#define BADLEN_PARSE 2short parsed;char *pbuf;void tsip_input_proc(TSIPPKT *rpt,unsigned char inbyte);void rpt_packet(TSIPPKT *rpt,int *obuf);void tsip_input_proc(TSIPPKT *rpt,unsigned char inbyte){switch(rpt->status){case TSIP_PARSED_DLE_1:switch(inbyte){case 0:case ETX: // illegaldatarpt->len=0;rpt->status=TSIP_PARSED_EMPTY;break;case DLE: // try normal message start againrpt->len=0;rpt->status=TSIP_PARSED_DLE_1;break;default: // legal ID ;start messagerpt->len=0;rpt->status=TSIP_PARSED_DATA;rpt->codes=inbyte;break;}break;case TSIP_PARSED_DATA:switch(inbyte){case DLE: // expect DLE or ETX nextrpt->status=TSIP_PARSED_DLE_2;break;default: // normal data byterpt->buf[rpt->len]=inbyte;rpt->len++;break;}break;case TSIP_PARSED_DLE_2:switch(inbyte){case DLE: // normal data byterpt->buf[rpt->len]=inbyte;rpt->len++;rpt->status=TSIP_PARSED_DATA;break;case ETX: // end of message,return TURE hererpt->status=TSIP_PARSED_FULL;break;default: // error:treat as TSIP_PARSED_DLE_1,start new report packetrpt->codes=inbyte;rpt->len=0;rpt->status=TSIP_PARSED_DATA;break;}break;caseTSIP_PARSED_FULL:caseTSIP_PARSED_EMPTY:default:switch(inbyte){case DLE: // normal message startrpt->len=0;rpt->status=TSIP_PARSED_DLE_1;break;default: // error:ignore inbyterpt->len=0;rpt->status=TSIP_PARSED_EMPTY;break;}break;}if(rpt->len>MAX_RPTBUF) // error:start new report packet{rpt->status=TSIP_PARSED_EMPTY;rpt->len=0;}}//串口字符交换*******************************************************************/int bGetShort(char *bp){int outval;char *optr;optr=(char *)&outval*optr=*bp<<8 & 0xFF00;*optr=*(++bp) | *optr;return outval;}//串口报文int rpt_0x14(TSIPPKT *rpt,int output[1]){char *buf;buf=rpt->buf;if(rpt->len!=2)return 0;output[0]=bGetShort(&buf[0]);return 1;}void rpt_packet(TSIPPKT *rpt,int *obuf){parsed=GOOD_PARSE;switch(rpt->codes){case 20:rpt_0x14(rpt,obuf);break;default:parsed=BADID_PARSE;break;}}//发送void send_cmd(TSIPPKT *cmd, void sendb(char)){char *cbuf, *cbufend;sendb (DLE);sendb (cmd->codes);cbufend = cmd->buf + cmd->len;for (cbuf = cmd->buf; cbuf < cbufend; cbuf++) {if (*cbuf == DLE) sendb (DLE);sendb (*cbuf);}sendb (DLE);sendb (ETX);}void sendb(char outbyte){//ScibRegs.SCITXBUF=outbyte;}//字符交换void bPutShort(unsigned int *in, char *out){char *inptr;inptr=(char *)in;*out= (*inptr>>8) & 0x00FF;*(++out) = *inptr & 0x00FF;}//命令void cmd_0x0(TSIPPKT *cmd,SCICALOUT *out){bPutShort(&(out->ve),&(cmd->buf[0]));cmd->len = 2;cmd->codes =37;}//串口使用中断方式接收,发送不采用中断int input[MAX_RPTBUF];void SCIRXD_ISR(void){tsip_input_proc(&rpt,ScibRegs.SCIRXBUF.bit.RXDT);// analyseif (rpt.status == TSIP_PARSED_FULL) // receive complete{rpt_packet(&rpt,input); // output reportsrpt.status=TSIP_PARSED_EMPTY;// prepare for next}ScibRegs.SCIFFRX.bit.RXFFOVRCLR=1;// Clear Overflow flagScibRegs.SCIFFRX.bit.RXFFINTCLR=1;// Clear Interrupt flagPieCtrlRegs.PIEACK.all|= PIEACK_GROUP9; // Issue PIE ack}//发送调用方式//cmd_100x0(&cmd);//send_cmd(&cmd,&sendb);//发送调用方式//cmd_100x0(&cmd);//send_cmd(&cmd,&sendb); 上面的就是源代码。。记住把寄存器改了哦。无论是单片机还是上位机都可以用这个哈。
485则是教室里面一个老师和很多个学生交谈,当老师(主控设备)点名(即轮询到某个485地址码)要求某个学生(从设备)回答问题,这个学生如果没有翘课(从设备故障或者通信故障)的话,就应答站起来回答问题。在老师点名,学生答问的过程中,都是只有一个人发言,因为485总线有这样的仲裁机制,所以才可以实现点到多点的通信 你在协议里面实现这个功能就可以了,编程是基于串口编程,VB直接调用串口控件的。
请看 百度百科 串口通讯http://baike.baidu.com/view/542656.htmrs232http://baike.baidu.com/view/196461.htmrs485http://baike.baidu.com/view/542681.htm

485通讯程序怎么写
1、涉及到通讯,就要有通讯协议 2、你的485模块是接在单片机吗3、如果485模块接在单片机,要做好485使能端的控制,不能让485出现死锁现象。4、根据通讯协议完成相应的控制功能。 5、祝你成功,嘿嘿
485是硬件通讯接口,通讯程序是需要协议的。

485通讯协议程序怎么写(51单片机的485通
485通讯和232通讯基本差不多的。程序基本一样。并且也可以用串口发送,只是485增加了一个专门的驱动电路而已。

MODBUS RS485通讯协议软件怎么写
呵呵,我也不会,但是我听说MODBUS好像涉及到了寄存器的读写之类的,楼主还是要有心理准备,语言最好还是用C++或者VC,另外的估计会比较麻烦,最好还是不要指望用VB将这个任务完成,呵呵。仅仅只是建议,具体的还是问行家吧,我先捞两分。
嘿嘿。。简单的你可以用组态软件。。按步骤走就可以了!
网上有很多VB的程序代码,你可以下载来学习!

本文由 在线网速测试 整理编辑,转载请注明出处。