485通訊協議程序怎麼寫(51單片機的485通信程序案例)

2020-11-22 電子發燒友

RS-485總線接口是一種常用的串口,具有網絡連接方便、抗幹擾性能好、傳輸距離遠等優點。RS-485收發器採用平衡發送和差分接收,因此具有抑制共模幹擾的能力,加上收發器具有高的靈敏度,能檢測到低達200mv的電壓,可靠通信的傳輸距離可達數千米。使用RS-485總線組網,只需一對雙絞線就可實現多系統聯網構成分布式系統、設備簡單、價格低廉、通信距離長。

51單片機的485通信程序

#ifndef __485_C__ #define __485_C__

#include 《reg51.h》

#include 《string.h》

#define unsigned char uchar

#define unsigned int uint

/* 通信命令 */

#define __ACTIVE_ 0x01 // 主機詢問從機是否存在

#define __GETDATA_ 0x02 // 主機發送讀設備請求

#define __OK_ 0x03 // 從機應答

#define __STATUS_ 0x04 // 從機發送設備狀態信息

#define __MAXSIZE 0x08 // 緩衝區長度

#define __ERRLEN 12 // 任何通信幀長度超過12則表示出錯

uchar dbuf[__MAXSIZE]; // 該緩衝區用於保存設備狀態信息

uchar dev; // 該字節用於保存本機設備號

sbit M_DE = P1^0; // 驅動器使能,1有效

sbit M_RE = P1^1; // 接收器使能,0有效

void get_status(); // 調用該函數獲得設備狀態信息,函數代碼未給出

void send_data(uchar type, uchar len, uchar *buf); // 發送數據幀

bit recv_cmd(uchar *type); // 接收主機命令,主機請求僅包含命令信息

void send_byte(uchar da); // 該函數發送一幀數據中的一個字節,由send_data()函數調用

void main() {

uchar type; uchar len;

/* 系統初始化 */

P1 = 0xff; // 讀取本機設備號

dev = (P1》》2);

TMOD = 0x20; // 定時器T1使用工作方式2

TH1 = 250; // 設置初值

TL1 = 250;

TR1 = 1; // 開始計時

PCON = 0x80; // SMOD = 1

SCON = 0x50; // 工作方式1,波特率9600bps,允許接收

ES = 0; // 關閉串口中斷

IT0 = 0; // 外部中斷0使用電平觸發模式 EX0 = 1; // 開啟外部中斷0 EA = 1; // 開啟中斷

/* 主程序流程 */

while(1) // 主循環 {

if(recv_cmd(&type) == 0) // 發生幀錯誤或幀地址與本機地址不符,丟棄當前幀後返回

continue; switch(type) {

case __ACTIVE_: // 主機詢問從機是否存在

send_data(__OK_, 0, dbuf); // 發送應答信息,這裡buf的內容並未用到

break;

case __GETDATA_: len = strlen(dbuf);

send_data(__STATUS_, len, dbuf); // 發送設備狀態信息

break; default:

break; // 命令類型錯誤,丟棄當前幀後返回

}

}

}

void READSTATUS() interrupt 0 using 1 // 產生外部中斷0時表示設備狀態發生改變,該函數使用寄存器組1

{

get_status(); // 獲得設備狀態信息,並將其存入dbuf指向的存儲區,數據最後一字節置0表示數據結束

}

/* 該函數接收一幀數據並進行檢測,無論該幀是否錯誤,函數均會返回 * 函數參數type保存接收到的命令字

* 當接收到數據幀錯誤或其地址位不為0時(非主機發送幀),函數返回0,反之返回1 */

