基于停等式協(xié)議的RS232雙機(jī)通信系統(tǒng)設(shè)計(jì)報(bào)告_第1頁(yè)
基于停等式協(xié)議的RS232雙機(jī)通信系統(tǒng)設(shè)計(jì)報(bào)告_第2頁(yè)
基于停等式協(xié)議的RS232雙機(jī)通信系統(tǒng)設(shè)計(jì)報(bào)告_第3頁(yè)
基于停等式協(xié)議的RS232雙機(jī)通信系統(tǒng)設(shè)計(jì)報(bào)告_第4頁(yè)
基于停等式協(xié)議的RS232雙機(jī)通信系統(tǒng)設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、基于停等式協(xié)議的rs232雙機(jī)通信系統(tǒng)設(shè)計(jì)報(bào)告摘要:串行通信是單片機(jī)的一個(gè)重要應(yīng)用。本次綜合開發(fā)實(shí)驗(yàn)就是要利用單片機(jī)來完成一個(gè)系統(tǒng),實(shí)現(xiàn)雙片單片機(jī)串行通信。通信的結(jié)果實(shí)用數(shù)碼管進(jìn)行顯示,為便于觀察理解停等式arq協(xié)議,分別在主從機(jī)設(shè)置了一個(gè)確認(rèn)按鍵和從發(fā)按鍵。兩個(gè)單片機(jī)之間采用rs232進(jìn)行雙機(jī)通信。在通信過程中,使用停等式arq通信協(xié)議進(jìn)行通信。關(guān)鍵字:通信 單片機(jī) 停等式arq rs232 串行通信一、總體設(shè)計(jì)31.設(shè)計(jì)思想32.設(shè)計(jì)方案33停等式arq協(xié)議原理3二、硬件設(shè)計(jì)71.51單片機(jī)串行通信功能72.max232芯片93.數(shù)碼管的選擇104.電源模塊125rs232串行線126.整

2、體電路設(shè)計(jì)13三、軟件設(shè)計(jì)141.串行通信軟件實(shí)現(xiàn)142奇偶校驗(yàn)的軟件實(shí)現(xiàn)153.程序流程圖17發(fā)送端程序流程圖17接收方程序流程圖184程序設(shè)計(jì)算法:185c51程序19四、加電調(diào)試30五、改進(jìn)與不足33六、元件清單34一、總體設(shè)計(jì)1.設(shè)計(jì)思想:兩片單片機(jī)之間進(jìn)行串行通信,發(fā)送端通過按鍵將18發(fā)送到接收端,并在接收端顯示。同時(shí)在發(fā)端進(jìn)行定時(shí),黃燈亮,等待確認(rèn)信息,5秒后重發(fā),蜂鳴器響。收端收到后進(jìn)行奇偶校驗(yàn)并點(diǎn)亮相應(yīng)的燈(正確的綠燈、錯(cuò)誤的紅燈)。收端通過確認(rèn)按鍵將確認(rèn)信息發(fā)送到發(fā)端,發(fā)端點(diǎn)亮相應(yīng)的燈,若傳輸出錯(cuò),則發(fā)端通過重發(fā)按鍵重發(fā)。2.設(shè)計(jì)方案:本次設(shè)計(jì),對(duì)于兩片89c51,采用rs2

3、32進(jìn)行雙機(jī)通信。發(fā)送方的數(shù)據(jù)由串行口txd段輸出,經(jīng)過電平轉(zhuǎn)換芯片max232將ttl電平轉(zhuǎn)換為rs232電平輸出,經(jīng)過傳輸線將信號(hào)傳送到接收端。接收方也使用max232芯片進(jìn)行電平轉(zhuǎn)換后,信號(hào)到達(dá)接收方串行口的接收端。接受方接收后,在數(shù)碼管上顯示接收的信息。為提高抗干擾能力,還可以在輸入輸出端加光耦合進(jìn)行光電隔離。軟件部分,通過通信協(xié)議進(jìn)行發(fā)送接收,為實(shí)現(xiàn)方便,本系統(tǒng)采用較為簡(jiǎn)單的停等式arq協(xié)議,由于一次放送的信息較少,只用一個(gè)8位二進(jìn)制數(shù),所以采用無連接方式,主機(jī)通過按鍵判斷要發(fā)送的數(shù)值并發(fā)送給收端,相應(yīng)led燈亮,指示燈亮黃燈,表示等待確認(rèn),計(jì)數(shù)器開始計(jì)數(shù),5秒后重發(fā)。收端收到后進(jìn)行

