版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、綜合開發(fā)實(shí)驗(yàn)基于停等式協(xié)議的rs232雙機(jī)通信系統(tǒng)基于停等式協(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ù)碼管的選
2、擇104.電源模塊125rs232串行線126.整體電路設(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)的燈(正確的綠燈、錯誤的紅燈)。收端通過確認(rèn)按鍵將確認(rèn)信息發(fā)送到發(fā)端,發(fā)端點(diǎn)亮相應(yīng)的燈,若傳輸出錯,則發(fā)端通過重發(fā)按鍵重發(fā)。2.
3、設(shè)計(jì)方案:本次設(shè)計(jì),對于兩片89c51,采用rs232進(jìn)行雙機(jī)通信。發(fā)送方的數(shù)據(jù)由串行口txd段輸出,經(jīng)過電平轉(zhuǎn)換芯片max232將ttl電平轉(zhuǎn)換為rs232電平輸出,經(jīng)過傳輸線將信號傳送到接收端。接收方也使用max232芯片進(jìn)行電平轉(zhuǎn)換后,信號到達(dá)接收方串行口的接收端。接受方接收后,在數(shù)碼管上顯示接收的信息。為提高抗干擾能力,還可以在輸入輸出端加光耦合進(jìn)行光電隔離。軟件部分,通過通信協(xié)議進(jìn)行發(fā)送接收,為實(shí)現(xiàn)方便,本系統(tǒng)采用較為簡單的停等式arq協(xié)議,由于一次放送的信息較少,只用一個(gè)8位二進(jìn)制數(shù),所以采用無連接方式,主機(jī)通過按鍵判斷要發(fā)送的數(shù)值并發(fā)送給收端,相應(yīng)led燈亮,指示燈亮黃燈,表示等
4、待確認(rèn),計(jì)數(shù)器開始計(jì)數(shù),5秒后重發(fā)。收端收到后進(jìn)行奇偶校驗(yàn),相應(yīng)的指示燈亮,若正確則數(shù)碼管顯示相應(yīng)的數(shù)值,否則顯示0,。若正確,收端通過按鍵將0xff發(fā)送給發(fā)端,表示正確接收,一次通信結(jié)束。否則發(fā)送0x00表示不正確,等待重發(fā)3停等式arq協(xié)議原理:自動重傳請求(auto repeat request),通過接收方請求發(fā)送方重傳出錯的數(shù)據(jù)報(bào)文來恢復(fù)出錯的報(bào)文,是通信中用于處理信道所帶來差錯的方法之一;另外一個(gè)方法是信道糾錯編碼。 傳統(tǒng)自動重傳請求分成為三種,即停等式(stop-and-wait)arq,回退n幀(go-back-n)arq,以及選擇性重傳(selective repeat)ar
5、q。后兩種協(xié)議是滑動窗口技術(shù)與請求重發(fā)技術(shù)的結(jié)合,由于窗口尺寸開到足夠大時(shí),幀在線路上可以連續(xù)地流動,因此又稱其為連續(xù)arq協(xié)議。三者的區(qū)別在于對于出錯的數(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ā)送下一幀。該方法所需要的緩沖存儲空間最小,缺點(diǎn)是信道效率很低。 在回退n幀的arq中,當(dāng)發(fā)送方接收到接收方的狀態(tài)報(bào)告指示報(bào)文出錯后,發(fā)送方將重傳過去的n個(gè)報(bào)文
6、。 回退n,發(fā)送窗口大于1,接收窗口等于1。允許發(fā)送方可以連續(xù)發(fā)送信息幀,但是,一旦某幀發(fā)生錯誤,必須重新發(fā)送該幀及其后的n幀。這種方式提高了信道的利用率,但允許已發(fā)送有待于確認(rèn)的幀越多,可能要退回來重發(fā)的幀也越多。 在選擇性重傳arq中,當(dāng)發(fā)送方接收到接收方的狀態(tài)報(bào)告指示報(bào)文出錯,發(fā)送方只發(fā)送傳送發(fā)生錯誤的報(bào)文。 選擇重傳協(xié)議,發(fā)送窗口和接收窗口都大于1。發(fā)送方僅重新傳輸發(fā)生錯誤的幀,并緩存錯誤幀之后發(fā)送的幀。與回退n相比,減少了出錯幀之后正確的幀都要重傳的開銷。 三種arq協(xié)議中,復(fù)雜性遞增,效率也遞增。 除了傳統(tǒng)的arq,還有混合arq(hybrid-arq)。在混合arq中,數(shù)據(jù)報(bào)文傳
7、送到接收方之后,即使出錯也不會被丟棄。接收方指示發(fā)送方重傳出錯報(bào)文的部分或者全部信息,將再次收到的報(bào)文信息與上次收到的報(bào)文信息進(jìn)行合并,以恢復(fù)報(bào)文信息。 在現(xiàn)代的無線通信中,arq主要應(yīng)用在無線鏈路層。比如,在wcdma和cdma2000無線通信中都采用了選擇性重傳arq和混合arq。 優(yōu)點(diǎn):比較簡單 。 缺點(diǎn):通信信道的利用率不高,也就是說,信道還遠(yuǎn)遠(yuǎn)沒有被數(shù)據(jù)比特填滿。實(shí)用的數(shù)據(jù)鏈路層協(xié)議應(yīng)考慮到:傳輸數(shù)據(jù)的信道不是可靠的(即不能保證所傳的數(shù)據(jù)不產(chǎn)生差錯),并且還需要對數(shù)據(jù)的發(fā)送端進(jìn)行流量控制。在傳輸過程中不出差錯的情況下,接收方在收到一個(gè)正確的數(shù)據(jù)幀后即交付給主機(jī)b,同時(shí)向主機(jī)a發(fā)送一個(gè)
8、確認(rèn)幀ack。當(dāng)主機(jī)a收到確認(rèn)幀ack后才能發(fā)送一個(gè)新的數(shù)據(jù)幀,這樣就實(shí)現(xiàn)了接收方對發(fā)送方的流量控制。現(xiàn)在假定數(shù)據(jù)幀在傳輸過程中出現(xiàn)了差錯。由于通常都在數(shù)據(jù)幀中加上了循環(huán)冗余校驗(yàn)crc,所以節(jié)點(diǎn)b很容易檢驗(yàn)出收到的數(shù)據(jù)幀是否會有差錯。當(dāng)發(fā)現(xiàn)差錯時(shí),節(jié)點(diǎn)b 就向主機(jī)a發(fā)送一個(gè)否認(rèn)幀nak,以表示主機(jī)a應(yīng)當(dāng)重發(fā)出現(xiàn)差錯的那個(gè)數(shù)據(jù)幀。如多次出現(xiàn)差錯,就要多次重發(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)
9、a發(fā)來的數(shù)據(jù)幀,這種情況稱為幀丟失。發(fā)送幀丟失時(shí)節(jié)點(diǎn)b當(dāng)然不會向節(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)答幀丟失,也會出現(xiàn)這種死鎖現(xiàn)象。要解決死鎖問題,可在節(jié)點(diǎn)a發(fā)送完一個(gè)數(shù)據(jù)幀時(shí)就啟動一個(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í)選得太長,則要白白浪費(fèi)許多時(shí)間。一般可將定時(shí)時(shí)間選為略大于從發(fā)完數(shù)據(jù)幀到收到應(yīng)答幀所需的
10、平均時(shí)間。 然而問題并沒有完全解決。如果丟失的是應(yīng)答幀,超時(shí)重發(fā)將使主機(jī)b收到兩個(gè)同樣的數(shù)據(jù)幀。由于主機(jī)b無法識別重復(fù)的數(shù)據(jù)幀,因而在主機(jī)b收到的數(shù)據(jù)中出現(xiàn)了另一種差錯-重復(fù)幀。要解決重復(fù)幀的問題,必須使每一個(gè)數(shù)據(jù)幀帶上不同的發(fā)送序號。每發(fā)送一個(gè)新的數(shù)據(jù)幀就把它的發(fā)送序號加1。若節(jié)點(diǎn)b收到發(fā)送序號相同的數(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)幀在傳輸過程中出錯)。 任何一個(gè)編號系統(tǒng)的序號所占用的比特?cái)?shù)一定是有限的。因此,經(jīng)過一段時(shí)間后序號就會重復(fù)。例如,當(dāng)發(fā)送序號占3比特時(shí),
11、共有8個(gè)不同的發(fā)送序號,從000到111。 當(dāng)數(shù)據(jù)幀的發(fā)送序號為111時(shí),下一個(gè)發(fā)送序號就又是000。因此要進(jìn)行編號就要考慮序號到底要占用多少比特。序號占用的比特?cái)?shù)越少,數(shù)據(jù)傳輸?shù)念~外開銷就越小。對于停止等待協(xié)議,由于每發(fā)送一個(gè)數(shù)據(jù)幀就停止等待,因此用一比特來編號就夠了。這樣,數(shù)據(jù)幀中的發(fā)送序號(以后記為n(s),s表示發(fā)送)就以0和1交替的方式出現(xiàn)在數(shù)據(jù)幀中。每發(fā)一個(gè)新的數(shù)據(jù)幀,發(fā)送序號就和上次發(fā)送的不一樣。用這樣的方法就可以使接收方能夠區(qū)分開新的數(shù)據(jù)幀和重發(fā)的數(shù)據(jù)幀了。二、硬件設(shè)計(jì)1.51單片機(jī)串行通信功能圖1.stc89c52計(jì)算機(jī)與外界的信息交換稱為通信,常用的通信方式有兩種:并行通信
12、和串行通信。51單片機(jī)用4個(gè)接口與外界進(jìn)行數(shù)據(jù)輸入與數(shù)據(jù)輸出就是并行通信,并行通信的特點(diǎn)是傳輸信號的速度快,但所用的信號線較多,成本高,傳輸?shù)木嚯x較近。串行通信的特點(diǎn)是只用兩條信號線(一條信號線,再加一條地線作為信號回路)即可完成通信,成本低,傳輸?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即可啟動發(fā)送;接收時(shí)用指令將sbuf中接收到的
13、數(shù)據(jù)取出。(2)串行控制寄存器(pcon)scon用于串行通信方式的選擇,收發(fā)控制及狀態(tài)指示,各位含義如下:sm0sm1sm2rentb8rb8tirism0,sm1:串行接口工作方式選擇位,這兩位組合成00,01,10,11對應(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ī)通信控制
14、位。ren:接收允許控制位。軟件置1允許接收;軟件置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ù)后由硬件自動置位,并申請中斷。必須要軟件清零后才能繼續(xù)發(fā)送。ri:接收中斷標(biāo)志。接收完一幀數(shù)據(jù)后由硬件自動置位,并申請中斷。必須要軟件清零后才能繼續(xù)接收。(3)輸入移位寄存器接收的數(shù)據(jù)先串行進(jìn)入輸入移位寄存器,8位數(shù)據(jù)全移入后,再并行送入接收sbuf中。(4)波特率發(fā)生器波特率發(fā)
15、生器用來控制串行通信的數(shù)據(jù)傳輸速率的,51系列單片機(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串行接口通信,如果兩臺8051單片機(jī)之間的距離很近(不超過1.5m),可以采用直接將兩臺8051單片機(jī)的串行接口直接相連,利用其自身的ttl電平
16、(0-5v)直接傳輸數(shù)據(jù)信息。如果傳輸距離較遠(yuǎn)(超過1.5m),由于傳輸線的阻抗與分布電容,會產(chǎn)生電平損耗和波形畸變,以至于檢測不出數(shù)據(jù)或數(shù)據(jù)出錯。此時(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)的信號電壓是 ttl 電平 0 +5v,ma x232 就是用來進(jìn)行電平轉(zhuǎn)換
17、的 ,該器件包含 2 驅(qū)動器、 2 接收器和一個(gè)電壓發(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ū)動器及兩個(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ù)大
18、于 mil-std-883 (方 法 3015 )標(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);動態(tài):平均電流 4-5ma 峰值電流 100ma數(shù)碼管使用注意事項(xiàng)說明:()數(shù)碼管表面不要用手觸摸,不要用手去弄引角;()焊接溫度:度;焊接時(shí)間:()表面有保護(hù)膜的產(chǎn)品,可以在使用前撕下來。這類數(shù)碼管可以分為共陽極與共陰極兩種,共陽極就是把所有l(wèi)ed的陽極連接到共同接點(diǎn)com,而每個(gè)led的陰極分別為a、b、
19、c、d、e、f、g及dp(小數(shù)點(diǎn));共陰極則是把所有l(wèi)ed的陰極連接到共同接點(diǎn)com,而每個(gè)led的陽極分別為a、b、c、d、e、f、g及dp(小數(shù)點(diǎn)),如下圖所示。圖中的8個(gè)led分別與上面那個(gè)圖中的adp各段相對應(yīng),通過控制各個(gè)led的亮滅來顯示數(shù)字。 那么,實(shí)際的數(shù)碼管的引腳是怎樣排列的呢?對于單個(gè)數(shù)碼管來說,從它的正面看進(jìn)去,左下角那個(gè)腳為1腳,以逆時(shí)針方向依次為110腳,左上角那個(gè)腳便是10腳了,上面兩個(gè)圖中的數(shù)字分別與這10個(gè)管腳一一對應(yīng)。注意,3腳和8腳是連通的,這兩個(gè)都是公共腳。4.電源模塊:為使用方便,本系統(tǒng)采用usb供電,使用一片7805來提供穩(wěn)定的5v電源,防止加電的瞬間
20、產(chǎn)生較大的電抖動,影響系統(tǒng)性能。5rs232串行線:rs-232c 標(biāo)準(zhǔn)(協(xié)議)的全稱是 eia-rs-232c 標(biāo)準(zhǔn),其中eia (electronic industry association)代表美國電子工業(yè)協(xié)會,rs(recommeded standard)代表推薦標(biāo)準(zhǔn),232是標(biāo)識號,c代表rs232的最新一次修改(1969),在這之前,有rs232b、rs232a。它規(guī)定連接電纜和機(jī)械、電氣特性、信號功能及傳送過程。 電氣特性eia-rs-232c 對電器特性、邏輯電平和各種信號線功能都作了規(guī)定。 在txd和rxd上: 邏輯1(mark)=-3v-15v 邏輯0(space)=+3
21、+15v 在rts、cts、dsr、dtr和dcd等控制線上: 信號有效(接通,on狀態(tài),正電壓)+3v+15v 信號無效(斷開,off狀態(tài),負(fù)電壓)=-3v-15v 以上規(guī)定說明了rs-323c標(biāo)準(zhǔn)對邏輯電平的定義。對于數(shù)據(jù)(信息碼):邏輯“1”(傳號)的電平低于-3v,邏輯“0”(空號)的電平高于+3v;對于控制信號;接通狀態(tài)(on)即信號有效的電平高于+3v,斷開狀態(tài)(off)即信號無效的電平低于-3v,也就是當(dāng)傳輸電平的絕對值大于3v時(shí),電路可以有效地檢查出來,介于-3+3v之間的電壓無意義,低于-15v或高于+15v的電壓也認(rèn)為無意義,因此,實(shí)際工作時(shí),應(yīng)保證電平在(315)v之間。
22、 eia rs-232c 與ttl轉(zhuǎn)換:eia rs-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段輸
23、出,經(jīng)過電平轉(zhuǎn)換芯片max232將ttl電平轉(zhuǎn)換為rs232電平輸出,經(jīng)過傳輸線將信號傳送到接收端。接收方也使用max232芯片進(jìn)行電平轉(zhuǎn)換后,信號到達(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)的燈(正確的綠燈、錯誤的紅燈)。收端通過確認(rèn)按鍵將確認(rèn)信息發(fā)送到發(fā)端,發(fā)端點(diǎn)亮相應(yīng)的燈,若傳輸出錯,則發(fā)端通過重發(fā)按鍵重發(fā)。1.串行通信軟件實(shí)現(xiàn)(1)串行口工作于方式3;采用
24、恒定的波特率。(2)功能:通過主機(jī)的按鍵,將數(shù)值發(fā)送到從機(jī),并由通信協(xié)議保證通信的可靠性。(3)通信協(xié)議:停等式arq協(xié)議(4)通信過程使用第九位發(fā)送奇偶校驗(yàn)位。(5)從機(jī)接收到一個(gè)數(shù)據(jù)后,立即進(jìn)行奇偶校驗(yàn),若數(shù)據(jù)沒有錯誤,則返回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ò)展口,不算起始位和停止位。方式為位異步串行通訊,方式和方式為位異步串行通訊。方式和方式中的第位是可程控位,即可由軟件來確定第位是“”還
25、是“”。也就是說,stc89c52單片機(jī)不像某些專用串行芯片,如、等那樣,可根據(jù)初始化條件自動加入串行通訊中的奇偶校驗(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ù)已放入累加器中,可用如下匯編語言來實(shí)現(xiàn)(串行口工作于方式): ,; 把奇偶標(biāo)志送給進(jìn)位位 ,; 把進(jìn)位位送給 ,; 把待發(fā)送的數(shù)據(jù)放入串行口 用語言來編寫時(shí),因累加器對編程者不透明,則會帶來問題。例如,假定待發(fā)送的數(shù)據(jù)已放入變量中,若要從串行口發(fā)送出去,想當(dāng)然地認(rèn)為使用如下語句即可: ; *語句* *語句*
26、實(shí)際上,條語句并不能可靠地產(chǎn)生奇偶校驗(yàn)位。因?yàn)樵谡Z句前面的語句所對應(yīng)的匯編語言中的累加器中為的個(gè)數(shù)是不確定的,而語句又是不可分割的。語句和對應(yīng)的匯編語言程序?yàn)椋?,; 語句 ,; 語句 ,; 語句 ,; 語句 可以看出,只有將語句、放到語句和語句之間時(shí),才能正確地產(chǎn)生奇偶校驗(yàn)位。為了達(dá)到這一目的,可引入全局變量相應(yīng)的語言程序如下: ; * 語句* ; * 語句* ; *語句 * ; *語句* 需要強(qiáng)調(diào)的是: 在串行中斷服務(wù)程序中,一定要設(shè)置為全局變量,若設(shè)置為局部變量,則可能引起意想不到的后果。 語句和語句盡量不要縮寫成: ; * 語句* 而把全局變量省掉。這主要是為了防止編譯程序在某種可能的
27、編譯優(yōu)化條件下將語句也省略掉。3.程序流程圖發(fā)送端程序流程圖掃描按鍵程序初始化主機(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)檢測電鍵動作,直到有電鍵按下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)等待接
28、收確認(rèn)結(jié)束6、 判斷傳輸是否正確7、 若正確,正確燈亮,等待燈滅,進(jìn)入下一循環(huán)8、 若不正確,錯誤燈亮,等確認(rèn)燈滅9、 循環(huán)檢測重發(fā)按鍵狀態(tài)10、若按下,錯誤燈滅,等待燈亮,蜂鳴器響重發(fā),轉(zhuǎn)到5從機(jī):1、 while(1)大循環(huán),初始化,開中斷2、 while(1)ri等待接收結(jié)束3、 若正確,正確燈亮,數(shù)碼管顯示相應(yīng)數(shù)字,置sbuf寄存器為正確值4、 若不正確,錯誤燈亮,置寄存器sbuf為錯誤值5、 while,ti等待傳輸結(jié)束5c51程序:主機(jī):#include#define uchar unsigned char void init();void send(uchar);void del
29、ay(int); /延時(shí)1msuchar code 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
30、;sbit led1 = p21;sbit led2 = 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) i
31、f(key0=0)delay(10); /延時(shí)10ms,去抖動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);
32、if(key5=0)keytag = 5;break;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
33、;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 uint uns
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 限位片課程設(shè)計(jì)
- 虹吸課程設(shè)計(jì)
- 面源污染課程設(shè)計(jì)
- 鏈條輸送機(jī)構(gòu)課程設(shè)計(jì)
- 閥塊課程設(shè)計(jì)
- 齒輪嚙合課程設(shè)計(jì)
- 心理教育課程設(shè)計(jì)研究-洞察分析
- 透視表系列課程設(shè)計(jì)
- 險(xiǎn)灘整治課程設(shè)計(jì)
- 自動擋掛擋教學(xué)課程設(shè)計(jì)
- 九防突發(fā)事件應(yīng)急預(yù)案
- 脫水篩 說明書
- 小學(xué)生體育鍛煉習(xí)慣的培養(yǎng)
- 建筑公司年度工作總結(jié)及計(jì)劃(6篇)
- 2023年昆明貴金屬研究所招聘筆試模擬試題及答案解析
- 硫酸裝置試生產(chǎn)方案
- 國家重點(diǎn)??婆R床護(hù)理專業(yè)評選標(biāo)準(zhǔn)
- DB11T 1944-2021 市政基礎(chǔ)設(shè)施工程暗挖施工安全技術(shù)規(guī)程
- 中國農(nóng)業(yè)核心期刊要目概覽
- 好聽簡單的鋼琴譜
- 技術(shù)咨詢合同書(浙江省科學(xué)技術(shù)廳監(jiān)制)
評論
0/150
提交評論