freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于rs485多機通信的軟件編程與系統(tǒng)調(diào)試-資料下載頁

2025-06-27 18:45本頁面
  

【正文】 C位位位位IO位位RXDTXDVCC圖 42 下位機 RS485 通信接口電路(2)控制端 RE*, DE 的信號有效脈寬應該大于發(fā)送或接收一幀信號的寬度。在全雙工通訊過程中,發(fā)送和接收信號分別在不同的物理鏈路上傳輸,發(fā)送端始終為發(fā)送端,接收端始終為接收端,不存在發(fā)送、接收控制信號切換問題。在 RS485半雙工通訊中,由于 MAX485 的發(fā)送和接收都由同一器件完成,并且發(fā)送和接收使用同一物理鏈路,必須對控制信號進行切換??刂菩盘柡螘r為高電平,何時為低電平,一般以單片機的 TXC(發(fā)送完成標記) ,RXC(接收完成標記)信號作參考。發(fā)送時,檢測 TXC 是否建立起來,當 TXC 為高電平后關閉發(fā)送功能轉(zhuǎn)為接收功能 ;接收時,檢測 RXC 是否建立起來,當 RXC 為高電平后,接收完畢,又可以轉(zhuǎn)為發(fā)送。在理論上雖然行得通,但在實際聯(lián)調(diào)中卻出現(xiàn)傳輸數(shù)據(jù)時對時錯的現(xiàn)象。因為單片機在串行口發(fā)送數(shù)據(jù)時,只要將 8 位數(shù)據(jù)位傳送完畢,TXC 標志即建立,但此時應發(fā)送的第九位數(shù)據(jù)位(若發(fā)送地址幀時)和停止位尚未發(fā)出。如果在這時關閉發(fā)送控制,勢必造成發(fā)送幀數(shù)據(jù)不完整。如果單片機多機通訊采用較高的波特率,幾條操作指令的延時就可能超過 2 位(或 1 位)數(shù)據(jù)的發(fā)送時間,問題或許不會出現(xiàn)。但是如果采用較低波特率,如 9600,發(fā)送一位數(shù)據(jù)需 104gs 左右,單靠幾條操作指令的延時遠遠不夠,問題就明顯地暴露出來。接收數(shù)據(jù)時也同樣如此,單片機在接收完 8 個數(shù)據(jù)位后就建立起 RXC信號,但此時還未接收到第九位數(shù)據(jù)位(若接收地址幀時)和停止位。所以,接收端必須延時大于 2 位數(shù)據(jù)位的時間(1 位數(shù)據(jù)位時間=1/波特率)再作應答,否則會發(fā)生總線沖突 [4]。(3)總線上所連接的各從機的發(fā)送控制信號在時序上完全隔開。為了保證發(fā)送和接收信號的完整和正確,避免總線上信號的碰撞,對總線的使用權(quán)22 / 52必須進行分配才能避免競爭,連接到總線上的單機,其發(fā)送控制信號在時間上要完全隔離??傊l(fā)送和接收控制信號應該足夠?qū)?,以保證完整地接收一幀數(shù)據(jù),任意兩個單機的發(fā)送控制信號在時間上完全分開,避免總線爭端 [7]。 差錯控制差錯控制用于傳輸數(shù)據(jù)的錯誤檢查和錯誤糾正,以保證數(shù)據(jù)傳輸?shù)臏蚀_性。當主機發(fā)出呼叫幀,如果在規(guī)定的時間內(nèi)沒有收到從機的應答幀,則主機認為幀丟失并重發(fā)呼叫幀;如果發(fā)送 3 次仍沒有收到應答幀,則系統(tǒng)認為該從機處于關機狀態(tài),開始執(zhí)行其他任務。在數(shù)據(jù)幀發(fā)送時,本系統(tǒng)采用應答方式進行差錯控制,即接收方向發(fā)送方回發(fā)特殊的控制命令碼,作為傳輸是否正確的確認;發(fā)送方收到確認后就可知道是否正確發(fā)送,以決定是否重發(fā)。如果傳輸中幀完全丟失,則發(fā)送方進行超時處理。即發(fā)送方發(fā)送數(shù)據(jù)后超過一定時間,發(fā)送方認為幀丟失,需要重發(fā)。本系統(tǒng)約定最大重發(fā)數(shù)為 3 次,超過3 次系統(tǒng)就認為串行通信出現(xiàn)故障,主機進行故障報警。另外,為避免通信頻繁后舊的數(shù)據(jù)未發(fā)出去,而新的數(shù)據(jù)產(chǎn)生時可能會沖掉原來的數(shù)據(jù),造成數(shù)據(jù)丟失,在系統(tǒng)中采用了數(shù)據(jù)備份存儲的方式,即將長度為 N 的數(shù)據(jù)緩沖區(qū),擴展為長度為 2N 的數(shù)據(jù)緩沖區(qū)。要傳送的新數(shù)據(jù)先放在原來的緩沖區(qū),檢測舊的數(shù)據(jù)是否發(fā)送成功,如果發(fā)送成功,則將新的數(shù)據(jù)復制到擴展緩沖區(qū);如果未發(fā)送成功,則繼續(xù)發(fā)送,發(fā)送成功后再備份新的數(shù)據(jù)。此時進來的如果是中斷數(shù)據(jù),只是更新原有的緩沖區(qū),備份緩沖區(qū)的數(shù)據(jù)不會被中斷數(shù)據(jù)更新掉。這種方法很好地解決了通信過程數(shù)據(jù)存儲出錯、丟失的問題,使得通信的可靠性得到很大的提高 [5]。 系統(tǒng)程序設計 Bios 函數(shù)介紹及應用調(diào)用格式:bios(int cmd,char byte, int port)(1) cmd0 初始化串行口 port 1 發(fā)送一個字符(寫串口)2 接收一個字符(讀串口) 3 返回串行口當前狀態(tài)(2) port0 表示串行口 1(COM1)23 / 521 表示串行口 2(COM2)(3) byte初始化字節(jié)位 數(shù)據(jù)位數(shù) 00無效 波特率 01—無效 b/s 10—7 位000 110 11—8 位001 150 停止位010 300 0—1 位011 600 1—2 位100 1200 奇偶校驗101 2400 00—無110 4800 01—奇校驗111 9600 10—無11—偶校驗功能:實現(xiàn)由 port 指定的 I/O 接口上進行的各種異步通信。說明:在使用串行口進行通行之前,必須對它初始化。函數(shù)中的 3 個參數(shù)意義如下所示。注意,bios()總是返回一個 16 位的二進制數(shù)值,它通常反映了串行口某些重要的狀態(tài)信息。返回值的高 8 位字節(jié)是描述線路狀態(tài)位的;返回值的低 8 位隨 cmd 而定,常用于描述調(diào)制器的狀態(tài)。cmd=1 時,低 8 位返回值是原發(fā)送的字符;cmd=2 時,低 8位返回的是由串行口收的字符;其他情況下,cmd 分別為 0,3 時低 8 位含義如表 43 所示。表 43 Bios()返回值高、低 8 位的意義高 8 位 低 8 位位 含義 位 含義15 超時出錯 7 線路信號被檢測14 發(fā)送移位寄存器空 6 振鈴指示13 發(fā)送保持寄存器空 5 數(shù)據(jù)裝置就緒12 間斷檢測錯誤 4 清除發(fā)送11 接收(幀)格式錯誤 3 線路信號變化10 接收奇偶錯誤 2 脈沖后沿振鈴檢測D7 D6 D5 D4 D3 D2 D1 D024 / 529 接收重疊錯誤 1 數(shù)據(jù)裝置就緒變化8 接收數(shù)據(jù)就緒 0 清除發(fā)送信號變化利用 bios()函數(shù)采用查詢方式實現(xiàn)從串行口 1 發(fā)送一個字符功能的子函數(shù)sport()如下:void sport(char ch){ while(!(bios(3, 0, 0)amp。0x2022)){if (bios (1, ch, 0)amp。0x8000){ printf(“超時錯誤 \ n”)。 exit (1)。 }} }利用 bios()函數(shù)接收字符的功能,采用查詢方式實現(xiàn)從串行口 1 接收一個字符的子函數(shù) rport()的定義如下:rport( ){ int a。 while (!(bios (3, 0, 0)amp。0x0100)){ if (kbhit( )){ getch( )。 exit( 1)。 } a=bios(2, 0, 0)amp。0x00ff。 return (a)。}}該函數(shù)不斷查詢“數(shù)據(jù)準備就緒”位,若為 1,說明串口收到了一個字符的數(shù)據(jù);否則,用按下任一鍵退出程序的方法避免程序陷入死循環(huán)。這兩個函數(shù)將作為后面發(fā)送和接收文件程序中的子函數(shù)被反復調(diào)用 [3]。 PC 機通信程序設計25 / 52 PC 機通信程序采用 C 語言編程。主程序按照通信協(xié)議的要求,首先完成 8250 的初始化,以確定波特率和信息幀格式。然后根據(jù)鍵入的地址碼,呼叫從機,發(fā)出聯(lián)絡信號。呼叫成功后,輸入命令,若輸入的是 S 命令,則表示要求單片機向主機發(fā)送數(shù)據(jù),因此,PC 機調(diào)用 receivef 子程序準備接收從機發(fā)來的數(shù)據(jù),并存入盤上指定的文件中去。若輸入的是 R 命令,則表示主機要求從機準備接收信息,因此,PC 機調(diào)用 sendf 子程序?qū)斍氨P上的指定文件發(fā)送給從機。PC 機通信程序框圖如圖 43 所示 [3]:開始8250 初始化延時發(fā)送地址碼呼叫成功否?是從機發(fā)送?調(diào)接收文件子程序調(diào)發(fā)送文件子程序結(jié)束發(fā)送命令NYN Y(a)26 / 52 sendf打開文件發(fā)送字節(jié)數(shù)接收應答信號發(fā)數(shù)據(jù)及累加和取文件句柄正確否?關閉文件NY(b)receivef建立文件收總字節(jié)數(shù)發(fā)“00”收數(shù)據(jù)及累加和發(fā)“FF”正確否?關閉文件NY(c)圖 43 PC 機通信程序框圖PC 機通信的主程序流程圖如圖 43(a)所示。PC 機發(fā)送子程序流程圖如圖 43(b)所示。PC 機接收子程序流程圖如圖 43(c)所示。 80C51 單片機通信程序設計 單片機的數(shù)據(jù)通信由串行口完成,定時器 TI 作為波特率發(fā)生器,其波特率要與 PC 機一致。數(shù)據(jù)的傳送格式為 1 位起始位、8 位數(shù)據(jù)位、作為地址/數(shù)據(jù)控制位的第 9 位和 1位停止位。采用中斷方式發(fā)送和接收數(shù)據(jù),定時器 TI 設置為工作模式 2,串行口設置為工作方式 3,由第 9 位判斷地址碼或數(shù)據(jù)。當某臺單片機與 PC 機發(fā)出的地址碼一致時,就發(fā)出應答信號給 PC 機,而其他單片機則不發(fā)應答信號,這樣在某一時刻 PC 機只與一臺單片機傳輸信息。這里給出 8051 主程序完成串行口和中斷的初始化后,則等待中斷,以及單片機中斷方式接收和發(fā)送數(shù)據(jù)的中斷服務程序。單片機主程序流程圖和中斷服務程序流程圖分別如圖 44 和 45 所示 [3]:27 / 52主程序開始定時器初始化,設置波特率初始化串行口控制寄存器開串行口中斷等待圖 44 下位單片機主程序流程圖28 / 52中斷服務程序是地址嗎?本機地址?發(fā)送命令?發(fā)字節(jié)數(shù)發(fā)回地址碼收累加和 發(fā)累加和收字節(jié)數(shù)發(fā)送數(shù)據(jù)并計算累加和接收數(shù)據(jù)并計算累加和發(fā)“FF”SM2=0發(fā)“00”SM2=1中斷返回正確否? 正確否?NNN NYYYY圖 45 單片機中斷服務程序流程圖29 / 52 程序調(diào)試 PC 機通信程序的調(diào)試此上位機采用的是查詢方式,其調(diào)試是在 keil C 里進行的。其步驟為:(1)新建工程(2)工程名30 / 52(3)選單片機(4)新建一個文件(5)導入文件到工程31 / 52(6)編譯由于 keil C 里沒有包括這個函數(shù)庫,則調(diào)不出來。32 / 52 80C51 單片機通信程序的調(diào)試此下位單片機采用的是中斷方式。下位單片機程序調(diào)試成功。33 / 52第五章 系統(tǒng)可靠性分析 串行通信可靠性評測指標通信的目的是要把消息正確而迅速地傳送到受信者,因此衡量傳輸質(zhì)量的指標有兩個:一是有效性;二是可靠性。有效性是指在一定條件下,單位時間內(nèi)所傳輸?shù)男畔⒘吭蕉嘣胶?,即傳輸效率要高。這主要是和傳輸介質(zhì)有關,只要采用較好質(zhì)量的傳輸介質(zhì)即可解決。可靠性是指數(shù)據(jù)信息傳輸?shù)目煽砍潭?。由于傳輸電路不可能十分理想,加之存在干擾,以及信號失真等原因,因而傳輸中產(chǎn)生錯誤是不可避免的。我們希望傳輸中出現(xiàn)的錯誤越少越好,即可靠性要高??煽啃杂谜`碼率來衡量。當所傳送的二進制序列無限長時,被傳錯的碼元數(shù)與所傳碼元總數(shù)的比值為誤碼率,即二進制碼元在傳輸系統(tǒng)中被傳錯的概率。設被傳錯的碼元數(shù)為 N e,所傳二進制碼元總數(shù)為 N,則誤碼率 P e 為:P e=N e/N對可靠性的要求,因通信系統(tǒng)的任務不同而有所不同,不能籠統(tǒng)地說誤碼率越低越好。在傳輸速率一定的條件下,誤碼率越低,設備就越復雜。因此,在確定誤碼率指標時,要根據(jù)具體情況具體確定。對傳輸系統(tǒng)來說,要在滿足可靠性要求的前提下,盡量提高傳輸效率 [8]。 程序跳飛而造成總線沖突RS485 通信多用在主從式多機通信中,但其作為一種半雙工的通信方式,在一條通信電纜上掛許多設備時,一定要保證在總線上只有一臺設備處于發(fā)送狀態(tài),其他設備一定要處于接收狀態(tài);而一旦同時兩臺設備都處于發(fā)送狀態(tài),必然會出現(xiàn)總線沖突的現(xiàn)象。在工業(yè)控制中,設備大部分工作在強干擾的環(huán)境下,若僅用一條 I/O 口線控制 RS485 轉(zhuǎn)換器的收發(fā)狀態(tài),當程序?qū)⑥D(zhuǎn)換器控制端置“1”即轉(zhuǎn)入發(fā)送狀態(tài)后出現(xiàn)程序跳飛的情況,那么關閉發(fā)送口的指令就有可能不會被執(zhí)行,其它設備要發(fā)送數(shù)據(jù)時,會導致總線沖突,從而也使得整個總線無法正常工作。解決的關鍵是一定要控制好各臺設備的接收與發(fā)送狀態(tài),即 RS485 接口器的收發(fā)狀態(tài),要實現(xiàn)這種控制解決的方案是采取單穩(wěn)電路精確定時,如圖 51 所示。34 / 52RST3TRIG+4TRIG5Cext1Rext/Cext2Q 6Q 7ACD4538RCTXD 位 MAX485位位位+5V圖 51 單穩(wěn)延時電路它能夠偵測到數(shù)據(jù)包到來,并及時將發(fā)送器由接收狀態(tài)轉(zhuǎn)為發(fā)送狀態(tài),等到數(shù)據(jù)包發(fā)完后,發(fā)送器又自動關閉轉(zhuǎn)為接收狀態(tài)。圖 51 所示的電路是用一個精密單穩(wěn)態(tài)定時器CD4538 與外部電阻電容分離元件構(gòu)成。圖 51 中 5 端是單穩(wěn)態(tài)定時器的低電平有效的觸發(fā)
點擊復制文檔內(nèi)容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1