單片機(jī)電子教案第6章_第1頁
單片機(jī)電子教案第6章_第2頁
單片機(jī)電子教案第6章_第3頁
單片機(jī)電子教案第6章_第4頁
單片機(jī)電子教案第6章_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

本章分為三節(jié),主要引見:6.280C51的串行口6.1計算機(jī)串行通訊根底6.3單片機(jī)串行口運用舉例6.1計算機(jī)串行通訊根底隨著多微機(jī)系統(tǒng)的廣泛運用和計算機(jī)網(wǎng)絡(luò)技術(shù)的普及,計算機(jī)的通訊功能愈來愈顯得重要。計算機(jī)通訊是指計算機(jī)與外部設(shè)備或計算機(jī)與計算機(jī)之間的信息交換。通訊有并行通訊和串行通訊兩種方式。在多微機(jī)系統(tǒng)以及現(xiàn)代測控系統(tǒng)中信息的交換多采用串行通訊方式。計算機(jī)通訊是將計算機(jī)技術(shù)和通訊技術(shù)的相結(jié)合,完成計算機(jī)與外部設(shè)備或計算機(jī)與計算機(jī)之間的信息交換??梢苑譃閮纱箢悾翰⑿型ㄓ嵟c串行通訊。并行通訊通常是將數(shù)據(jù)字節(jié)的各位用多條數(shù)據(jù)線同時進(jìn)展傳送。并行通訊控制簡單、傳輸速度快;由于傳輸線較多,長間隔傳送時本錢高且接納方的各位同時接納存在困難。串行通訊是將數(shù)據(jù)字節(jié)分成一位一位的方式在一條傳輸線上逐個地傳送。串行通訊的特點:傳輸線少,長間隔傳送時本錢低,且可以利用網(wǎng)等現(xiàn)成的設(shè)備,但數(shù)據(jù)的傳送控制比并行通訊復(fù)雜。6.1.1串行通訊的根本概念一、異步通訊與同步通訊1、異步通訊異步通訊是指通訊的發(fā)送與接納設(shè)備運用各自的時鐘控制數(shù)據(jù)的發(fā)送和接納過程。為使雙方的收發(fā)協(xié)調(diào),要求發(fā)送和接納設(shè)備的時鐘盡能夠一致。異步通訊是以字符〔構(gòu)成的幀〕為單位進(jìn)展傳輸,字符與字符之間的間隙〔時間間隔〕是恣意的,但每個字符中的各位是以固定的時間傳送的,即字符之間是異步的〔字符之間不一定有“位間隔〞的整數(shù)倍的關(guān)系〕,但同一字符內(nèi)的各位是同步的〔各位之間的間隔均為“位間隔〞的整數(shù)倍〕。異步通訊的數(shù)據(jù)格式:異步通訊的特點:不要求收發(fā)雙方時鐘的嚴(yán)厲一致,實現(xiàn)容易,設(shè)備開銷較小,但每個字符要附加2~3位用于起止位,各幀之間還有間隔,因此傳輸效率不高。2、同步通訊同步通訊時要建立發(fā)送方時鐘對接納方時鐘的直接控制,使雙方到達(dá)完全同步。此時,傳輸數(shù)據(jù)的位之間的間隔均為“位間隔〞的整數(shù)倍,同時傳送的字符間不留間隙,即堅持位同步關(guān)系,也堅持字符同步關(guān)系。發(fā)送方對接納方的同步可以經(jīng)過兩種方法實現(xiàn)。外同步自同步面向字符的同步格式:此時,傳送的數(shù)據(jù)和控制信息都必需由規(guī)定的字符集〔如ASCII碼〕中的字符所組成。圖中幀頭為1個或2個同步字符SYN〔ASCII碼為16H〕。SOH為序始字符〔ASCII碼為01H〕,表示標(biāo)題的開場,標(biāo)題中包含源地址、目的地址和路由指示等信息。STX為文始字符〔ASCII碼為02H〕,表示傳送的數(shù)據(jù)塊開場。數(shù)據(jù)塊是傳送的正文內(nèi)容,由多個字符組成。數(shù)據(jù)塊后面是組終字符ETB〔ASCII碼為17H〕或文終字符ETX〔ASCII碼為03H〕。然后是校驗碼。典型的面向字符的同步規(guī)程如IBM的二進(jìn)制同步規(guī)程BSC。面向位的同步格式:此時,將數(shù)據(jù)塊看作數(shù)據(jù)流,并用序列01111110作為開場和終了標(biāo)志。為了防止在數(shù)據(jù)流中出現(xiàn)序列01111110時引起的混亂,發(fā)送方總是在其發(fā)送的數(shù)據(jù)流中每出現(xiàn)5個延續(xù)的1就插入一個附加的0;接納方那么每檢測到5個延續(xù)的1并且其后有一個0時,就刪除該0。典型的面向位的同步協(xié)議如ISO的高級數(shù)據(jù)鏈路控制規(guī)程HDLC和IBM的同步數(shù)據(jù)鏈路控制規(guī)程SDLC。同步通訊的特點是以特定的位組合“01111110〞作為幀的開場和終了標(biāo)志,所傳輸?shù)囊粠瑪?shù)據(jù)可以是恣意位。所以傳輸?shù)男瘦^高,但實現(xiàn)的硬件設(shè)備比異步通訊復(fù)雜。二、串行通訊的傳輸方向1、單工單工是指數(shù)據(jù)傳輸僅能沿一個方向,不能實現(xiàn)反向傳輸。2、半雙工半雙工是指數(shù)據(jù)傳輸可以沿兩個方向,但需求分時進(jìn)展。3、全雙工全雙工是指數(shù)據(jù)可以同時進(jìn)展雙向傳輸。單工半雙工全雙工三、信號的調(diào)制與解調(diào)利用調(diào)制器〔Modulator〕把數(shù)字信號轉(zhuǎn)換成模擬信號,然后送到通訊線路上去,再由解調(diào)器〔Demodulator〕把從通訊線路上收到的模擬信號轉(zhuǎn)換成數(shù)字信號。由于通訊是雙向的,調(diào)制器和解調(diào)器合并在一個安裝中,這就是調(diào)制解調(diào)器MODEM。四、串行通訊的錯誤校驗1、奇偶校驗在發(fā)送數(shù)據(jù)時,數(shù)據(jù)位尾隨的1位為奇偶校驗位〔1或0〕。奇校驗時,數(shù)據(jù)中“1〞的個數(shù)與校驗位“1〞的個數(shù)之和應(yīng)為奇數(shù);偶校驗時,數(shù)據(jù)中“1〞的個數(shù)與校驗位“1〞的個數(shù)之和應(yīng)為偶數(shù)。接納字符時,對“1〞的個數(shù)進(jìn)展校驗,假設(shè)發(fā)現(xiàn)不一致,那么闡明傳輸數(shù)據(jù)過程中出現(xiàn)了過失。3、循環(huán)冗余校驗這種校驗是經(jīng)過某種數(shù)學(xué)運算實現(xiàn)有效信息與校驗位之間的循環(huán)校驗,常用于對磁盤信息的傳輸、存儲區(qū)的完好性校驗等。這種校驗方法糾錯才干強,廣泛運用于同步通訊中。2、代碼和校驗代碼和校驗是發(fā)送方將所發(fā)數(shù)據(jù)塊求和〔或各字節(jié)異或〕,產(chǎn)生一個字節(jié)的校驗字符〔校驗和〕附加到數(shù)據(jù)塊末尾。接納方接納數(shù)據(jù)同時對數(shù)據(jù)塊〔除校驗字節(jié)外〕求和〔或各字節(jié)異或〕,將所得的結(jié)果與發(fā)送方的“校驗和〞進(jìn)展比較,相符那么無過失,否那么即以為傳送過程中出現(xiàn)了過失。五、傳輸速率與傳輸間隔1、傳輸速率比特率是每秒鐘傳輸二進(jìn)制代碼的位數(shù),單位是:位/秒〔bps〕。如每秒鐘傳送240個字符,而每個字符格式包含10位(1個起始位、1個停頓位、8個數(shù)據(jù)位),這時的比特率為:10位×240個/秒=2400bps波特率表示每秒鐘調(diào)制信號變化的次數(shù),單位是:波特〔Baud〕。波特率和比特率不總是一樣的,對于將數(shù)字信號1或0直接用兩種不同電壓表示的所謂基帶傳輸,比特率和波特率是一樣的。所以,我們也經(jīng)常用波特率表示數(shù)據(jù)的傳輸速率。2、傳輸間隔與傳輸速率的關(guān)系串行接口或終端直接傳送串行信息位流的最大間隔與傳輸速率及傳輸線的電氣特性有關(guān)。當(dāng)傳輸線運用每0.3m〔約1英尺〕有50PF電容的非平衡屏蔽雙絞線時,傳輸間隔隨傳輸速率的添加而減小。當(dāng)比特率超越1000bps時,最大傳輸間隔迅速下降,如9600bps時最大間隔下降到只需76m〔約250英尺〕。6.1.2串行通訊接口規(guī)范一、RS-232C接口RS-232C是EIA〔美國電子工業(yè)協(xié)會〕1969年修訂RS-232C規(guī)范。RS-232C定義了數(shù)據(jù)終端設(shè)備〔DTE〕與數(shù)據(jù)通訊設(shè)備〔DCE〕之間的物理接口規(guī)范。1、機(jī)械特性RS-232C接口規(guī)定運用25針銜接器,銜接器的尺寸及每個插針的陳列位置都有明確的定義。〔陽頭〕2、功能特性4、過程特性過程特性規(guī)定了信號之間的時序關(guān)系,以便正確地接納和發(fā)送數(shù)據(jù)。遠(yuǎn)程通訊銜接近程通訊銜接5、RS-232C電平與TTL電平轉(zhuǎn)換驅(qū)動電路6、采用RS-232C接口存在的問題1、傳輸間隔短,傳輸速率低RS-232C總線規(guī)范受電容允許值的約束,運用時傳輸間隔普通不要超越15米〔線路條件好時也不超越幾十米〕。最高傳送速率為20Kbps。2、有電平偏移RS-232C總線規(guī)范要求收發(fā)雙方共地。通訊間隔較大時,收發(fā)雙方的地電位差別較大,在信號地上將有比較大的地電流并產(chǎn)生壓降。3、抗干擾才干差RS-232C在電平轉(zhuǎn)換時采用單端輸入輸出,在傳輸過程中當(dāng)干擾和噪聲混在正常的信號中。為了提高信噪比,RS-232C總線規(guī)范不得不采用比較大的電壓擺幅。二、RS-422A接口RS-422A輸出驅(qū)動器為雙端平衡驅(qū)動器。假設(shè)其中一條線為邏輯“1〞形狀,另一條線就為邏輯“0〞,比采用單端不平衡驅(qū)動對電壓的放大倍數(shù)大一倍。差分電路能從地線干擾中拾取有效信號,差分接納器可以分辨200mV以上電位差。假設(shè)傳輸過程中混入了干擾和噪聲,由于差分放大器的作用,可使干擾和噪聲相互抵消。因此可以防止或大大減弱地線干擾和電磁干擾的影響。RS-422A傳輸速率〔90Kbps〕時,傳輸間隔可達(dá)1200米。三、RS-485接口RS-485是RS-422A的變型:RS-422A用于全雙工,而RS-485那么用于半雙工。RS-485是一種多發(fā)送器規(guī)范,在通訊線路上最多可以運用32對差分驅(qū)動器/接納器。假設(shè)在一個網(wǎng)絡(luò)中銜接的設(shè)備超越32個,還可以運用中繼器。RS-485的信號傳輸采用兩線間的電壓來表示邏輯1和邏輯0。由于發(fā)送方需求兩根傳輸線,接納方也需求兩根傳輸線。傳輸線采用差動信道,所以它的干擾抑制性極好,又由于它的阻抗低,無接地問題,所以傳輸間隔可達(dá)1200米,傳輸速率可達(dá)1Mbps。RS-485是一點對多點的通訊接口,普通采用雙絞線的構(gòu)造。普通的PC機(jī)普通不帶RS485接口,因此要運用RS-232C/RS-485轉(zhuǎn)換器。對于單片機(jī)可以經(jīng)過芯片MAX485來完成TTL/RS-485的電平轉(zhuǎn)換。在計算機(jī)和單片機(jī)組成的RS-485通訊系統(tǒng)中,下位機(jī)由單片機(jī)系統(tǒng)組成,上位機(jī)為普通的PC機(jī),擔(dān)任監(jiān)視下位機(jī)的運轉(zhuǎn)形狀,并對其形狀信息進(jìn)展集中處置,以圖文方式顯示下位機(jī)的任務(wù)形狀以及工業(yè)現(xiàn)場被控設(shè)備的任務(wù)情況。系統(tǒng)中各節(jié)點〔包括上位機(jī)〕的識別是經(jīng)過設(shè)置不同的站地址來實現(xiàn)的。6.280C51的串行口有兩個物理上獨立的接納、發(fā)送緩沖器SBUF,它們占用同一地址99H;接納器是雙緩沖構(gòu)造;發(fā)送緩沖器,由于發(fā)送時CPU是自動的,不會產(chǎn)生重疊錯誤。6.2.180C51串行口的構(gòu)造SCON是一個特殊功能存放器,用以設(shè)定串行口的任務(wù)方式、接納/發(fā)送控制以及設(shè)置形狀標(biāo)志:6.2.280C51串行口的控制存放器SM0和SM1為任務(wù)方式選擇位,可選擇四種任務(wù)方式:●SM2,多機(jī)通訊控制位,主要用于方式2和方式3。當(dāng)接納機(jī)的SM2=1時可以利用收到的RB8來控制能否激活RI〔RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的數(shù)據(jù)進(jìn)入SBUF,并激活RI,進(jìn)而在中斷效力中將數(shù)據(jù)從SBUF讀走〕。當(dāng)SM2=0時,不論收到的RB8為0和1,均可以使收到的數(shù)據(jù)進(jìn)入SBUF,并激活RI〔即此時RB8不具有控制RI激活的功能〕。經(jīng)過控制SM2,可以實現(xiàn)多機(jī)通訊。在方式0時,SM2必需是0。在方式1時,假設(shè)SM2=1,那么只需接納到有效停頓位時,RI才置1?!馬EN,允許串行接納位。由軟件置REN=1,那么啟動串行口接納數(shù)據(jù);假設(shè)軟件置REN=0,那么制止接納。●TB8,在方式2或方式3中,是發(fā)送數(shù)據(jù)的第九位,可以用軟件規(guī)定其作用??梢杂米鲾?shù)據(jù)的奇偶校驗位,或在多機(jī)通訊中,作為地址幀/數(shù)據(jù)幀的標(biāo)志位。在方式0和方式1中,該位未用?!馬B8,在方式2或方式3中,是接納到數(shù)據(jù)的第九位,作為奇偶校驗位或地址幀/數(shù)據(jù)幀的標(biāo)志位。在方式1時,假設(shè)SM2=0,那么RB8是接納到的停頓位。●TI,發(fā)送中斷標(biāo)志位。在方式0時,當(dāng)串行發(fā)送第8位數(shù)據(jù)終了時,或在其它方式,串行發(fā)送停頓位的開場時,由內(nèi)部硬件使TI置1,向CPU發(fā)中斷懇求。在中斷效力程序中,必需用軟件將其清0,取消此中斷懇求。●RI,接納中斷標(biāo)志位。在方式0時,當(dāng)串行接納第8位數(shù)據(jù)終了時,或在其它方式,串行接納停頓位的中間時,由內(nèi)部硬件使RI置1,向CPU發(fā)中斷懇求。也必需在中斷效力程序中,用軟件將其清0,取消此中斷懇求。PCON中只需一位SMOD與串行口任務(wù)有關(guān):SMOD〔PCON.7〕波特率倍增位。在串行口方式1、方式2、方式3時,波特率與SMOD有關(guān),當(dāng)SMOD=1時,波特率提高一倍。復(fù)位時,SMOD=0。

