|
這是rs485通信協(xié)議等資料,本人在此共享出來,謝謝
0.png (10.73 KB, 下載次數(shù): 70)
下載附件
2018-1-4 02:49 上傳
一、RS485基本知識
RS-485接口芯片已廣泛應(yīng)用于工業(yè)控制、儀器、儀表、多媒體網(wǎng)絡(luò)、機(jī)電一體化產(chǎn)品等諸多領(lǐng)域?捎糜赗S-485接口的芯片種類也越來越多。如何在種類繁多的接口芯片中找到最合適的芯片,是擺在每一個(gè)使用者面前的一個(gè)問題。RS-485接口在不同的使用場合,對芯片的要求和使用方法也有所不同。使用者在芯片的選型和電路的設(shè)計(jì)上應(yīng)考慮哪些因素,由于某些芯片的固有特性,通信中有些故障甚至還需要在軟件上作相應(yīng)調(diào)整,如此等等。希望本文對解決RS-485接口的某些常見問題有所幫助。
1 RS-485接口標(biāo)準(zhǔn)
傳輸方式:差分
傳輸介質(zhì):雙絞線
標(biāo)準(zhǔn)節(jié)點(diǎn)數(shù):32
最遠(yuǎn)通信距離:1200m 共模電壓最大、最小值:+12V;-7V
差分輸入范圍:-7V~+12V
接收器輸入靈敏度:±200mV
接收器輸入阻抗:≥12kΩ
2 節(jié)點(diǎn)數(shù)及半雙工和全雙工通信
0.png (28.4 KB, 下載次數(shù): 71)
下載附件
2018-1-4 02:50 上傳
0.png (16.62 KB, 下載次數(shù): 57)
下載附件
2018-1-4 02:51 上傳
rs485仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (24.15 KB, 下載次數(shù): 57)
下載附件
2018-1-4 02:52 上傳
單片機(jī)源程序如下:
-
- /****************************************/
- /* Copyright (c) 2017, 通信工程學(xué)院 */
- /* All rights reserved. */
- /****************************************/
- #include "RS485.h"
- //主函數(shù)
- void main(void)
- {
- uchar type;
- Init();//初始化
-
- while (1)
- {
- if (RecvData(&type)==0) // 接收幀錯(cuò)誤或者地址不符合,丟棄
- continue;
-
- switch (type)
- {
- case ACTIVE: // 主機(jī)詢問從機(jī)是否在位
- SendData(READY,0,StatusBuf); // 發(fā)送READY指令
- break;
- case GETDATA: // 主機(jī)讀設(shè)備請求
- ClrStatusBuf();
- GetStat(); // 數(shù)據(jù)采集函數(shù)
- SendData(SENDDATA,strlen(StatusBuf),StatusBuf);
- break;
- default:
- break; // 指令類型錯(cuò)誤,丟棄當(dāng)前幀
- }
- }
- }
- //初始化
- void Init(void)
- {
- P1 = 0xFF;
- DevNo = (P1&0x00111111); // 讀取本機(jī)設(shè)備號
- TMOD = 0x20;//定時(shí)器T1,工作方式2,自動重裝
- SCON = 0x50;//串口通信工作方式1,允許接收
- TH1 = 0xFD;//波特率9600
- TL1 = 0xFD;
- TR1 = 1;
- PCON = 0x00;// SMOD=0,波特率不加倍
- EA = 0;
-
- }
- //接收數(shù)據(jù)幀函數(shù),實(shí)際上接收的是主機(jī)的指令
- //*type指令類型
- bit RecvData(uchar *type)
- {
- uchar tmp,rCount,i;
- uchar r_buf[RECFRMMAXLEN]; // 保存接收到的幀
- uchar FlagRecvOver; // 一幀接收結(jié)束標(biāo)志
- uchar FlagStartRec; // 一幀開始接收標(biāo)志
- uchar CheckSum; // 校驗(yàn)和
- uchar DataLen; // 數(shù)據(jù)字節(jié)長度變量
-
- //禁止發(fā)送,允許接收
- DE = 0;
- RE = 0;
- //接收一幀數(shù)據(jù)
- rCount = 0;
- FlagStartRec = 0;
- FlagRecvOver = 0;
-
- while (!FlagRecvOver)
- {
- RI = 0;
- while (!RI);
- tmp = SBUF;
- RI=0;
- …………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
- ,其數(shù)值為0x24
- if ((!FlagStartRec) && (tmp == 0x24))
- {
- FlagStartRec = 1;
- }
- if (FlagStartRec)
- {
- r_buf[rCount] = tmp;
- rCount ++;
-
- //判斷是否收到字符'*',其數(shù)值為0x2A,根據(jù)接收的指令設(shè)置相應(yīng)標(biāo)志位
- if (tmp == 0x2A)
- FlagRecvOver = 1;
- }
- if (rCount == RECFRMMAXLEN) // 幀超長錯(cuò)誤,返回0
- return 0;
- }
-
- //計(jì)算校驗(yàn)和字節(jié)
- CheckSum = 0;
- DataLen = r_buf[3];
-
- for (i=0;i<3+DataLen;i++)
- {
- CheckSum = CheckSum + r_buf[i+1];
- }
-
- //判斷幀是否錯(cuò)誤
- if (rCount<6) // 幀過短錯(cuò)誤,返回0,最短的指令幀為6個(gè)字節(jié)
- return 0;
-
- if (r_buf[1]!=DevNo) // 地址不符合,錯(cuò)誤,返回0
- return 0;
-
- if (r_buf[rCount-2]!=CheckSum) // 校驗(yàn)錯(cuò)誤,返回0
- return 0;
- *type = r_buf[2]; // 獲取指令類型
- return 1; // 成功,返回1
- }
- //發(fā)送數(shù)據(jù)幀函數(shù)
- //type數(shù)據(jù)類型,len數(shù)據(jù)長度,*buf數(shù)據(jù)
- void SendData(uchar type,uchar len,uchar *buf)
- {
- uchar i,tmp;
- uchar CheckSum = 0;
-
- //允許發(fā)送,禁止接收
- DE = 1;
- RE = 1;
-
- //發(fā)送幀起始字節(jié)
- tmp = 0x24;
- Send(tmp);
-
- Send(DevNo);// 發(fā)送地址字節(jié),也即設(shè)備號
- CheckSum = CheckSum + DevNo;
-
- Send(type); // 發(fā)送類型字節(jié)
- CheckSum = CheckSum + type;
- Send(len); // 發(fā)送數(shù)據(jù)長度字節(jié)
- CheckSum = CheckSum + len;
-
- //發(fā)送數(shù)據(jù)
- for (i=0;i<len;i++)
- {
- Send(*buf);
- CheckSum = CheckSum + *buf;
- buf++;
- }
-
- Send(CheckSum);// 發(fā)送校驗(yàn)和字節(jié)
- //發(fā)送幀結(jié)束字節(jié)
- tmp = 0x2A;
- Send(tmp);
- }
- //采集數(shù)據(jù)函數(shù)經(jīng)過簡化處理,取固定的10個(gè)字節(jié)數(shù)據(jù)
- void GetStat(void)
- {
- StatusBuf[0]=DATA0;
- StatusBuf[1]=DATA1;
- StatusBuf[2]=DATA2;
- StatusBuf[3]=DATA3;
- StatusBuf[4]=DATA4;
- StatusBuf[5]=DATA5;
- StatusBuf[6]=DATA6;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
RS485通信協(xié)議及程序.zip
(1.41 MB, 下載次數(shù): 307)
2018-1-2 20:26 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|