4、奇偶校驗(yàn),相應(yīng)的指示燈亮,若正確則數(shù)碼管顯示相應(yīng)的數(shù)值,否則顯示0,。若正確,收端通過按鍵將0xff發(fā)送給發(fā)端,表示正確接收,一次通信結(jié)束。否則發(fā)送0x00表示不正確,等待重發(fā)3停等式arq協(xié)議原理:自動(dòng)重傳請(qǐng)求(auto repeat request),通過接收方請(qǐng)求發(fā)送方重傳出錯(cuò)的數(shù)據(jù)報(bào)文來恢復(fù)出錯(cuò)的報(bào)文,是通信中用于處理信道所帶來差錯(cuò)的方法之一;另外一個(gè)方法是信道糾錯(cuò)編碼。 傳統(tǒng)自動(dòng)重傳請(qǐng)求分成為三種,即停等式(stop-and-wait)arq,回退n幀(go-back-n)arq,以及選擇性重傳(selective repeat)arq。后兩種協(xié)議是滑動(dòng)窗口技術(shù)與請(qǐng)求重發(fā)技術(shù)的結(jié)合,

5、由于窗口尺寸開到足夠大時(shí),幀在線路上可以連續(xù)地流動(dòng),因此又稱其為連續(xù)arq協(xié)議。三者的區(qū)別在于對(duì)于出錯(cuò)的數(shù)據(jù)報(bào)文的處理機(jī)制不同。 在停等式arq中,數(shù)據(jù)報(bào)文發(fā)送完成之后,發(fā)送方等待接收方的狀態(tài)報(bào)告,如果狀態(tài)報(bào)告報(bào)文發(fā)送成功,發(fā)送后續(xù)的數(shù)據(jù)報(bào)文,否則重傳該報(bào)文。 停等式arq,發(fā)送窗口和接收窗口大小均為1,發(fā)送方每發(fā)送一幀之后就必須停下來等待接收方的確認(rèn)返回,僅當(dāng)接收方確認(rèn)正確接收后再繼續(xù)發(fā)送下一幀。該方法所需要的緩沖存儲(chǔ)空間最小,缺點(diǎn)是信道效率很低。 在回退n幀的arq中,當(dāng)發(fā)送方接收到接收方的狀態(tài)報(bào)告指示報(bào)文出錯(cuò)后,發(fā)送方將重傳過去的n個(gè)報(bào)文。 回退n,發(fā)送窗口大于1,接收窗口等于1。允許發(fā)

6、送方可以連續(xù)發(fā)送信息幀,但是,一旦某幀發(fā)生錯(cuò)誤,必須重新發(fā)送該幀及其后的n幀。這種方式提高了信道的利用率,但允許已發(fā)送有待于確認(rèn)的幀越多,可能要退回來重發(fā)的幀也越多。 在選擇性重傳arq中,當(dāng)發(fā)送方接收到接收方的狀態(tài)報(bào)告指示報(bào)文出錯(cuò),發(fā)送方只發(fā)送傳送發(fā)生錯(cuò)誤的報(bào)文。 選擇重傳協(xié)議,發(fā)送窗口和接收窗口都大于1。發(fā)送方僅重新傳輸發(fā)生錯(cuò)誤的幀,并緩存錯(cuò)誤幀之后發(fā)送的幀。與回退n相比,減少了出錯(cuò)幀之后正確的幀都要重傳的開銷。 三種arq協(xié)議中,復(fù)雜性遞增,效率也遞增。 除了傳統(tǒng)的arq,還有混合arq(hybrid-arq)。在混合arq中,數(shù)據(jù)報(bào)文傳送到接收方之后,即使出錯(cuò)也不會(huì)被丟棄。接收方指示發(fā)

7、送方重傳出錯(cuò)報(bào)文的部分或者全部信息,將再次收到的報(bào)文信息與上次收到的報(bào)文信息進(jìn)行合并,以恢復(fù)報(bào)文信息。 在現(xiàn)代的無線通信中,arq主要應(yīng)用在無線鏈路層。比如,在wcdma和cdma2000無線通信中都采用了選擇性重傳arq和混合arq。 優(yōu)點(diǎn):比較簡(jiǎn)單 。 缺點(diǎn):通信信道的利用率不高,也就是說,信道還遠(yuǎn)遠(yuǎn)沒有被數(shù)據(jù)比特填滿。實(shí)用的數(shù)據(jù)鏈路層協(xié)議應(yīng)考慮到:傳輸數(shù)據(jù)的信道不是可靠的(即不能保證所傳的數(shù)據(jù)不產(chǎn)生差錯(cuò)),并且還需要對(duì)數(shù)據(jù)的發(fā)送端進(jìn)行流量控制。在傳輸過程中不出差錯(cuò)的情況下,接收方在收到一個(gè)正確的數(shù)據(jù)幀后即交付給主機(jī)b,同時(shí)向主機(jī)a發(fā)送一個(gè)確認(rèn)幀ack。當(dāng)主機(jī)a收到確認(rèn)幀ack后才能發(fā)送一