6.2.380C51串行口的任務(wù)方式一、方式0方式0時,串行口為同步移位存放器的輸入輸出方式。主要用于擴(kuò)展并行輸入或輸出口。數(shù)據(jù)由RXD〔P3.0〕引腳輸入或輸出,同步移位脈沖由TXD〔P3.1〕引腳輸出。發(fā)送和接納均為8位數(shù)據(jù),低位在先,高位在后。波特率固定為fosc/12。1、方式0輸出

2、方式0輸入方式0接納和發(fā)送電路

二、方式1方式1是10位數(shù)據(jù)的異步通訊口。TXD為數(shù)據(jù)發(fā)送引腳,RXD為數(shù)據(jù)接納引腳,傳送一幀數(shù)據(jù)的格式如下圖。其中1位起始位,8位數(shù)據(jù)位,1位停頓位。1、方式1輸出

2、方式1輸入用軟件置REN為1時,接納器以所選擇波特率的16倍速率采樣RXD引腳電平,檢測到RXD引腳輸入電平發(fā)生負(fù)跳變時,那么闡明起始位有效,將其移入輸入移位存放器,并開場接納這一幀信息的其他位。接納過程中,數(shù)據(jù)從輸入移位存放器右邊移入,起始位移至輸入移位存放器最左邊時,控制電路進(jìn)展最后一次移位。當(dāng)RI=0,且SM2=0〔或接納到的停頓位為1〕時,將接納到的9位數(shù)據(jù)的前8位數(shù)據(jù)裝入接納SBUF,第9位〔停頓位〕進(jìn)入RB8,并置RI=1,向CPU懇求中斷。

