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

正文內(nèi)容

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

2024-11-07 21:41本頁面

【導(dǎo)讀】理系統(tǒng)等領(lǐng)域應(yīng)用廣泛。因此,開展本領(lǐng)域的研究有較好的應(yīng)用前景。位機與下位機以及下位機與下位機的通信的研究。機端,通過專用的RS232/485標(biāo)準(zhǔn)轉(zhuǎn)換芯片S2-485將RS-232電平轉(zhuǎn)換成RS-485電平,統(tǒng)多機通信的數(shù)據(jù)傳輸。

  

【正文】 續(xù)監(jiān)聽地址,無法收到數(shù)據(jù)。 (7) PC 機收到從機的應(yīng)答地址后,確認(rèn)地址是否相符。若不相符,發(fā)復(fù)位信號;若相符,則清 TB8,開始發(fā)送數(shù)據(jù)。 (8) 從機收到復(fù)位命令后回到監(jiān)聽地址狀態(tài),即 SM2=1,否則開始接收數(shù)據(jù)。 (9) 通信的各機之間必須以 相同的幀格式及波特率進(jìn)行通信。通信協(xié)議中,幀格式和波特率的選擇,它關(guān)系到通信的效率,傳輸?shù)木嚯x和通信的可靠性,是串行通信中的一個關(guān)鍵參數(shù)。我們采用幀格式為 :1 位起始位, 1 位停止位, 8 位數(shù)據(jù)位, 1 位可編程的第 9位。將第 9 位設(shè)定為“地址 /數(shù)據(jù)位”,用來支持 PC 機和 8051 單片機的相互通信,當(dāng)?shù)?9位為 0,表示主機發(fā)送的是“數(shù)據(jù) /命令幀”,當(dāng)?shù)?9位為 1,表示主機發(fā)送的是“地址幀”。后面程序 將波特率設(shè)置為 2400b/s。 綜上可知,通信協(xié)議分為三段,即主機與從機的連接掛鉤與握手階段、發(fā)送 (接收 )階段、結(jié)束階段。在連接 階段主要完成通信聯(lián)絡(luò)任務(wù),主機首先發(fā)送從機的地址信號,與從機聯(lián)絡(luò)之后,向從機發(fā)送命令代碼,收到應(yīng)答信號后,開始發(fā)送或接收數(shù)據(jù) ; 接收 (發(fā)送 )階段收 /發(fā)數(shù)據(jù)及檢驗碼,完成數(shù)據(jù)傳輸?shù)男r灒唤Y(jié)束階段則是由于通信系統(tǒng)出錯或誤碼次數(shù)越限則宣告通信失敗而結(jié)束通信。每發(fā)送一數(shù)據(jù)塊,僅當(dāng)數(shù)據(jù)接收正確時,才會發(fā) 20 送一個響應(yīng)幀,否則回送出錯信息,要求重發(fā)數(shù)據(jù)塊,直到正確為止 。 為了防止系統(tǒng)出錯而引起“死鎖”,最多只允許重發(fā)數(shù)據(jù) 3 次,否則轉(zhuǎn)向出錯處理程序,顯示系統(tǒng)出錯 [1]。 多機發(fā)送時的分時說、聽 多機傳送時 ,通信協(xié)議要合理 地協(xié)調(diào)總線的分時共用 ,通信波特率的計算要有冗余,采用 RS485 總線連接的多個站點 ,由于 485 總線是異步半雙工的通信總線 ,在某一個時刻 ,總線只可能呈現(xiàn)一種狀態(tài) ,即任一時刻只有一個站點在“說” ,其他站點只能處于“聽”狀態(tài)。如果有多個站點在“說” ,則數(shù)據(jù)將在通信總線時碰撞 ,結(jié)果是處于接收狀態(tài)的站點不能收到正確的數(shù)據(jù)。在 RS485 總線通信網(wǎng)絡(luò)中 ,必須控制好每個站點的“聽、說”狀態(tài) ,即收、發(fā)狀態(tài) ,對總線的使用權(quán)必須進(jìn)行分配 ,以使各從機的發(fā)送控制信號在時間上完全隔離 ,保證能及時、正確地傳輸數(shù)據(jù)。要做到總線上設(shè)備在時序上 的嚴(yán)格配合 ,必須要遵從以下幾點: ( 1) 復(fù)位時,主從機都應(yīng)該處于接收狀態(tài)。 MAX485 芯片的發(fā)送和接收功能轉(zhuǎn)換是由芯片的 RE*, DE 端控制的。 RE*= 1, DE= 1 ,MAX485 發(fā)送狀態(tài); RE*= 0 , DE= 0 時, MAX485 處于接收狀態(tài)。一般使用單片機的一根口線連接 RE* , DE 端。在上電復(fù)位時,由于硬件電路穩(wěn)定需要一定的時間,并且單片機各端口復(fù)位后處于高電平狀態(tài),這樣就會使總線上各個分機處于發(fā)送狀態(tài),加上上電時各電路的不穩(wěn)定,可能向總線發(fā)送信息。因此,如果用一根口線作發(fā)送和接收控制信號,應(yīng) 該將口線反向后接入 MAX485 的控制端,使上電時 MAX485 處于接收狀態(tài)。 如圖 42 所示,可用 三極管 Q1及電阻 R1,R2 構(gòu)成最簡單的反相電路,經(jīng)反相后系統(tǒng)上電時所有從機均處于接收狀態(tài),不會出現(xiàn)總線仲裁 [7]。 21 234V C C81 67GND5DRABUM A X 48 5Q2N 39 0410KR1R210KR310KR4V C CV C C V C C接單片機 IO 端口R X DT X DV C C 圖 42 下位機 RS485通信接口電路 ( 2) 控制端 RE*, DE 的信號有效脈寬應(yīng)該大于發(fā)送或接收一幀信號的寬度。 在全雙工通訊過程中,發(fā)送和接收信號分別在不同的物理鏈路上傳輸,發(fā)送端始終為發(fā)送端,接收端始終為接收端,不存在發(fā)送、接收控制信號切換問題。在 RS485 半雙工通訊中,由于 MAX485 的發(fā)送和接收都由同一器件完成,并且發(fā)送和接收使用同一物理鏈路,必須對控制信號進(jìn)行切換??刂菩盘柡螘r為高電平,何時為低電平,一般以單片機的TXC(發(fā)送完成標(biāo)記), RXC(接收完成標(biāo)記)信號作參考。發(fā)送時,檢測 TXC 是否建立起來,當(dāng) TXC為高電平后關(guān)閉發(fā)送功能轉(zhuǎn)為接收功能 ;接收時,檢測 RXC 是否建立起來,當(dāng) RXC為高電平后,接收完畢,又可以轉(zhuǎn)為發(fā)送。 在理論上雖然行得通,但在實際聯(lián)調(diào)中卻出現(xiàn)傳輸數(shù)據(jù)時對時錯的現(xiàn)象 。 因為單片機在串行口發(fā)送數(shù)據(jù)時,只要將 8 位數(shù)據(jù)位傳送完畢, TXC 標(biāo)志即建立,但此時應(yīng)發(fā)送的第九位數(shù)據(jù)位(若發(fā)送地址幀時)和停止位尚未發(fā)出。如果在這時關(guān)閉發(fā)送控制,勢必造成發(fā)送幀數(shù)據(jù)不完整。如果單片機多機通訊采用較高的波特率,幾條操作指令的延時就可能超過 2位(或 1位)數(shù)據(jù)的發(fā)送時間,問題或許不會出現(xiàn)。但是如果采用較低波特率,如9600,發(fā)送一位數(shù)據(jù)需 104gs 左右,單靠幾條操作指令的延時遠(yuǎn)遠(yuǎn)不夠,問題就明顯地暴露出來。接收數(shù)據(jù)時也同樣如此,單片機在接收完 8 個數(shù)據(jù)位后就建立起 RXC 信號,但此時還未接收到第九位數(shù)據(jù)位(若接收地址幀時)和停止位。所以,接收端必須延時大于2位數(shù)據(jù)位的時間( 1 位數(shù)據(jù)位時間= 1/波特率)再作應(yīng)答,否則會發(fā)生總線沖突 [4]。 ( 3) 總線上所連接的各從機的發(fā)送控制信號在時序上完全隔開。 為了保證發(fā)送和接收信號的完整和正確,避免總線上信號的碰撞,對總線的使用權(quán)必須進(jìn)行分配才能避免競爭,連接到總線上的單機,其發(fā)送控制信號在時間上要完全隔離。 22 總之,發(fā)送和接收控制信號應(yīng)該足夠?qū)?,以保證完整地接收一幀數(shù)據(jù),任意兩個單機的發(fā)送控制信號在時間上完全分開,避免總線爭端 [7]。 差錯控制 差錯控制用于傳輸數(shù)據(jù)的錯誤檢查和錯誤糾正,以保證數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。當(dāng)主機發(fā)出呼叫幀,如果在規(guī)定的時間內(nèi)沒 有收到從機的應(yīng)答幀,則主機認(rèn)為幀丟失并重發(fā)呼叫幀;如果發(fā)送 3次仍沒有收到應(yīng)答幀,則系統(tǒng)認(rèn)為該從機處于關(guān)機狀態(tài),開始執(zhí)行其他任務(wù)。在數(shù)據(jù)幀發(fā)送時,本系統(tǒng)采用應(yīng)答方式進(jìn)行差錯控制,即接收方向發(fā)送方回發(fā)特殊的控制命令碼,作為傳輸是否正確的確認(rèn);發(fā)送方收到確認(rèn)后就可知道是否正確發(fā)送,以決定是否重發(fā)。如果傳輸中幀完全丟失,則發(fā)送方進(jìn)行超時處理。即發(fā)送方發(fā)送數(shù)據(jù)后超過一定時間,發(fā)送方認(rèn)為幀丟失,需要重發(fā)。本系統(tǒng)約定最大重發(fā)數(shù)為 3次,超過 3 次系統(tǒng)就認(rèn)為串行通信出現(xiàn)故障,主機進(jì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ù)復(fù)制到擴展緩沖區(qū);如果未發(fā)送成功,則繼續(xù)發(fā)送,發(fā)送成功后再備份新的數(shù)據(jù)。此時進(jìn)來的如果是中斷數(shù)據(jù),只是更新原有的緩沖區(qū),備份緩沖區(qū)的數(shù)據(jù)不會被中斷數(shù)據(jù)更新掉。這種方法很好地解決了通信過程數(shù)據(jù)存儲出錯、丟失的問題,使得通信的可靠性得到很大的提高 [5]。 系統(tǒng) 程序 設(shè)計 Bios 函數(shù)介紹及應(yīng)用 調(diào)用格式: bios( int cmd, char byte, int port) (1) cmd 0 初始化串行口 port 1 發(fā)送一個字符(寫串口) 2 接收一個字符(讀串口) 3 返回串行口當(dāng)前狀態(tài) (2) port 0 表示串行口 1( COM1) 1 表示串行口 2( COM2) 23 (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 接口上進(jìn)行的各種異步通信。 說明:在使用串行口進(jìn)行通行之前,必須對它初始化。函數(shù)中的 3個參數(shù)意義如下所示。 注意, bios() 總是返回一個 16 位的二進(jìn)制數(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 脈沖后沿振鈴檢測 9 接收重疊錯誤 1 數(shù)據(jù)裝置就緒變化 8 接收數(shù)據(jù)就緒 0 清除發(fā)送信號變化 D7 D6 D5 D4 D3 D2 D1 D0 24 利用 bios()函數(shù)采用查詢方式實現(xiàn)從串行口 1 發(fā)送一個字符功能的子函數(shù) sport()如下: void sport(char ch) { while(!(bios(3, 0, 0)amp。0x2020)){ 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ù)準(zhǔn)備就緒”位,若為 1,說明串口收到了一個字符的數(shù)據(jù);否則,用按下任一鍵退出程序的方法避免程序陷入死循環(huán)。這兩個函數(shù)將作為后面發(fā)送和接收文件程序中的子函數(shù)被反復(fù)調(diào)用 [3]。 PC 機通信 程序 設(shè)計 PC 機通信程序采用 C 語言編程。主程序按照通信協(xié)議的要求,首先完成 8250 的初始 25 化,以確定波特率和信息幀格式。 然后根據(jù)鍵入的地址碼,呼叫從機,發(fā)出聯(lián)絡(luò)信號。呼叫成功后,輸入命令,若輸入的是 S 命令,則表示要求單片機向主機發(fā)送數(shù)據(jù),因此, PC機調(diào)用 receivef 子程序準(zhǔn)備接收從機發(fā)來的數(shù)據(jù),并存入盤上指定的文件中去。若輸入的是 R命令,則表示主機要求從機準(zhǔn)備接收信息,因此, PC 機調(diào)用 sendf 子程序?qū)?dāng)前 盤 上的指定文件發(fā)送給從機。 PC 機通信 程序框圖如圖 43所示 [3]: 開始 8250 初始化 延時 發(fā)送地址碼 呼叫成功否? 是從機發(fā)送? 調(diào) 接收文件子程序 調(diào)發(fā)送文件子程序 結(jié)束 發(fā)送命令 N Y N Y ( a) 26 圖 43 PC機通信程序框圖 PC 機通信的主程序流程圖如圖 43( a)所示。 PC 機發(fā)送子程序流程圖如圖 43( b)所示。 PC 機接收子程序流程圖如圖 43( c)所示。 80C51單片機通信 程序 設(shè)計 單片機的數(shù)據(jù)通信 由 串行口完成,定時器 TI作為波特率發(fā)生器,其波特率要與 PC 機一致。數(shù)據(jù)的傳送格式為 1位起始位、 8 位數(shù)據(jù)位、作為地址 /數(shù)據(jù)控制位的第 9位和 1位停止位。采用中斷方式發(fā)送和接收數(shù)據(jù),定時器 TI 設(shè)置為工作模式 2,串行口設(shè)置為工作方式 3,由第 9位判斷地址碼或數(shù)據(jù)。當(dāng)某臺單片機與 PC機發(fā)出的地址碼一致時,就發(fā)出應(yīng)答信號給 PC 機,而其他單片機則不發(fā)應(yīng)答信號,這樣在某一時刻 PC 機只與一臺單片機傳輸信息。這里給出 8051 主程序完成串行口和中斷的初始化后,則等待中斷,以及單片機中斷方式
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1