8、個(gè)新的數(shù)據(jù)幀,這樣就實(shí)現(xiàn)了接收方對(duì)發(fā)送方的流量控制?,F(xiàn)在假定數(shù)據(jù)幀在傳輸過程中出現(xiàn)了差錯(cuò)。由于通常都在數(shù)據(jù)幀中加上了循環(huán)冗余校驗(yàn)crc,所以節(jié)點(diǎn)b很容易檢驗(yàn)出收到的數(shù)據(jù)幀是否會(huì)有差錯(cuò)。當(dāng)發(fā)現(xiàn)差錯(cuò)時(shí),節(jié)點(diǎn)b 就向主機(jī)a發(fā)送一個(gè)否認(rèn)幀nak,以表示主機(jī)a應(yīng)當(dāng)重發(fā)出現(xiàn)差錯(cuò)的那個(gè)數(shù)據(jù)幀。如多次出現(xiàn)差錯(cuò),就要多次重發(fā)數(shù)據(jù)幀,直至收到節(jié)點(diǎn)b發(fā)來的確認(rèn)幀ack為止。為此,在發(fā)送端必須暫時(shí)保存已發(fā)送過的數(shù)據(jù)幀的副本。當(dāng)通信質(zhì)量太差時(shí),主機(jī)a在重發(fā)一定的次數(shù)后即不再進(jìn)行重發(fā),而是將此情況向上一層報(bào)告。 有時(shí)鏈路上的干擾很嚴(yán)重,或由于其他一些原因,節(jié)點(diǎn)b收不到節(jié)點(diǎn)a發(fā)來的數(shù)據(jù)幀,這種情況稱為幀丟失。發(fā)送幀丟失時(shí)節(jié)

9、點(diǎn)b當(dāng)然不會(huì)向節(jié)點(diǎn)a發(fā)送任何應(yīng)答幀。如果節(jié)點(diǎn)a要等到節(jié)點(diǎn)b的應(yīng)答信息后再發(fā)送下一個(gè)數(shù)據(jù)幀,那么將永遠(yuǎn)等待下去,于是就出現(xiàn)了死鎖現(xiàn)象。同理,若節(jié)點(diǎn)b發(fā)過來的應(yīng)答幀丟失,也會(huì)出現(xiàn)這種死鎖現(xiàn)象。要解決死鎖問題,可在節(jié)點(diǎn)a發(fā)送完一個(gè)數(shù)據(jù)幀時(shí)就啟動(dòng)一個(gè)超時(shí)定時(shí)器。若在超時(shí)定時(shí)器所設(shè)置的定時(shí)時(shí)間t到了仍收不到節(jié)點(diǎn)b的任何應(yīng)答幀,則節(jié)點(diǎn)a就重傳前面所發(fā)送的這一數(shù)據(jù)幀。顯然,超時(shí)定時(shí)器設(shè)置的定時(shí)時(shí)間應(yīng)仔細(xì)選擇確定。若定時(shí)時(shí)間選得太短,則還沒有收到應(yīng)答幀就重發(fā)了數(shù)據(jù)幀。若定時(shí)選得太長(zhǎng),則要白白浪費(fèi)許多時(shí)間。一般可將定時(shí)時(shí)間選為略大于從發(fā)完數(shù)據(jù)幀到收到應(yīng)答幀所需的平均時(shí)間。 然而問題并沒有完全解決。如果丟失的是應(yīng)

10、答幀,超時(shí)重發(fā)將使主機(jī)b收到兩個(gè)同樣的數(shù)據(jù)幀。由于主機(jī)b無法識(shí)別重復(fù)的數(shù)據(jù)幀,因而在主機(jī)b收到的數(shù)據(jù)中出現(xiàn)了另一種差錯(cuò)-重復(fù)幀。要解決重復(fù)幀的問題,必須使每一個(gè)數(shù)據(jù)幀帶上不同的發(fā)送序號(hào)。每發(fā)送一個(gè)新的數(shù)據(jù)幀就把它的發(fā)送序號(hào)加1。若節(jié)點(diǎn)b收到發(fā)送序號(hào)相同的數(shù)據(jù)幀,就表明出現(xiàn)了重復(fù)幀。節(jié)點(diǎn)b應(yīng)當(dāng)丟棄這重復(fù)幀,并向節(jié)點(diǎn)a發(fā)送一個(gè)確認(rèn)幀ack,因?yàn)楣?jié)點(diǎn) b已經(jīng)知道節(jié)點(diǎn)a還沒有收到上一次發(fā)過去的確認(rèn)幀ack(有可能此確認(rèn)幀在傳輸過程中出錯(cuò))。 任何一個(gè)編號(hào)系統(tǒng)的序號(hào)所占用的比特?cái)?shù)一定是有限的。因此,經(jīng)過一段時(shí)間后序號(hào)就會(huì)重復(fù)。例如,當(dāng)發(fā)送序號(hào)占3比特時(shí),共有8個(gè)不同的發(fā)送序號(hào),從000到111。 當(dāng)數(shù)據(jù)