三、方式2和方式3方式2或方式3時為11位數(shù)據(jù)的異步通訊口。TXD為數(shù)據(jù)發(fā)送引腳,RXD為數(shù)據(jù)接納引腳。方式2和方式3時起始位1位,數(shù)據(jù)9位〔含1位附加的第9位,發(fā)送時為SCON中的TB8,接納時為RB8〕,停頓位1位,一幀數(shù)據(jù)為11位。方式2的波特率固定為晶振頻率的1/64或1/32,方式3的波特率由定時器T1的溢出率決議。

1、方式2和方式3輸出發(fā)送開場時,先把起始位0輸出到TXD引腳,然后發(fā)送移位存放器的輸出位〔D0〕到TXD引腳。每一個移位脈沖都使輸出移位存放器的各位右移一位,并由TXD引腳輸出。第一次移位時,停頓位“1〞移入輸出移位存放器的第9位上,以后每次移位,左邊都移入0。當(dāng)停頓位移至輸出位時,左邊其他位全為0,檢測電路檢測到這一條件時,使控制電路進(jìn)展最后一次移位,并置TI=1,向CPU懇求中斷。

2、方式2和方式3輸入接納時,數(shù)據(jù)從右邊移入輸入移位存放器,在起始位0移到最左邊時,控制電路進(jìn)展最后一次移位。當(dāng)RI=0,且SM2=0〔或接納到的第9位數(shù)據(jù)為1〕時,接納到的數(shù)據(jù)裝入接納緩沖器SBUF和RB8〔接納數(shù)據(jù)的第9位〕,置RI=1,向CPU懇求中斷。假設(shè)條件不滿足,那么數(shù)據(jù)喪失,且不置位RI,繼續(xù)搜索RXD引腳的負(fù)跳變。四、波特率的計算在串行通訊中,收發(fā)雙方對發(fā)送或接納數(shù)據(jù)的速率要有商定。經(jīng)過軟件可對單片機(jī)串行口編程為四種任務(wù)方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可變的,由定時器T1的溢出率來決議。串行口的四種任務(wù)方式對應(yīng)三種波特率。由于輸入的移位時鐘的來源不同,所以,各種方式的波特率計算公式也不一樣。方式0的波特率=fosc/12方式2的波特率=〔2SMOD/64〕·fosc方式1的波特率=〔2SMOD/32〕·〔T1溢出率〕方式3的波特率=〔2SMOD/32〕·〔T1溢出率〕當(dāng)T1作為波特率發(fā)生器時,最典型的用法是使T1任務(wù)在自動再裝入的8位定時器方式〔即方式2,且TCON的TR1=1,以啟動定時器〕。這時溢出率取決于TH1中的計數(shù)值。T1溢出率=fosc/{12×[256-〔TH1〕]}在單片機(jī)的運用中,常用的晶振頻率為:12MHz和11.0592MHz。所以,選用的波特率也相對固定。常用的串行口波特率以及各參數(shù)的關(guān)系如表所示。串行口任務(wù)之前,應(yīng)對其進(jìn)展初始化,主要是設(shè)置產(chǎn)生波特率的定時器1、串行口控制和中斷控制。詳細(xì)步驟如下:確定T1的任務(wù)方式〔編程TMOD存放器〕;計算T1的初值,裝載TH1、TL1;啟動T1〔編程TCON中的TR1位〕;確定串行口控制〔編程SCON存放器〕;串行口在中斷方式任務(wù)時,要進(jìn)展中斷設(shè)置〔編程IE、IP存放器〕。6.3單片機(jī)串行口運用舉例在計算機(jī)分布式測控系統(tǒng)中,經(jīng)常要利用串行通訊方式進(jìn)展數(shù)據(jù)傳輸。80C51單片機(jī)的串行口為計算機(jī)間的通訊提供了極為便利的條件。利用單片機(jī)的串行口還可以方便地擴(kuò)展鍵盤和顯示器,對于簡單的運用非常便利。這里僅引見單片機(jī)串行口在通訊方面的運用,關(guān)于鍵盤和顯示器的擴(kuò)展將在下一章引見。6.3.1單片機(jī)與單片機(jī)的通訊一、點對點的通訊1、硬件銜接二、運用程序