bit recv_cmd(uchar *type) {

bit db = 0; // 當接收到的上一個字節為0xdb時,該位置位

bit c0 = 0; // 當接收到的上一個字節為0xc0時,該位置位

uchar data_buf[__ERRLEN]; // 保存接收到的幀

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 一種RS-485總線自定義通信協議及其應用
    下面結合每一層討論這種自定義協議的具體設計,重點介紹如何實現可靠高效的通信,如何處理通信中錯誤,如何編程實現。2 協議的設計2.1 物理層協議設計RS-485通信網絡是一種總線式的結構,如圖2所示。上位機(以PC為例)和下位機(以基於MCS-51的智能儀器為例)都掛在通信總線上,物理層的通信協議由RS-485標準和MCS-51的多機通信方式共同方式。
  • RS-485串行數據通信協議
    概述 串行數據通信的協議從RS-232到千兆位乙太網,雖然每種協議都有特定的應用領域,但任何情況下我們都必須考慮成本和物理層(PHY)性能。
  • 485總線結構解決方案及485通訊和TCP網絡通訊優缺點對比
    多年來我們的工程商已經習慣了應用485通信方式的網絡門禁解決方案,很多人走入了一個誤區,認為485組網門禁系統是一種最簡單、最穩定、最成熟的工業總線結構,其實不然,485總線是一種用於設備聯網的、經濟型的、傳統的工業總線方式。
  • 波特率自適應的RS-485中繼器設計
    此時,總線上的信號是無效的,但總線衝突(總線雙方同時活動)並不需要中繼器來處理和解決,而是由通信協議來處理和防止的。要求總線衝突(或幹擾)結束後,RS-485中繼器的方向控制器總能自動恢復正常工作。  2 幾種RS-485中繼器  現有的RS-485中繼器通常採用三種方法來實現:①採用RC充放電延時與RS觸發器的配合來控制RS-485晶片的數據收發方向;②採用單片機的定時器定時控制RS-485接口收發方向;③採用單片機串口監視總線上的數據,通過查表當數據送給本中繼器下的終端時才開啟數據傳輸通道。
  • 深度介紹rs485總線接口通訊協議定義標準以及管腳引腳
    本文引用地址:http://www.eepw.com.cn/article/201808/385592.htmRS485通信網絡接口是一種總線式的結構,上位機(以個人電腦為例)和下位機(以51系列單片機http://www.51hei.com為例)都掛在通信總線上,RS485物理層的通信協議由RS485標準和51單片機的多機通訊方式。
  • 基於DSP和FPGA的磁浮列車同步485通信方式研究
    基於以上考慮,本文提出了基於DSP和FPGA的磁浮列車同步485通信方式的研究,以解決上述挑戰。同步485的實現方法 考慮到測速定位單元的工作環境及通信功能需求,在選擇該單元與車載無線電系統之間的通信方式時,經過分析,本研究採用了傳輸速率較高的同步通信方式,並使用屏蔽性能較好的雙絞線實現RS-485平衡型差分傳輸。 接口設計及通信協議 測速定位單元與車載無線電控制單元之間的通信接口關係如圖1所示。
  • RS-485的多機通信方案探究
    引言 在嵌入式系統中,多個孤立節點之間的通信越來越重要,尤其是物聯網時代的到來,多節點間通信已經成為必不可少的功能。由此出現了許多通信手段,如RS-232、RS-485、CAN總線、ZigBee等,綜合考慮性能和成本,RS-485通信無疑是性價比最高的通信方式。因此探究高效、實用的多機通信方案具有重大的意義。1 系統框圖 RS-485多機通信結構圖如圖1所示。
  • 串口、COM口、UART、TTL、USB、RS-232、RS-485、I2C、SPI、CAN、1...
    UART協議。 3、USB轉TTL   玩過51單片機的小夥伴都用過CH340G模塊,用來下載HEX文件,這個模塊的作用就是將USB轉成TTL電平,一般單片機的電平都是TTL電平,模塊的內部晶片是CH340T,ST官方推薦。
  • RS-485需要隔離通訊的三個原因
    RS-485是工業與儀器儀表中的物理層總線設計標準,目前已成為業界應用最為廣泛的標準通信接口之一。這種通信接口允許在簡單的一對雙絞線上進行多點雙向通信,它所具有的噪聲抑制能力、數據傳輸速率、電纜長度及可靠性是其他標準無法比擬的。當需要在噪聲環境和有一定距離的情況下進行通訊時,RS-485通訊接口是一個很好的選擇。
  • 基於USB總線和89C51單片機的數據採集系統設計
    圖1 硬體總體結構框圖系統軟體設計系統軟體包括設備固件、 USB設備驅動程序和應用程式。設備固件(firmware)設計此處固件是指固化到89C51E2PROM中的程序,其主要功能是: (1)控制A/D轉換器的採樣。(2)控制晶片USBN9602接受並處理USB驅動程序的請求及應用程式的控制指令。
  • 弱電工程中rs485正確的接線方式與485總線常見通訊故障
    RS485有兩線制和四線制兩種接線,四線制只能實現點對點的通信方式,現很少採用,現在多採用的是兩線制接線方式,這種接線方式為總線式拓樸結構在同一總線上最多可以掛接32個結點。 485總線的通訊距離可以達到1200米。根據485總線結構理論,在理想環境的前提下,485總線傳輸距離可以達到1200米。
  • 51單片機中斷過程與主程序調用子程序過程的比較
    LCALL與ACALL是MCS-51單片機的兩條調用指令,分別稱為長調用和絕對調用,兩指令主要區別在於LCALL後面操作數直接就是16位二進位的子程序入口地址;而ACALL後面操作數只是11位二進位數,子程序入口地址是把這11位數作為低位地址,再加上ACALL的下一條指令地址(即斷點地址)的高5位作為高位地址,從而形成16位的子程序入口地址
  • 基於乙太網技術和RS-485協議的網絡化數據採集系統介紹
    介紹一種新型的集成了8051微控制器和FLASH存儲器的精密模數轉換器MSC1210,給出了一個基於乙太網技術和RS-485>協議的網絡化數據採集系統。
  • 實現485隔離的四種方案匯總
    RS485總線是一種使用平衡發送,差分接收實現通訊的通用串口通信總線,由於其具有抗共模幹擾能力強、成本低、抗噪能力強、傳輸距離遠、傳輸速率高、可連接多達256個收發器等優點,廣泛應用於工業智能儀表,通訊設備等各個領域。
  • 卡口、485通訊埠、變壓器保護用熱敏電阻
    保護原理:如上圖,此保護原理是根據程控交換機保安單元中演變出來的一種應用於485通信接口保護。將PTC熱敏電阻器串接在485通信接口中,可有效防止通信線路因意外破損或人為損害而導入的220V市電對該接口的損壞,也可適當降低雷電感應通信線路對該接口的影響。
  • 西門子 PLC 幾種常見的連接口和通訊協議
    1個收發器,不能支持多站收發能力,所以只能點對點通信,不支持多點通訊。PPI協議物理上基於RS-485口,通過屏蔽雙絞線就可以實現PPI通訊。PPI協議是一種主-從協議。主站設備發送要求到從站設備,從站設備響應,從站不能主動發出信息。主站靠PPI協議管理的共享連接來與從站通訊。PPI協議並不限制與任意一個從站的通訊的主站的數量,但在一個網絡中,主站不能超過32個。
  • plc與變頻器的接線圖_plc和變頻器通訊接線圖詳解
    plc是可以編程序的,用來控制電氣元件或完成功能、通信等任務。         PLC與變頻器之間通信需要遵循通用的串行接口協議(USS),按照串行總線的主從通信原理來確定訪問的方法。   ③PLC與RS-485通信接口的連接。所有的標準西門子變頻器都有一個RS-485串行接口(有的也提供RS-232接口),採用雙線連接,其設計標準適用於工業環境的應用對象。單一的RS-485鏈路最多可以連接30臺變頻器,而且根據各變頻器的地址或採用廣播信息,都可以找到需要通信的變頻器。鏈路中需要有一個主控制器(主站),而各個變頻器則是從屬的控制對象(從站)。
  • RS-485的節點和距離的理論極限
    2、RS-485多機通信節點數的極限假設RS-485通信的地址編碼為8位,那麼最多的節點數就是2^8=256;假設RS-485通信的地址編碼為10位,那麼最多的節點數就是2^10=1024。10位已經多到極少用到。這個總線中的RS-485節點數的極限完全取決於通信軟體 ,與總線中所接的RS-485中繼轉換器個數沒有關係。
  • PLC幾種常見的連接口和通訊協議,你知道有哪些?
    s7-200系列plc開發的通訊協議。PPI協議物理上基於RS-485口,通過屏蔽雙絞線就可以實現PPI通訊。PPI協議是一種主-從協議。主站設備發送要求到從站設備,從站設備響應,從站不能主動發出信息。主站靠PPI協議管理的共享連接來與從站通訊。PPI協議並不限制與任意一個從站的通訊的主站的數量,但在一個網絡中,主站不能超過32個。