11、幀的發(fā)送序號(hào)為111時(shí),下一個(gè)發(fā)送序號(hào)就又是000。因此要進(jìn)行編號(hào)就要考慮序號(hào)到底要占用多少比特。序號(hào)占用的比特?cái)?shù)越少,數(shù)據(jù)傳輸?shù)念~外開銷就越小。對(duì)于停止等待協(xié)議,由于每發(fā)送一個(gè)數(shù)據(jù)幀就停止等待,因此用一比特來編號(hào)就夠了。這樣,數(shù)據(jù)幀中的發(fā)送序號(hào)(以后記為n(s),s表示發(fā)送)就以0和1交替的方式出現(xiàn)在數(shù)據(jù)幀中。每發(fā)一個(gè)新的數(shù)據(jù)幀,發(fā)送序號(hào)就和上次發(fā)送的不一樣。用這樣的方法就可以使接收方能夠區(qū)分開新的數(shù)據(jù)幀和重發(fā)的數(shù)據(jù)幀了。二、硬件設(shè)計(jì)1.51單片機(jī)串行通信功能圖1.stc89c52計(jì)算機(jī)與外界的信息交換稱為通信,常用的通信方式有兩種:并行通信和串行通信。51單片機(jī)用4個(gè)接口與外界進(jìn)行數(shù)據(jù)輸入

12、與數(shù)據(jù)輸出就是并行通信,并行通信的特點(diǎn)是傳輸信號(hào)的速度快,但所用的信號(hào)線較多,成本高,傳輸?shù)木嚯x較近。串行通信的特點(diǎn)是只用兩條信號(hào)線(一條信號(hào)線,再加一條地線作為信號(hào)回路)即可完成通信,成本低,傳輸?shù)木嚯x較遠(yuǎn)。51單片機(jī)的串行接口是一個(gè)全雙工的接口,它可以作為uart(通用異步接受和發(fā)送器)用,也可以作為同步移位寄存器用。51單片機(jī)串行接口的結(jié)構(gòu)如下:(1)數(shù)據(jù)緩沖器(sbuf)接受或發(fā)送的數(shù)據(jù)都要先送到sbuf緩存。有兩個(gè),一個(gè)緩存,另一個(gè)接受,用同一直接地址99h,發(fā)送時(shí)用指令將數(shù)據(jù)送到sbuf即可啟動(dòng)發(fā)送;接收時(shí)用指令將sbuf中接收到的數(shù)據(jù)取出。(2)串行控制寄存器(pcon)scon

13、用于串行通信方式的選擇,收發(fā)控制及狀態(tài)指示,各位含義如下:sm0sm1sm2rentb8rb8tirism0,sm1:串行接口工作方式選擇位,這兩位組合成00,01,10,11對(duì)應(yīng)于工作方式0、1、2、3。串行接口工作方式特點(diǎn)見下表sm0sm1工作方式功能波特率 0008位同步移位寄存器(用于i/o擴(kuò)展)forc/1201110位異步串行通信(uart)可變(t1溢出率*2smod/32)10211位異步串行通信(uart)forc/64或forc/3211311位異步串行通信(uart)可變(t1溢出率*2smod/32)sm2:多機(jī)通信控制位。ren:接收允許控制位。軟件置1允許接收;軟件

14、置0禁止接收。tb8:方式2或3時(shí),tb8為要發(fā)送的第9位數(shù)據(jù),根據(jù)需要由軟件置1或清0。rb9:在方式2或3時(shí),rb8位接收到的第9位數(shù)據(jù),實(shí)際為主機(jī)發(fā)送的第9位數(shù)據(jù)tb8,使從機(jī)根據(jù)這一位來判斷主機(jī)發(fā)送的時(shí)呼叫地址還是要傳送的數(shù)據(jù)。ti:發(fā)送中斷標(biāo)志。發(fā)送完一幀數(shù)據(jù)后由硬件自動(dòng)置位,并申請(qǐng)中斷。必須要軟件清零后才能繼續(xù)發(fā)送。ri:接收中斷標(biāo)志。接收完一幀數(shù)據(jù)后由硬件自動(dòng)置位,并申請(qǐng)中斷。必須要軟件清零后才能繼續(xù)接收。(3)輸入移位寄存器接收的數(shù)據(jù)先串行進(jìn)入輸入移位寄存器,8位數(shù)據(jù)全移入后,再并行送入接收sbuf中。(4)波特率發(fā)生器波特率發(fā)生器用來控制串行通信的數(shù)據(jù)傳輸速率的,51系列單片