設(shè)1號機(jī)是發(fā)送方,2號機(jī)是接納方。當(dāng)1號機(jī)發(fā)送時,先發(fā)送一個“E1〞聯(lián)絡(luò)信號,2號機(jī)收到后回答一個“E2〞應(yīng)對信號,表示贊同接納。當(dāng)1號機(jī)收到應(yīng)對信號“E2〞后,開場發(fā)送數(shù)據(jù),每發(fā)送一個數(shù)據(jù)字節(jié)都要計算“校驗和〞,假定數(shù)據(jù)塊長度為16個字節(jié),起始地址為40H,一個數(shù)據(jù)塊發(fā)送終了后立刻發(fā)送“校驗和〞。2號機(jī)接納數(shù)據(jù)并轉(zhuǎn)存到數(shù)據(jù)緩沖區(qū),起始地址也為40H,每接納到一個數(shù)據(jù)字節(jié)便計算一次“校驗和〞,當(dāng)收到一個數(shù)據(jù)塊后,再接納1號機(jī)發(fā)來的“校驗和〞,并將它與2號機(jī)求出的校驗和進(jìn)展比較。假設(shè)兩者相等,闡明接納正確,2號機(jī)回答00H;假設(shè)兩者不相等,闡明接納不正確,2號機(jī)回答0FFH,懇求重發(fā)。1號機(jī)接到00H后終了發(fā)送。假設(shè)收到的回答非零,那么重新發(fā)送數(shù)據(jù)一次。雙方商定采用串行口方式1進(jìn)展通訊,一幀信息為10位,其中有1個起始位、8個數(shù)據(jù)位和一個停頓位;波特率為2400波特,T1任務(wù)在定時器方式2,振蕩頻率選用11.0592MHZ,查表可得TH1=TL1=0F4H,PCON存放器的SMOD位為0。發(fā)送程序清單如下:ASTART:CLREAMOVTMOD,#20H;定時器1置為方式2MOVTH1,#0F4H;裝載定時器初值,波特率2400MOVTL1,#0F4HMOVPCON,#00HSETBTR1;啟動定時器MOVSCON,#50H;設(shè)定串口方式1,且預(yù)備接納應(yīng)對信號ALOOP1:MOVSBUF,#0E1H;發(fā)聯(lián)絡(luò)信號JNBTI,$;等待一幀發(fā)送終了CLRTI;允許再發(fā)送JNBRI,$;等待2號機(jī)的應(yīng)對信號CLRRI;允許再接納MOVA,SBUF;2號機(jī)應(yīng)對后,讀至AXRLA,#0E2H;判別2號機(jī)能否預(yù)備終了JNZALOOP1;2號機(jī)未預(yù)備好,繼續(xù)聯(lián)絡(luò)ALOOP2:MOVR0,#40H;2號機(jī)預(yù)備好,設(shè)定數(shù)據(jù)塊地址指針初值MOVR7,#10H;設(shè)定數(shù)據(jù)塊長度初值MOVR6,#00H;清校驗和單元ALOOP3:MOVSBUF,@R0;發(fā)送一個數(shù)據(jù)字節(jié)MOVA,R6ADDA,@R0;求校驗和MOVR6,A;保管校驗和INCR0JNBTI,$CLRTIDJNZR7,ALOOP3;整個數(shù)據(jù)塊能否發(fā)送終了MOVSBUF,R6;發(fā)送校驗和JNBTI,$CLRTIJNBRI,$;等待2號機(jī)的應(yīng)對信號CLRRIMOVA,SBUF;2號機(jī)應(yīng)對,讀至AJNZALOOP2;2號機(jī)應(yīng)對“錯誤〞,轉(zhuǎn)重新發(fā)送RET;2號機(jī)應(yīng)對“正確〞,前往接納程序清單如下:BSTART:CLREAMOVTMOD,#20HMOVTH1,#0F4HMOVTL1,#0F4HMOVPCON,#00HSETBTR1MOVSCON,#50H;設(shè)定串口方式1,且預(yù)備接納BLOOP1:JNBRI,$;等待1號機(jī)的聯(lián)絡(luò)信號CLRRIMOVA,SBUF;收到1號機(jī)信號XRLA,#0E1H;判能否為1號機(jī)聯(lián)絡(luò)信號JNZBLOOP1;不是1號機(jī)聯(lián)絡(luò)信號,再等待MOVSBUF,#0E2H;是1號機(jī)聯(lián)絡(luò)信號,發(fā)應(yīng)對信號JNBTI,$CLRTIMOVR0,#40H;設(shè)定數(shù)據(jù)塊地址指針初值MOVR7,#10H;設(shè)定數(shù)據(jù)塊長度初值MOVR6,#00H;清校驗和單元BLOOP2:JNBRI,$CLRRIMOVA,SBUFMOV@R0,A;接納數(shù)據(jù)轉(zhuǎn)儲INCR0ADDA,R6;求校驗和MOVR6,ADJNZR7,BLOOP2;判數(shù)據(jù)塊能否接納終了JNBRI,$;終了,接納1號機(jī)發(fā)來的校驗和CLRRIMOVA,SBUFXRLA,R6;比較校驗和JZEND1;校驗和相等,跳至發(fā)正確標(biāo)志MOVSBUF,#0FFH;校驗和不相等,發(fā)錯誤標(biāo)志JNBTI,$;轉(zhuǎn)重新接納CLRTIEND1:MOVSBUF,#00HRET二、多機(jī)通訊1、硬件銜接單片機(jī)構(gòu)成的多機(jī)系統(tǒng)常采用總線型主從式構(gòu)造。所謂主從式,即在數(shù)個單片機(jī)中,有一個是主機(jī),其他的是從機(jī),從機(jī)要服從主機(jī)的調(diào)度、支配。80C31單片機(jī)的串行口方式2和方式3適于這種主從式的通訊構(gòu)造。當(dāng)然采用不同的通訊規(guī)范時,還需進(jìn)展相應(yīng)的電平轉(zhuǎn)換,有時還要對信號進(jìn)展光電隔離。在實踐的多機(jī)運用系統(tǒng)中,常采用RS-485串行規(guī)范總線進(jìn)展數(shù)據(jù)傳輸。2、通訊協(xié)議一切從機(jī)的SM2位置1,處于接納地址幀形狀。主機(jī)發(fā)送一地址幀,其中8位是地址,第9位為地址/數(shù)據(jù)的區(qū)分標(biāo)志,該位置1表示該幀為地址幀。一切從機(jī)收到地址幀后,都將接納的地址與本機(jī)的地址比較。對于地址相符的從機(jī),使本人的SM2位置0〔以接納主機(jī)隨后發(fā)來的數(shù)據(jù)幀〕,并把本站地址發(fā)回主機(jī)作為應(yīng)對;對于地址不符的從機(jī),仍堅持SM2=1,對主機(jī)隨后發(fā)來的數(shù)據(jù)幀不予理睬。從機(jī)發(fā)送數(shù)據(jù)終了后,要發(fā)送一幀校驗和,并置第9位〔TB8〕為1,作為從機(jī)數(shù)據(jù)傳送終了的標(biāo)志。主機(jī)接納數(shù)據(jù)時先判別數(shù)據(jù)接納標(biāo)志〔RB8〕,假設(shè)RB8=1,表示數(shù)據(jù)傳送終了,并比較此幀校驗和,假設(shè)正確那么回送正確信號00H,此信號命令該從機(jī)復(fù)位〔即重新等待地址幀〕;假設(shè)校驗和出錯,那么發(fā)送0FFH,命令該從機(jī)重發(fā)數(shù)據(jù)。假設(shè)接納幀的RB8=0,那么存數(shù)據(jù)到緩沖區(qū),并預(yù)備接納下幀信息。主機(jī)收到從機(jī)應(yīng)對地址后,確認(rèn)地址能否相符,假設(shè)地址不符,發(fā)復(fù)位信號〔數(shù)據(jù)幀中TB8=1〕;假設(shè)地址相符,那么清TB8,開場發(fā)送數(shù)據(jù)。從機(jī)收到復(fù)位命令后回到監(jiān)聽地址形狀〔SM2=1〕。否那么開場接納數(shù)據(jù)和命令。3、運用程序主機(jī)發(fā)送的地址聯(lián)絡(luò)信號為:00H,01H,02H,……〔即從機(jī)設(shè)備地址〕,地址FFH為命令各從機(jī)復(fù)位,即恢復(fù)SM2=1。主機(jī)命令編碼為:01H,主機(jī)命令從機(jī)接納數(shù)據(jù);02H,主機(jī)命令從機(jī)發(fā)送數(shù)據(jù)。其它都按02H對待。RRDY=1:表示從機(jī)預(yù)備好接納。TRDY=1:表示從機(jī)預(yù)備好發(fā)送。ERR=1:表示從機(jī)接納的命令是非法的。程序分為主機(jī)程序和從機(jī)程序。商定一次傳送數(shù)據(jù)為16個字節(jié),以01H地址的從機(jī)為例。主機(jī)程序清單:設(shè)從機(jī)地址號存于40H單元,命令存于41H單元。MAIN:MOVTMOD,#20H;T1方式2 MOVTH1,#0FDH;初始化波特率9600 MOVTL1,#0FDH MOVPCON,#00H SETBTR1 MOVSCON,#0F0H;串口方式3,多機(jī),預(yù)備接納應(yīng)對LOOP1:SETBTB8MOVSBUF,40H;發(fā)送預(yù)通訊從機(jī)地址JNBTI,$ CLRTIJNBRI,$;等待從機(jī)對聯(lián)絡(luò)應(yīng)對 CLRRIMOVA,SBUF;接納應(yīng)對,讀至A XRLA,40H;判應(yīng)對的地址能否正確 JZAD_OKAD_ERR:MOVSBUF,#0FFH;應(yīng)對錯誤,發(fā)命令FFHJNBTI,$CLRTISJMPLOOP1;前往重新發(fā)送聯(lián)絡(luò)信號AD_OK:CLRTB8;應(yīng)對正確 MOVSBUF,41H;發(fā)送命令字JNBTI,$ CLRTIJNBRI,$ ;等待從機(jī)對命令應(yīng)對 CLRRIMOVA,SBUF;接納應(yīng)對,讀至A XRLA,#80H;判別應(yīng)對能否正確JNZCO_OK SETBTB8SJMPAD_ERR;錯誤處置CO_OK:MOVA,SBUF;應(yīng)對正確,判是發(fā)送還是接納命令 XRLA,#01H JZSE_DATA;從機(jī)預(yù)備好接納,可以發(fā)送 MOVA,SBUF XRLA,#02H JZRE_DATA;從機(jī)預(yù)備好發(fā)送,可以接納 LJMPSE_DATARE_DATA:MOVR6,#00H;清校驗和接納16個字節(jié)數(shù)據(jù) MOVR0,#30H MOVR7,#10HLOOP2:JNBRI,$CLRRIMOVA,SBUF MOV@R0,A INCR0 ADDA,R6 MOVR6,ADJNZR7,LOOP2JNBRI,$ CLRRIMOVA,SBUF;接納校驗和并判別 XRLA,R6 JZXYOK;校驗正確 MOVSBUF,#0FFH;校驗錯誤JNBTI,$ CLRTILJMPRE_DATAXYOK:MOVSBUF,#00H;校驗和正確,發(fā)00HJNBTI,$ CLRTISETBTB8;置地址標(biāo)志 LJMPRETENDSE_DATA:MOVR6,#00H;發(fā)送16個字節(jié)數(shù)據(jù) MOVR0,#30H MOVR7,#10HLOOP3:MOVA,@R0 MOVSBUF,AJNBTI,$ CLRTIINCR0 ADDA,R6 MOVR6,A DJNZR7,LOOP3MOVA,R6 MOVSBUF,A;發(fā)校驗和JNBTI,$ CLRTIJNBRI,$ CLRRIMOVA,SBUF XRLA,#00H JZRET_END;從機(jī)接納正確SJMPSE_DATA;從機(jī)接納不正確,重新發(fā)送RET_END:RET從機(jī)程序清單:設(shè)本機(jī)號存于40H單元,41H單元存放“發(fā)送〞命令,42H單元存放“接納〞命令。MAIN:MOVTMOD,#20H;初始化串行口MOVTH1,#0FDH MOVTL1,#0FDHMOVPCON,#00H SETBTR1MOVSCON,#0F0HLOOP1:SETBEA;開中斷 SETBES SETBRRDY;發(fā)送與接納預(yù)備就緒 SETBTRDY SJMPLOOP1SERVE:PUSHPSW;中斷效力程序PUSHACC CLRESCLRRI MOVA,SBUF XRLA,40H;判別能否本機(jī)地址JZSER_OK LJMPENDI;非本機(jī)地址,繼續(xù)監(jiān)聽SER_OK:CLRSM2;是本機(jī)地址,取消監(jiān)聽形狀MOVSBUF,40H;本機(jī)地址發(fā)回JNBTI,$ CLRTIJNBRI,$ CLRRIJBRB8,ENDII;是復(fù)位命令,恢復(fù)監(jiān)聽 MOVA,SBUF;不是復(fù)位命令,判是“發(fā)送〞還是“接納〞 XRLA,41H JZSERISE;收到“發(fā)送〞命令,發(fā)送處置 MOVA,SBUF XRLA,42H JZSERIRE;收到“接納〞命令,接納處置 SJMPFFML;非法命令,轉(zhuǎn)非法處置SERISE:JBTRDY,SEND;從機(jī)發(fā)送能否預(yù)備好MOVSBUF,#00HSJMPWAIT01SEND:MOVSBUF,#02H;前往“發(fā)送預(yù)備好〞WAIT01:JNBTI,$ CLRTIJNBRI,$ CLRRIJBRB8,ENDII;主機(jī)接納能否預(yù)備就緒 LCALLSE_DATA;發(fā)送數(shù)據(jù) LJMPENDFFML:MOVSBUF,#80H;發(fā)非法命令,恢復(fù)監(jiān)聽JNBTI,$ CLRTILJMPENDIISERIRE:JBRRDY,RECE;從機(jī)接納能否預(yù)備好 MOVSBUF,#00H SJMPWAIT02RECE:MOVSBUF,#01H;前往“接納預(yù)備好〞WEIT02:JNBTI,$CLRTIJNBRI,$ CLRRIJBRB8,ENDII;主機(jī)發(fā)送能否就緒 LCALLRE_DATA;接納數(shù)據(jù) LJMPENDENDII:SETBSM2ENDI:SETBESEND:POPACC POPPSW RETISE_DATA:CLRTRDY;發(fā)送數(shù)據(jù)塊子程序 MOVR6,#00H MOVR0,#30HMOVR7,#10HLOOP2:MOVA,@R0 MOVSBUF,AJNBTI,$ CLRTIINCR0 ADDA,R6 MOVR6,A DJNZR7,LOOP2;數(shù)據(jù)塊發(fā)送終了? MOVA,R6 MOVSBUF,AJNBTI,$;發(fā)送校驗和 CLRTIJNBRI,$ CLRRIMOVA,SBUF XRLA,#00H;判發(fā)送能否正確 JZSEND_OK SJMPSE_DATA;發(fā)送錯誤,重發(fā)SEND_OK:SETBSM2;發(fā)送正確,繼續(xù)監(jiān)聽 SETBES RETRE_DATA:CLRRRDY;接納數(shù)據(jù)塊子程序 MOVR6,#00HMOVR0,#30HMOVR7,#10HLOOP3:JNBRI,$ CLRRIMOVA,SBUFMOV@R0,A INCR0 ADDA,R6 MOVR6,A DJNZR7,LOOP3;接納數(shù)據(jù)塊終了?JNBRI,$;接納校驗和 CLRRIMOVA,SBUF XRLA,R6;判別校驗和能否正確 JZRECE_OK MOVSBUF,#0FFH;校驗和錯誤,發(fā)FFHJNBTI,$ CLRTILJMPRE_DATA;重新接納RECE_OK:MOVA,#00H;校驗和正確,發(fā)00H MOVSBUF,AJNBTI,$ CLRTISETBSM2;繼續(xù)監(jiān)聽 SETBES RET

6.3.2單片機(jī)與PC機(jī)的通訊在工控系統(tǒng)〔尤其是多點現(xiàn)場工控系統(tǒng)〕設(shè)計實際中,單片機(jī)與

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論