15、機(jī)用定時(shí)器t1作為波特率發(fā)生器,t1設(shè)置在定時(shí)方式。波特率時(shí)用來表示串行通信數(shù)據(jù)傳輸快慢程度的物理量,定義為每秒鐘傳送的數(shù)據(jù)位數(shù)。(5)電源控制寄存器pcon其最高位為smod。(6)波特率計(jì)算當(dāng)定時(shí)器t1工作在定時(shí)方式的時(shí)候,定時(shí)器t1溢出率=(t1計(jì)數(shù)率)/(產(chǎn)生溢出所需機(jī)器周期)。由于是定時(shí)方式,t1計(jì)數(shù)率= forc/12。產(chǎn)生溢出所需機(jī)器周期數(shù)=模m-計(jì)數(shù)初值x。2.max232芯片用8051串行接口通信,如果兩臺(tái)8051單片機(jī)之間的距離很近(不超過1.5m),可以采用直接將兩臺(tái)8051單片機(jī)的串行接口直接相連,利用其自身的ttl電平(0-5v)直接傳輸數(shù)據(jù)信息。如果傳輸距離較遠(yuǎn)(超

16、過1.5m),由于傳輸線的阻抗與分布電容,會(huì)產(chǎn)生電平損耗和波形畸變,以至于檢測(cè)不出數(shù)據(jù)或數(shù)據(jù)出錯(cuò)。此時(shí)可利用 rs232標(biāo)準(zhǔn)總線接口,將單片機(jī)輸出的ttl電平轉(zhuǎn)換為rs232標(biāo)準(zhǔn)電平(邏輯1為-15-5v;邏輯0為+5-+15v)。用rs232可將傳輸距離提高到15m,如果想遠(yuǎn)距離傳輸,可以采用rs422或者rs485。該產(chǎn)品是由德州儀器公司( ti )推出的一款兼容 rs232 標(biāo)準(zhǔn)的芯片。由于電腦串口 rs232 電平是 -10v +10v ,而一般的單片機(jī)應(yīng)用系統(tǒng)的信號(hào)電壓是 ttl 電平 0 +5v,ma x232 就是用來進(jìn)行電平轉(zhuǎn)換的 ,該器件包含 2 驅(qū)動(dòng)器、 2 接收器和一個(gè)電

17、壓發(fā)生器電路提供 tia/eia-232-f 電平。該器件符合 tia/eia-232-f 標(biāo)準(zhǔn),每一個(gè)接收器將 tia/eia-232-f 電平轉(zhuǎn)換成 5-v ttl/cmos 電平。每一個(gè)發(fā)送器將 ttl/cmos 電平轉(zhuǎn)換成 tia/eia-232-f 電平。其主要特點(diǎn)如下:1 、單 5v 電源工作2 、 linbicmostm 工藝技術(shù)3 、 兩個(gè)驅(qū)動(dòng)器及兩個(gè)接收器4 、 30v 輸入電平5 、低電源電流:典型值是 8ma6 、符合甚至優(yōu)于 ansi 標(biāo)準(zhǔn) eia/tia-232-e 及 itu 推薦標(biāo)準(zhǔn) v.287 、 esd 保護(hù)大于 mil-std-883 (方 法 3015 )

18、標(biāo)準(zhǔn)的 2000v圖2.電平轉(zhuǎn)換芯片max2323.數(shù)碼管的選擇七段數(shù)碼管引腳圖數(shù)碼管使用條件:a、段及小數(shù)點(diǎn)上加限流電阻b、使用電壓:段:根據(jù)發(fā)光顏色決定; 小數(shù)點(diǎn):根據(jù)發(fā)光顏色決定c、使用電流:靜態(tài):總電流 80ma(每段 10ma);動(dòng)態(tài):平均電流 4-5ma 峰值電流 100ma數(shù)碼管使用注意事項(xiàng)說明:()數(shù)碼管表面不要用手觸摸,不要用手去弄引角;()焊接溫度:度;焊接時(shí)間:()表面有保護(hù)膜的產(chǎn)品,可以在使用前撕下來。這類數(shù)碼管可以分為共陽(yáng)極與共陰極兩種,共陽(yáng)極就是把所有l(wèi)ed的陽(yáng)極連接到共同接點(diǎn)com,而每個(gè)led的陰極分別為a、b、c、d、e、f、g及dp(小數(shù)點(diǎn));共陰極則是把所

19、有l(wèi)ed的陰極連接到共同接點(diǎn)com,而每個(gè)led的陽(yáng)極分別為a、b、c、d、e、f、g及dp(小數(shù)點(diǎn)),如下圖所示。圖中的8個(gè)led分別與上面那個(gè)圖中的adp各段相對(duì)應(yīng),通過控制各個(gè)led的亮滅來顯示數(shù)字。 那么,實(shí)際的數(shù)碼管的引腳是怎樣排列的呢?對(duì)于單個(gè)數(shù)碼管來說,從它的正面看進(jìn)去,左下角那個(gè)腳為1腳,以逆時(shí)針方向依次為110腳,左上角那個(gè)腳便是10腳了,上面兩個(gè)圖中的數(shù)字分別與這10個(gè)管腳一一對(duì)應(yīng)。注意,3腳和8腳是連通的,這兩個(gè)都是公共腳。4.電源模塊:為使用方便,本系統(tǒng)采用usb供電,使用一片7805來提供穩(wěn)定的5v電源,防止加電的瞬間產(chǎn)生較大的電抖動(dòng),影響系統(tǒng)性能。5rs232串行線

20、:rs-232c 標(biāo)準(zhǔn)(協(xié)議)的全稱是 eia-rs-232c 標(biāo)準(zhǔn),其中eia (electronic industry association)代表美國(guó)電子工業(yè)協(xié)會(huì),rs(recommeded standard)代表推薦標(biāo)準(zhǔn),232是標(biāo)識(shí)號(hào),c代表rs232的最新一次修改(1969),在這之前,有rs232b、rs232a。它規(guī)定連接電纜和機(jī)械、電氣特性、信號(hào)功能及傳送過程。 電氣特性eia-rs-232c 對(duì)電器特性、邏輯電平和各種信號(hào)線功能都作了規(guī)定。 在txd和rxd上: 邏輯1(mark)=-3v-15v 邏輯0(space)=+3+15v 在rts、cts、dsr、dtr和dcd

21、等控制線上: 信號(hào)有效(接通,on狀態(tài),正電壓)+3v+15v 信號(hào)無效(斷開,off狀態(tài),負(fù)電壓)=-3v-15v 以上規(guī)定說明了rs-323c標(biāo)準(zhǔn)對(duì)邏輯電平的定義。對(duì)于數(shù)據(jù)(信息碼):邏輯“1”(傳號(hào))的電平低于-3v,邏輯“0”(空號(hào))的電平高于+3v;對(duì)于控制信號(hào);接通狀態(tài)(on)即信號(hào)有效的電平高于+3v,斷開狀態(tài)(off)即信號(hào)無效的電平低于-3v,也就是當(dāng)傳輸電平的絕對(duì)值大于3v時(shí),電路可以有效地檢查出來,介于-3+3v之間的電壓無意義,低于-15v或高于+15v的電壓也認(rèn)為無意義,因此,實(shí)際工作時(shí),應(yīng)保證電平在(315)v之間。 eia rs-232c 與ttl轉(zhuǎn)換:eia r

22、s-232c 是用正負(fù)電壓來表示邏輯狀態(tài),與ttl以高低電平表示邏輯狀態(tài)的規(guī)定不同。因此,為了能夠同計(jì)算機(jī)接口或終端的ttl器件連接,必須在eia rs-232c 與ttl電路之間進(jìn)行電平和邏輯關(guān)系的變換。實(shí)現(xiàn)這種變換的方法可用分立元件,也可用集成電路芯片。目前較為廣泛地使用集成電路轉(zhuǎn)換器件,如mc1488、sn75150芯片可完成ttl電平到eia電平的轉(zhuǎn)換,而mc1489、sn75154可實(shí)現(xiàn)eia電平到ttl電平的轉(zhuǎn)換。max232芯片可完成ttleia雙向電平轉(zhuǎn)換。6.整體電路設(shè)計(jì)最終設(shè)計(jì)電路如下圖3所示,發(fā)送方的數(shù)據(jù)由串行口txd段輸出,經(jīng)過電平轉(zhuǎn)換芯片max232將ttl電平轉(zhuǎn)換為

23、rs232電平輸出,經(jīng)過傳輸線將信號(hào)傳送到接收端。接收方也使用max232芯片進(jìn)行電平轉(zhuǎn)換后,信號(hào)到達(dá)接收方串行口的接收端。接受方接收后,通過p0口在數(shù)碼管上顯示接收的信息。圖3.串行通信電路三、軟件設(shè)計(jì)通過通信協(xié)議進(jìn)行發(fā)送接收,發(fā)送端通過按鍵將18發(fā)送到接收端,并在接收端顯示。同時(shí)在發(fā)端進(jìn)行定時(shí),黃燈亮,等待確認(rèn)信息,5秒后重發(fā),蜂鳴器響。收端收到后進(jìn)行奇偶校驗(yàn)并點(diǎn)亮相應(yīng)的燈(正確的綠燈、錯(cuò)誤的紅燈)。收端通過確認(rèn)按鍵將確認(rèn)信息發(fā)送到發(fā)端,發(fā)端點(diǎn)亮相應(yīng)的燈,若傳輸出錯(cuò),則發(fā)端通過重發(fā)按鍵重發(fā)。1.串行通信軟件實(shí)現(xiàn)(1)串行口工作于方式3;采用恒定的波特率。(2)功能:通過主機(jī)的按鍵,將數(shù)值發(fā)

24、送到從機(jī),并由通信協(xié)議保證通信的可靠性。(3)通信協(xié)議:停等式arq協(xié)議(4)通信過程使用第九位發(fā)送奇偶校驗(yàn)位。(5)從機(jī)接收到一個(gè)數(shù)據(jù)后,立即進(jìn)行奇偶校驗(yàn),若數(shù)據(jù)沒有錯(cuò)誤,則返回00h,否則返回ffh。(6)主機(jī)發(fā)送一個(gè)數(shù)據(jù)后,等待從機(jī)返回?cái)?shù)據(jù);若為00h,則繼續(xù)發(fā)送下一個(gè)數(shù)據(jù),若為ffh,則重新發(fā)送數(shù)據(jù)。2奇偶校驗(yàn)的軟件實(shí)現(xiàn)stc89c52單片機(jī)的串行口有種工作方式。方式為移位寄存器方式,用于外接同步設(shè)備或擴(kuò)展口,不算起始位和停止位。方式為位異步串行通訊,方式和方式為位異步串行通訊。方式和方式中的第位是可程控位,即可由軟件來確定第位是“”還是“”。也就是說,stc89c52單片機(jī)不像某些專

25、用串行芯片,如、等那樣,可根據(jù)初始化條件自動(dòng)加入串行通訊中的奇偶校驗(yàn)位發(fā)送出去,而是需要軟件參與產(chǎn)生奇偶校驗(yàn)位。用軟件產(chǎn)生奇偶校驗(yàn)位是根據(jù)stc89c52單片機(jī)的狀態(tài)寄存器的定義:當(dāng)累加器中為的個(gè)數(shù)為奇數(shù)時(shí),否則,來編程的。假定待發(fā)送的數(shù)據(jù)已放入累加器中,可用如下匯編語(yǔ)言來實(shí)現(xiàn)(串行口工作于方式): ,; 把奇偶標(biāo)志送給進(jìn)位位 ,; 把進(jìn)位位送給 ,; 把待發(fā)送的數(shù)據(jù)放入串行口 用語(yǔ)言來編寫時(shí),因累加器對(duì)編程者不透明,則會(huì)帶來問題。例如,假定待發(fā)送的數(shù)據(jù)已放入變量中,若要從串行口發(fā)送出去,想當(dāng)然地認(rèn)為使用如下語(yǔ)句即可: ; *語(yǔ)句* *語(yǔ)句* 實(shí)際上,條語(yǔ)句并不能可靠地產(chǎn)生奇偶校驗(yàn)位。因?yàn)樵谡Z(yǔ)

26、句前面的語(yǔ)句所對(duì)應(yīng)的匯編語(yǔ)言中的累加器中為的個(gè)數(shù)是不確定的,而語(yǔ)句又是不可分割的。語(yǔ)句和對(duì)應(yīng)的匯編語(yǔ)言程序?yàn)椋?,; 語(yǔ)句 ,; 語(yǔ)句 ,; 語(yǔ)句 ,; 語(yǔ)句 可以看出,只有將語(yǔ)句、放到語(yǔ)句和語(yǔ)句之間時(shí),才能正確地產(chǎn)生奇偶校驗(yàn)位。為了達(dá)到這一目的,可引入全局變量相應(yīng)的語(yǔ)言程序如下: ; * 語(yǔ)句* ; * 語(yǔ)句* ; *語(yǔ)句 * ; *語(yǔ)句* 需要強(qiáng)調(diào)的是: 在串行中斷服務(wù)程序中,一定要設(shè)置為全局變量,若設(shè)置為局部變量,則可能引起意想不到的后果。 語(yǔ)句和語(yǔ)句盡量不要縮寫成: ; * 語(yǔ)句* 而把全局變量省掉。這主要是為了防止編譯程序在某種可能的編譯優(yōu)化條件下將語(yǔ)句也省略掉。3.程序流程圖發(fā)送端

27、程序流程圖掃描按鍵程序初始化主機(jī)發(fā)送數(shù)據(jù),檢驗(yàn)和輸出完成?n清除標(biāo)志位相應(yīng)的燈亮,數(shù)碼管計(jì)時(shí)主程序開始收端正確應(yīng)答結(jié)束是否接收方程序流程圖主程序開始檢驗(yàn)和相等?程序初始化接收數(shù)據(jù),計(jì)算檢驗(yàn)和n發(fā)送00h至主機(jī)接收完成?n清除標(biāo)志位發(fā)送ffh,重新接收顯示4程序設(shè)計(jì)算法:主機(jī):1、 while(1),初始化,開中斷2、 while,循環(huán)檢測(cè)電鍵動(dòng)作,直到有電鍵按下3、 if有電鍵按下,相應(yīng)燈亮,記錄鍵值,便于需要時(shí)重發(fā),向從機(jī)發(fā)送相應(yīng)的數(shù)字?jǐn)?shù)碼管開始計(jì)數(shù),超時(shí)后重發(fā),等確認(rèn)等亮4、 while(!ti)等待傳輸結(jié)束5、 while(!ri)等待接收確認(rèn)結(jié)束6、 判斷傳輸是否正確7、 若正確,正確

28、燈亮,等待燈滅,進(jìn)入下一循環(huán)8、 若不正確,錯(cuò)誤燈亮,等確認(rèn)燈滅9、 循環(huán)檢測(cè)重發(fā)按鍵狀態(tài)10、若按下,錯(cuò)誤燈滅,等待燈亮,蜂鳴器響重發(fā),轉(zhuǎn)到5從機(jī):1、 while(1)大循環(huán),初始化,開中斷2、 while(1)ri等待接收結(jié)束3、 若正確,正確燈亮,數(shù)碼管顯示相應(yīng)數(shù)字,置sbuf寄存器為正確值4、 若不正確,錯(cuò)誤燈亮,置寄存器sbuf為錯(cuò)誤值5、 while,ti等待傳輸結(jié)束5c51程序:主機(jī):#include#define uchar unsigned char void init();void send(uchar);void delay(int); /延時(shí)1msuchar code

29、 tab9 =0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f;uchar i,sum;int j;sbit key0 = p10;sbit key1 = p11;sbit key2 = p12;sbit key3 = p13;sbit key4 = p14;sbit key5 = p15;sbit key6 = p16;sbit key7 = p17;/bit key = key0,key1,key2,key3,key4,key5,key6,key7; c51不能進(jìn)行位尋址sbit led0 = p20;sbit led1 = p21;sbit led

30、2 = p22;sbit led3 = p23;sbit led4 = p24;sbit led5 = p25;sbit led6 = p26;sbit led7 = p27;sbit waiting = p32;sbit right = p33;sbit error = p34;sbit beep = p35;sbit key_resend = p36;uchar keytag = 10; /記錄按下的電鍵uchar var = 0; /用于實(shí)現(xiàn)奇偶校驗(yàn),具體見報(bào)告void main() uchar i; while(1)while(1) if(key0=0)delay(10); /延時(shí)10

31、ms,去抖動(dòng)if(key0=0) /電鍵確實(shí)被按下keytag = 0;break;else if(key1=0)delay(10);if(key1=0)keytag = 1;break;else if(key2=0)delay(10);if(key2=0)keytag = 2;break;else if(key3=0)delay(10);if(key3=0)keytag = 3;break;else if(key4=0)delay(10);if(key4=0)keytag = 4;break;else if(key5=0)delay(10);if(key5=0)keytag = 5;brea

32、k;else if(key6=0)delay(10);if(key6=0)keytag = 6;break;else if(key7=0)delay(10);if(key7=0)keytag = 7;break; init();switch(keytag) /根據(jù)按下的電鍵,點(diǎn)亮相應(yīng)的燈,并發(fā)送數(shù)據(jù)case 0:led0 = 0;break;case 1:led1 = 0;break;case 2:led2 = 0;break;case 3:led3 = 0;break;case 4:led4 = 0;break;case 5:led5 = 0;break;case 6:led6 = 0;break;case 7:led7 = 0; break;while(1)while(1)send(tabkeytag+1);error = 1; /error燈滅,保證重發(fā)時(shí)燈正常顯示waiting = 0; /等待確認(rèn)等亮p0 = tab0; /初始化數(shù)碼管for(i=0;i0;a-)for(b=110;b0;b-);void send(uchar number)number+=var;tb8 = p; /設(shè)置奇偶校驗(yàn)位sbuf = number;while(!ti);ti=0; /傳送結(jié)束從機(jī):#include#define uchar unsigned char#define uin

溫馨提示

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

評(píng)論

0/150

提交評(píng)論