《單片機(jī)原理與應(yīng)用》課件第8章_第1頁
《單片機(jī)原理與應(yīng)用》課件第8章_第2頁
《單片機(jī)原理與應(yīng)用》課件第8章_第3頁
《單片機(jī)原理與應(yīng)用》課件第8章_第4頁
《單片機(jī)原理與應(yīng)用》課件第8章_第5頁
已閱讀5頁,還剩165頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

項(xiàng)目八串行通信

8.1項(xiàng)目基本技能8.2項(xiàng)目基本知識(shí)8.3技能拓展8.4互動(dòng)環(huán)節(jié)8.5習(xí)題任務(wù)1串口控制數(shù)碼管顯示字符

1.任務(wù)要求利用STC89C51的串行接口和74LS164串入并出移位寄存器驅(qū)動(dòng)一個(gè)數(shù)碼管,要求數(shù)碼管依次按指定的順序(例如1、2、3、4、5)循環(huán)顯示,每個(gè)字符顯示時(shí)間為1s。

2.硬件電路設(shè)計(jì)

1)電路圖電路圖如圖8-1所示。8.1項(xiàng)目基本技能

圖8-1利用串口控制一個(gè)LED顯示原理圖

2)電路圖說明從圖8-1可以看出,在單片機(jī)與數(shù)碼管之間連接了一個(gè)串入并出移位寄存器74LS164。串行數(shù)據(jù)從單片機(jī)串行輸出口P3.0(RXD)加至74LS164的串行輸入端,在單片機(jī)P3.1(TXD)輸出的時(shí)鐘脈沖控制下,8位并行數(shù)據(jù)從并行輸出端Q0~Q7輸出,控制數(shù)碼管顯示。

3.軟件設(shè)計(jì)

1)設(shè)計(jì)方法根據(jù)圖8-1,若要數(shù)碼管循環(huán)顯示字符1、2、3、4、5,則應(yīng)該依次送出每個(gè)字符的8位字型碼給數(shù)據(jù)發(fā)送緩沖區(qū)SBUF,如表8-1所示。表8-1P1口的狀態(tài)

2)流程圖用流程圖來表示串口控制數(shù)碼管顯示字符的執(zhí)行過程,如圖8-2所示。圖8-2串口控制一個(gè)LED顯示流程圖

3)指令代碼

(1)編寫匯編語言代碼。用匯編語言編寫的指令代碼如下:

74LS164是一個(gè)串入并出的8位移位寄存器,引腳如圖8-3所示。其中Q0~Q7為并行輸出端;A,B為串行輸入端為清除端,當(dāng)=0時(shí),輸出清零;CP為時(shí)鐘輸入端。當(dāng)一個(gè)數(shù)據(jù)寫入串行口發(fā)送緩沖器SBUF時(shí),串行口將8位數(shù)據(jù)以fosc/12的波特率從RXD引腳輸出(低位在前),發(fā)送完置中斷標(biāo)志TI為1,請(qǐng)求中斷。在再次發(fā)送數(shù)據(jù)之前,必須由軟件清TI為0。圖8-374LS164引腳圖

(2)編寫C語言代碼。用C語言編寫的指令代碼如下:4.電路板制作1)元器件清單串口控制一個(gè)LED顯示電路元器件清單如表8-2所示。表8-2串口控制一個(gè)LED顯示電路元器件清單

2)用面包板連接電路按圖8-1所示搭接電路板,面包板連接的實(shí)物如圖8-4所示。圖8-4串口控制數(shù)碼管顯示字符電路板

3)調(diào)試運(yùn)行在Keil環(huán)境中,對(duì)源程序A8_1.ASM或C8_1.C進(jìn)行編輯、匯編或編譯,生成機(jī)器代碼并下載到芯片里,接通電路板電源,可觀察到數(shù)碼管顯示效果。任務(wù)2銀行動(dòng)態(tài)密碼的獲取

1.任務(wù)要求在銀行業(yè)務(wù)系統(tǒng)中,為了提高柜員的登錄安全和授權(quán)操作中的安全性,應(yīng)用動(dòng)態(tài)口令系統(tǒng)。我們通過STC89C51單片機(jī)的雙機(jī)通信可模擬動(dòng)態(tài)密碼的獲取。假設(shè)單片機(jī)甲機(jī)中存放的動(dòng)態(tài)口令是341857,甲機(jī)發(fā)送動(dòng)態(tài)口令給單片機(jī)乙機(jī),乙機(jī)接收到數(shù)據(jù)以后在6個(gè)數(shù)碼管上顯示接收數(shù)據(jù)。2.硬件電路設(shè)計(jì)1)電路圖電路圖如圖8-5所示。圖8-5銀行動(dòng)態(tài)密碼獲取的電路

2)電路圖說明銀行動(dòng)態(tài)密碼獲取的硬件電路如圖8-5所示。乙機(jī)的六個(gè)數(shù)碼管采用動(dòng)態(tài)連接方式,各位共陽極數(shù)碼管相應(yīng)的段選控制端并聯(lián)在一起,由P1口控制,用八同相三態(tài)緩沖器/線驅(qū)動(dòng)器74LS245驅(qū)動(dòng)。各位數(shù)碼管的公共端,也稱作“位選端”由P2口控制,用六反相驅(qū)動(dòng)器74LS04驅(qū)動(dòng)。甲機(jī)作為發(fā)送端,乙機(jī)作為接收端。將甲機(jī)的TXD(P3.1,串行數(shù)據(jù)發(fā)送端)引腳接乙機(jī)的RXD(P3.0,串行數(shù)據(jù)接收端)引腳,甲機(jī)的RXD引腳接乙機(jī)的TXD引腳,值得注意的是,兩個(gè)系統(tǒng)必須共地。

3.軟件設(shè)計(jì)

1)設(shè)計(jì)方法串行口的工作過程如下:甲機(jī)發(fā)送數(shù)據(jù)時(shí),先對(duì)串行口控制寄存器SCON進(jìn)行設(shè)置,然后設(shè)定波特率,接著把要發(fā)送的數(shù)據(jù)寫入串行口的發(fā)送緩沖器SBUF中,然后從TXD端一位一位地向外部發(fā)送,當(dāng)發(fā)送完一幀數(shù)據(jù)后,置中斷標(biāo)志TI為1。同樣,乙機(jī)接收數(shù)據(jù)時(shí),先對(duì)串行口控制寄存器SCON進(jìn)行設(shè)置,然后設(shè)定波特率,接收端RXD一位一位地接收外部數(shù)據(jù),當(dāng)收到一個(gè)完整的數(shù)據(jù)后置中斷標(biāo)志RI為1,通知CPU,再將接收緩沖器SBUF的數(shù)據(jù)讀入。

2)流程圖我們用流程圖來表示銀行動(dòng)態(tài)密碼的獲取的執(zhí)行過程,如圖8-6所示。圖8-6銀行動(dòng)態(tài)密碼獲取雙機(jī)通信流程圖

3)指令代碼

(1)編寫匯編語言代碼。用匯編語言編寫的指令代碼如下:(2)編寫C語言代碼。用C語言編寫的指令代碼如下:

4.電路板制作

1)元器件清單銀行動(dòng)態(tài)密碼獲取甲乙機(jī)雙機(jī)通信元器件清單如表8-3所示。表8-3銀行動(dòng)態(tài)密碼獲取甲乙機(jī)雙機(jī)通信元器件清單

2)用面包板連接電路按圖8-5所示搭接電路板,面包板連接的實(shí)物如圖8-7所示。圖8-7銀行動(dòng)態(tài)密碼獲取的雙機(jī)通信電路板

3)調(diào)試運(yùn)行在Keil環(huán)境中,對(duì)源程序A8_2.ASM、A8_3.ASM或C8_2.C、C8_3.C進(jìn)行編輯、匯編或編譯,生成機(jī)器代碼并下載到芯片里,接通電路板電源,可觀察到數(shù)碼管顯示效果。知識(shí)點(diǎn)1什么是串行通信

串行接口一般包括RS232/422/485,其技術(shù)簡(jiǎn)單成熟,性能可靠,價(jià)格低廉;所要求的軟/硬件開發(fā)環(huán)境都很低,廣泛應(yīng)用于計(jì)算機(jī)及相關(guān)領(lǐng)域,如調(diào)制解調(diào)器(Modem)、串行打印機(jī)、各種監(jiān)控模塊、PLC、攝像頭云臺(tái)、數(shù)控機(jī)床、單片機(jī)及相關(guān)智能設(shè)備,甚至路由器也不例外(通過串口設(shè)置參數(shù))。8.2項(xiàng)目基本知識(shí)

在計(jì)算機(jī)測(cè)控系統(tǒng)中,主控機(jī)一般采用PC或IPC,通過串口與測(cè)控模塊相連,測(cè)控模塊再連接相應(yīng)的傳感器和執(zhí)行器,如此形成一個(gè)簡(jiǎn)單的雙層結(jié)構(gòu)的計(jì)算機(jī)測(cè)控系統(tǒng)。這種結(jié)構(gòu)主要用于單獨(dú)的中小型企業(yè)或部門,如果屬于綜合型企業(yè)或部門,如電力系統(tǒng)監(jiān)控,高速公路監(jiān)控和收費(fèi)系統(tǒng),則可以此為基礎(chǔ)結(jié)構(gòu)進(jìn)行擴(kuò)充,用集線器將眾多雙層監(jiān)控系統(tǒng)連接起來,再用交換機(jī)將若干集線器連接起來,統(tǒng)一接上路由器,從而與Internet互聯(lián),如此即可形成一個(gè)龐大的計(jì)算機(jī)測(cè)控網(wǎng)絡(luò)。由此可見,盡管現(xiàn)代計(jì)算機(jī)的新接口層出不窮,各種網(wǎng)絡(luò)應(yīng)用也日新月異,其規(guī)模也越來越大,但是,串行通信系統(tǒng)是其基礎(chǔ)結(jié)構(gòu)之一,串行通信也成了其中的核心技術(shù)。

1.串行通信串行通信是指通信的發(fā)送方和接收方之間數(shù)據(jù)信息的傳輸是在單根數(shù)據(jù)線上,以每次一個(gè)二進(jìn)制的0、1為最小單位逐位進(jìn)行傳輸,如圖8-8所示。圖8-8串行通信

在計(jì)算機(jī)系統(tǒng)中,CPU和外部有兩種通信方式:并行通信和串行通信。并行通信,即數(shù)據(jù)的各位同時(shí)傳送;串行通信,即數(shù)據(jù)一位一位順序傳送。串行通信能夠節(jié)省傳輸線,特別是數(shù)據(jù)位數(shù)很多和傳輸距離較遠(yuǎn)時(shí),這一優(yōu)點(diǎn)更為突出;串行通信的抗干擾能力十分強(qiáng),其信號(hào)間的互相干擾可以忽略。其主要缺點(diǎn)是傳送速度比并行通信要慢。若并行通信時(shí)間為T,則串行時(shí)間為NT。正是由于串行通信的接線少、成本低,因此它在數(shù)據(jù)采集和控制系統(tǒng)中得到了廣泛的應(yīng)用,產(chǎn)品也多種多樣。

2.串行通信的工作模式通過單線傳輸信息是串行數(shù)據(jù)通信的基礎(chǔ)。數(shù)據(jù)通常是在兩個(gè)站(點(diǎn)對(duì)點(diǎn))之間進(jìn)行傳送,按照數(shù)據(jù)流的方向可分成3種傳送模式:?jiǎn)喂?、半雙工和全雙工。

1)單工形式單工形式的數(shù)據(jù)傳送是單向的。通信雙方中,一方固定為發(fā)送端,另一方則固定為接收端。信息只能沿一個(gè)方向傳送,使用一根傳輸線,如圖8-9所示。圖8-9單工形式

單工形式一般用在只向一個(gè)方向傳送數(shù)據(jù)的場(chǎng)合。例如,計(jì)算機(jī)與打印機(jī)之間的通信是單工形式,因?yàn)橹挥杏?jì)算機(jī)向打印機(jī)傳送數(shù)據(jù),而沒有相反的數(shù)據(jù)傳送。還有在某些通信信道中,如單工無線發(fā)送等。

2)半雙工形式半雙工通信使用同一根傳輸線,既可發(fā)送數(shù)據(jù)又可接收數(shù)據(jù),但不能同時(shí)發(fā)送和接收。在任何時(shí)刻只能由其中的一方發(fā)送數(shù)據(jù),另一方接收數(shù)據(jù)。因此半雙工形式既可以使用一條數(shù)據(jù)線,也可以使用兩條數(shù)據(jù)線,如圖8-10所示。圖8-10半雙工形式

半雙工通信中每一端需有一個(gè)收/發(fā)切換電子開關(guān),通過切換來決定數(shù)據(jù)向哪個(gè)方向傳輸。因?yàn)橛星袚Q,所以會(huì)產(chǎn)生時(shí)間延遲。信息傳輸效率較低些。例如,無線對(duì)講機(jī)就是一種半雙工設(shè)備,在同一時(shí)間內(nèi)只允許一方講話。

3)全雙工形式全雙工數(shù)據(jù)通信分別由兩根可以在兩個(gè)不同的站點(diǎn)同時(shí)發(fā)送和接收的傳輸線進(jìn)行傳送,通信雙方都能在同一時(shí)刻進(jìn)行發(fā)送和接收操作,如圖8-11所示。圖8-11全雙工形式

在全雙工方式中,每一端都有發(fā)送器和接收器,有兩條傳送線,可在交互式應(yīng)用和遠(yuǎn)程監(jiān)控系統(tǒng)中使用,信息傳輸效率較高。

3.異步傳輸與同步傳輸串行傳輸中,數(shù)據(jù)是一位一位按照到達(dá)的順序依次傳輸?shù)?,每位?shù)據(jù)的發(fā)送和接收都需要時(shí)鐘來控制。發(fā)送端通過發(fā)送時(shí)鐘確定數(shù)據(jù)位的開始和結(jié)束,接收端需要在適當(dāng)?shù)臅r(shí)間間隔對(duì)數(shù)據(jù)流進(jìn)行采樣來正確地識(shí)別數(shù)據(jù)。接收端和發(fā)送端必須保持步調(diào)一致,否則就會(huì)在數(shù)據(jù)傳輸中出現(xiàn)差錯(cuò)。為了解決以上問題,串行傳輸可以采用以下兩種方法:異步傳輸和同步傳輸。

1)異步傳輸異步傳輸方式中,字符是數(shù)據(jù)傳輸單位。在通信的數(shù)據(jù)流中,字符間異步,字符內(nèi)部各位間同步。異步通信方式的“異步”主要體現(xiàn)在字符與字符之間通信沒有嚴(yán)格的定時(shí)要求。異步傳輸中,字符可以是連續(xù)地、一個(gè)個(gè)地發(fā)送,也可以是不連續(xù)地,隨機(jī)地進(jìn)行單獨(dú)發(fā)送。在一個(gè)字符格式的停止位之后,立即發(fā)送下一個(gè)字符的起始位,開始一個(gè)新的字符的傳輸,這叫做連續(xù)的串行數(shù)據(jù)發(fā)送,即幀與幀之間是連續(xù)的。斷續(xù)的串行數(shù)據(jù)傳送是指在一幀結(jié)束之后維持?jǐn)?shù)據(jù)線的“空閑”狀態(tài),新的起始位可在任何時(shí)刻開始。一旦傳送開始,組成這個(gè)字符的各個(gè)數(shù)據(jù)位將被連續(xù)發(fā)送,并且每個(gè)數(shù)據(jù)位持續(xù)的時(shí)間是相等的。接收端根據(jù)這個(gè)特點(diǎn)與數(shù)據(jù)發(fā)送端保持同步,從而正確地恢復(fù)數(shù)據(jù)。收/發(fā)雙方則以預(yù)先約定的傳輸速率,在時(shí)鐘的作用下,傳送這個(gè)字符中的每一位。

2)同步傳輸在同步傳輸方式中,比特塊以穩(wěn)定的比特流的形式傳輸,數(shù)據(jù)被封裝成更大的傳輸單位,稱為幀。每個(gè)幀中含有多個(gè)字符代碼,而且字符代碼與字符代碼之間沒有間隙以及起始位和停止位。和異步傳輸相比,數(shù)據(jù)傳輸單位的加長(zhǎng)容易引起時(shí)鐘漂移。為了保證接收端能夠正確地區(qū)分?jǐn)?shù)據(jù)流中的每個(gè)數(shù)據(jù)位,收發(fā)雙方必須通過某種方法建立起同步的時(shí)鐘。可以在發(fā)送器和接收器之間提供一條獨(dú)立的時(shí)鐘線路,由線路的一端(發(fā)送器或者接收器)定期地在每個(gè)比特時(shí)間中向線路發(fā)送一個(gè)短脈沖信號(hào),另一端則將這些有規(guī)律的脈沖作為時(shí)鐘。這種技術(shù)在短距離傳輸時(shí)表現(xiàn)良好,但在長(zhǎng)距離傳輸中,定時(shí)脈沖可能會(huì)和信息信號(hào)一樣受到破壞,從而出現(xiàn)定時(shí)誤差。另一種方法是,通過采用嵌有時(shí)鐘信息的數(shù)據(jù)編碼位向接收端提供同步信息。

4.串口通信的基本參數(shù)串行端口的通信方式是將字節(jié)拆分成一個(gè)接著一個(gè)的位再傳送出去。接到此電位信號(hào)的一方再將此一個(gè)一個(gè)的位組合成原來的字節(jié),如此形成一個(gè)字節(jié)的完整傳送。在傳輸進(jìn)行的過程中,雙方明確傳送信息的具體方式,否則雙方就沒有一套共同的譯碼方式,從而無法了解對(duì)方所傳過來的信息的意義。因此雙方為了進(jìn)行通信,必須遵守一定的通信規(guī)則,這個(gè)共同的規(guī)則就是通信端口的初始化。通信端口的初始化必須對(duì)以下幾項(xiàng)參數(shù)進(jìn)行設(shè)置。

1)數(shù)據(jù)的傳輸速度串行通信的傳輸受到通信雙方硬件配備性能及通信線路的特性控制,收、發(fā)雙方必須按照同樣的速率進(jìn)行串行通信,即收、發(fā)雙方采用同樣的波特率。我們通常將傳輸速度稱為波特率,指的是串行通信中每一秒所傳送的數(shù)據(jù)位數(shù),單位是bit/s。我們經(jīng)常可以看到儀器或Modem的規(guī)格書上都寫著19200bit/s、38400bit/s等,所指的就是傳輸速度。就儀器或工業(yè)場(chǎng)合來說,4800bit/s、9600bit/s是最常見的傳輸速度,現(xiàn)在的個(gè)人計(jì)算機(jī)所提供的串行端口的傳輸速度都可以達(dá)到15200bit/s(甚至達(dá)到921600bit/s),若傳輸距離較近而設(shè)備也提供時(shí),使用最高的傳輸速度也可以。例如,在某異步串行通信中,每傳送一個(gè)字符需要8位,如果采用波特率4800bit/s進(jìn)行傳送,則每秒可以傳送600個(gè)字符。

2)數(shù)據(jù)的傳送單位一般串行通信端口所傳送的數(shù)據(jù)是字符型,若用來傳輸文件,則會(huì)使用二進(jìn)制的數(shù)據(jù)型。當(dāng)使用字符型時(shí),工業(yè)界使用到的有ASCII字符碼及JIS字符碼;ASCII碼使用了8位形成一個(gè)字符,而JIS碼則以7位形成一個(gè)字符。我們可以發(fā)現(xiàn),歐美的設(shè)備多使用8位的字節(jié),而日本的設(shè)備多使用7位為一個(gè)字節(jié)。以實(shí)際的RS-232傳輸上看來,由于工業(yè)界常使用的PLC大多只是傳送文字碼,因此只要7位就可以將ASCII碼的0~127碼表達(dá)出來(27=128,共有128種組合方式),所有的可見字符也落在此范圍內(nèi),所以只要7個(gè)數(shù)據(jù)位就夠了。不同的情況下(看所使用的協(xié)議),會(huì)使用到不同的傳送單位。使用多少位合成一個(gè)字節(jié)必須先行確定。

3)起始位與停止位由于異步串行傳輸中并沒有使用同步脈沖作基準(zhǔn),故接收端完全不知道發(fā)送端何時(shí)將進(jìn)行數(shù)據(jù)的傳送。發(fā)送端準(zhǔn)備要開始傳送數(shù)據(jù)時(shí),發(fā)送端會(huì)在所送出的字符前后分別加上高電位的起始位(邏輯0)及低電位的停止位(邏輯1),它們分別是所謂的起始位和停止位。也就是說,當(dāng)發(fā)送端要開始傳送數(shù)據(jù)時(shí),便將傳輸線上的電位由低電位提升至高電位,而當(dāng)傳送結(jié)束后,再將電位降至低電位。接收端會(huì)因起始位的觸發(fā)(電壓由低電位升至高電位)而開始接收數(shù)據(jù),并因停止位的通知(電壓維持在低電位)而明確數(shù)據(jù)的字符信號(hào)已經(jīng)結(jié)束;當(dāng)加入了起始位及停止位才比較容易達(dá)到多字符的接收能力。起始位固定為1位,而停止位則有1、1.5、2位等多種選擇,如何選擇呢?只要通信雙方協(xié)議通過即可,沒有強(qiáng)制規(guī)定。

4)校驗(yàn)位為了預(yù)防錯(cuò)誤的產(chǎn)生,使用校驗(yàn)位作為檢查的機(jī)制。校驗(yàn)位是用來檢查所傳送數(shù)據(jù)的正確性的一種核對(duì)碼,又分成奇校驗(yàn)與偶校驗(yàn)兩種,分別是檢查字符碼中1的數(shù)目是奇數(shù)或偶數(shù)。以偶校驗(yàn)為例,“A”的ASCII碼是41H(十六進(jìn)制),將它以二進(jìn)制表示時(shí),是01000001,其中1的數(shù)目是2,因此校驗(yàn)位便是0,使1的數(shù)目保持偶數(shù)。同樣的,校驗(yàn)位是奇校驗(yàn)時(shí),“A”的校驗(yàn)位便是1,使1的數(shù)目保持在奇數(shù)。接收者重新計(jì)算奇偶校驗(yàn)位,如果新的計(jì)算值正確,那么表示正常。如果新的計(jì)算值錯(cuò)誤,那么接收端就會(huì)收到一些指示,表示此次接收的數(shù)據(jù)有誤。知識(shí)點(diǎn)2認(rèn)識(shí)單片機(jī)的串行接口

MCS-51內(nèi)部有一個(gè)可編程全雙工串行通信接口,它具有UART(UniversalAsynchronousReceiver/Transmitter,通用異步接收/發(fā)送裝置)的全部功能,該接口不僅可以同時(shí)進(jìn)行數(shù)據(jù)的接收和發(fā)送,也可做同步移位寄存器使用。該串行口有4種工作方式,幀格式有8位、10位和11位,并能設(shè)置各種波特率。本任務(wù)將對(duì)其結(jié)構(gòu)、工作方式和波特率進(jìn)行討論。1.MCS-51串行口結(jié)構(gòu)串行口的結(jié)構(gòu)如圖8-12所示。圖8-12串行口結(jié)構(gòu)示意圖

MCS-51內(nèi)部有兩個(gè)獨(dú)立的接收、發(fā)送緩沖器SBUF,SBUF屬于特殊功能寄存器。發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入,二者共用一個(gè)字節(jié)地址(99H)。以任務(wù)2為例,甲機(jī)發(fā)送數(shù)據(jù)時(shí),把要發(fā)送的數(shù)據(jù)寫入串行口的發(fā)送緩沖器SBUF中,然后從TXD端一位一位地向外部發(fā)送。同時(shí),乙機(jī)接收數(shù)據(jù)時(shí),接收端RXD也可以一位一位地接收外部數(shù)據(jù),當(dāng)收到一個(gè)完整的數(shù)據(jù)后通知CPU,再接收緩沖器SBUF的數(shù)據(jù)讀入累加器。

與MCS-51串行口有關(guān)的特殊功能寄存器有SBUF、SCON、PCON,下面對(duì)它們分別詳細(xì)討論。

1)串行口數(shù)據(jù)緩沖器SBUF

SBUF是兩個(gè)在物理上獨(dú)立的接收、發(fā)送寄存器,一個(gè)用于存放接收到的數(shù)據(jù),另一個(gè)用于存放欲發(fā)送的數(shù)據(jù),可同時(shí)發(fā)送和接收數(shù)據(jù)。兩個(gè)緩沖器共用一個(gè)地址99H,通過對(duì)SBUF的讀、寫指令來區(qū)別是對(duì)接收緩沖器還是發(fā)送緩沖器進(jìn)行操作。CPU在寫SBUF時(shí),就是修改發(fā)送緩沖器;讀SBUF,就是讀接收緩沖器的內(nèi)容。接收或發(fā)送數(shù)據(jù),是通過串行口對(duì)外的兩條獨(dú)立收發(fā)信號(hào)線RXD(P3.0)、TXD(P3.1)來實(shí)現(xiàn)的,因此可以同時(shí)發(fā)送、接收數(shù)據(jù),為全雙工制式。

2)串行口控制寄存器SCON

SCON用來控制串行口的工作方式和狀態(tài),可以位尋址,字節(jié)地址為98H。單片機(jī)復(fù)位時(shí),所有位全為0,其格式如圖8-13所示。圖8-13SCON的各位定義對(duì)各位的說明如下:(1)?SM0、SM1:串行方式選擇位。定義如表8-4所示。表8-4串行口的工作方式

(2)?SM2:多機(jī)通信控制位,用于方式2和方式3中。在方式2和方式3處于接收時(shí),若SM2=1,且接收到的第9位數(shù)據(jù)RB8為0時(shí),不激活RI;若SM2=1,且RB8=1時(shí),則置RI=1。在方式2、3處于接收或發(fā)送方式,若SM2=0,不論接收到第9位RB8為0還是為1,TI,RI都以正常方式被激活。在方式1處于接收時(shí),若SM2=1,則只有收到有效的停止位后,RI置1。在方式0中,SM2應(yīng)為0。

(3)?REN:允許串行接收位,由軟件置位或清零。REN=1時(shí),允許接收,REN=0時(shí),禁止接收。在任務(wù)1中由于乙機(jī)用于接收數(shù)據(jù),因此讓REN=1,允許乙機(jī)接收。

(4)?TB8:發(fā)送數(shù)據(jù)的第9位。在方式2和方式3中,由軟件置位或復(fù)位,可做奇偶校驗(yàn)位。在多機(jī)通信中,可作為區(qū)別地址幀或數(shù)據(jù)幀的標(biāo)識(shí)位,一般約定地址幀時(shí)TB8為1,數(shù)據(jù)幀時(shí)TB8為0。

(5)?RB8:接收數(shù)據(jù)的第9位。功能同TB8。

(6)?TI:發(fā)送中斷標(biāo)志位。在方式0中,發(fā)送完8位數(shù)據(jù)后,由硬件置位;在其他方式中,在發(fā)送停止位之初由硬件置位。因此TI=1是發(fā)送完一幀數(shù)據(jù)的標(biāo)志,其狀態(tài)既可供軟件查詢使用,也可請(qǐng)求中斷。TI位必須由軟件清0。

(7)?RI:接收中斷標(biāo)志位。在方式0中,接收完8位數(shù)據(jù)后,由硬件置位;在其他方式中,當(dāng)接收到停止位時(shí)該位由硬件置1。因此RI=1是接收完一幀數(shù)據(jù)的標(biāo)志。其狀態(tài)既可供軟件查詢使用,也可請(qǐng)求中斷。RI位也必須由軟件清0。若要使單片機(jī)工作在串行通信的方式1下作為發(fā)送,則設(shè)置SCON=40H,即MOVSCON,#40H。

3)電源及波特率選擇寄存器PCON

PCON主要是為CHMOS型單片機(jī)的電源控制而設(shè)置的專用寄存器,字節(jié)地址為87H,不可以位尋址。在CHMOS的STC89C51單片機(jī)中,PCON除了最高位以外其他位都是虛設(shè)的,其格式如圖8-14所示。圖8-14PCON的各位定義

與串行通信有關(guān)的只有SMOD位。SMOD為波特率選擇位。在方式1、2和3時(shí),串行通信的波特率與SMOD有關(guān)。當(dāng)SMOD=1時(shí),通信波特率乘2,當(dāng)SMOD=0時(shí),波特率不變。其他各位用于電源管理,在此不再贅述。

2.?MCS-51串行口的工作方式

MCS-51的串行口有4種工作方式,通過SCON中的SM1、SM0位來決定,如表8-4所示,有方式0、方式1、方式2、方式3。

1)方式0在方式0下,串行口作同步移位寄存器用,以8位數(shù)據(jù)為一幀進(jìn)行傳輸,不設(shè)起始位和停止位,先發(fā)送或接收最低位,其波特率固定為fosc/12。串行數(shù)據(jù)從RXD(P3.0)端輸入或輸出,同步移位脈沖由TXD(P3.1)送出。這種方式常用于擴(kuò)展I/O口。

(1)發(fā)送。當(dāng)一個(gè)數(shù)據(jù)寫入串行口發(fā)送緩沖器SBUF時(shí),串行口將8位數(shù)據(jù)以fosc/12的波特率從RXD引腳輸出(低位在前),發(fā)送完置中斷標(biāo)志TI為1,請(qǐng)求中斷。在再次發(fā)送數(shù)據(jù)之前,必須由軟件清TI為0。具體接線圖如圖8-15所示。其中74LS164為串入并出移位寄存器。任務(wù)1中詳細(xì)介紹了串行口方式0的使用。

(2)接收。在滿足REN=1和RI=0的條件下,串行口即開始從RXD端以fosc/12的固定波特率輸入數(shù)據(jù)(低位在前),當(dāng)接收完8位數(shù)據(jù)后,置中斷標(biāo)志RI為1,請(qǐng)求中斷。在再次接收數(shù)據(jù)之前,必須由軟件清RI為0。具體接線圖如圖8-16所示。其中74LS165為并入串出移位寄存器。圖8-15方式0用于擴(kuò)展I/O口輸出圖8-16方式0用于擴(kuò)展I/O口輸入

串行控制寄存器SCON中的TB8和RB8在方式0中未用。值得注意的是,每當(dāng)發(fā)送或接收完8位數(shù)據(jù)后,硬件會(huì)自動(dòng)置TI或RI為1,CPU響應(yīng)TI或RI中斷后,必須由用戶用軟件清0。方式0時(shí),SM2必須為0。

2)方式1收發(fā)雙方都是工作在方式1下,此時(shí),串行口為波特率可調(diào)的10位通用異步接口UART,發(fā)送或接收一幀信息,包括1位起始位0、8位數(shù)據(jù)位和1位停止位1。其幀格式如圖8-17所示。圖8-1710位的幀格式

(1)發(fā)送。發(fā)送時(shí),數(shù)據(jù)從TXD輸出,當(dāng)數(shù)據(jù)寫入發(fā)送緩沖器SBUF后,啟動(dòng)發(fā)送器發(fā)送。當(dāng)發(fā)送完一幀數(shù)據(jù)后,發(fā)送標(biāo)志位TI置1。方式1所傳送的波特率取決于定時(shí)器T1的溢出率和PCON中的SMOD位,將在下面詳細(xì)講解。

(2)接收。接收時(shí),由REN置1允許接收,串行口采樣RXD,當(dāng)采樣1到0的跳變時(shí),確認(rèn)是起始位“0”,就開始接收一幀數(shù)據(jù)。接收到一幀數(shù)據(jù)后,中斷標(biāo)志位RI置1.當(dāng)RI=0且停止位為1或SM2=0時(shí),停止位進(jìn)入RB8位,同時(shí)置中斷標(biāo)志RI;否則信息將丟失。所以,方式1接收時(shí),應(yīng)先用軟件清除RI或SM2標(biāo)志。任務(wù)2中詳細(xì)介紹了串行口方式1的使用。

3)方式2方式2下,串行口為11位UART,傳送波特率與SMOD有關(guān)。發(fā)送或接收一幀數(shù)據(jù)包括1位起始位0,8位數(shù)據(jù)位,1位可編程位(用于奇偶校驗(yàn))和1位停止位1。其幀格式如圖8-18所示。圖8-1811位的幀格式

(1)發(fā)送。發(fā)送時(shí),先根據(jù)通信協(xié)議由軟件設(shè)置TB8,然后用指令將要發(fā)送的數(shù)據(jù)寫入SBUF,則啟動(dòng)發(fā)送器。寫SBUF的指令,除了將8位數(shù)據(jù)送入SBUF外,同時(shí)還將TB8裝入發(fā)送移位寄存器的第9位,并通知發(fā)送控制器進(jìn)行一次發(fā)送。一幀信息即從TXD發(fā)送,在送完一幀信息后,TI被自動(dòng)置1,在發(fā)送下一幀信息之前,TI必須由中斷服務(wù)程序或查詢程序清0。

(2)接收。當(dāng)REN=1時(shí),允許串行口接收數(shù)據(jù)。數(shù)據(jù)由RXD端輸入,接收11位的信息。當(dāng)接收器采樣到RXD端的負(fù)跳變,并判斷起始位有效后,開始接收一幀信息。當(dāng)接收器接收到第9位數(shù)據(jù)后,若同時(shí)滿足以下兩個(gè)條件:RI=0;SM2=0或接收到的第9位數(shù)據(jù)為1,則接收數(shù)據(jù)有效,8位數(shù)據(jù)送入SBUF,第9位送入RB8,RI被自動(dòng)置1。若不滿足上述兩個(gè)條件,則信息丟失。

4)方式3方式3為波特率可變的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。

串行通信的接收過程:

SCON的REN(SCON.4)為1時(shí),允許接收,外部數(shù)據(jù)由RXD引腳串行輸入(最低位先入),一幀數(shù)據(jù)接收完畢后送入SBUF,同時(shí)置SCON的RI(SCON.0)為1,向CPU發(fā)出中斷請(qǐng)求,CPU響應(yīng)中斷后用軟件將RI清0,接收到的數(shù)據(jù)由SBUF讀出,然后開始接收下一幀。

串行通信的發(fā)送過程:先將要發(fā)送的數(shù)據(jù)送入SBUF,即可啟動(dòng)發(fā)送。數(shù)據(jù)由TXD引腳串行發(fā)送(最低位先發(fā)),一幀數(shù)據(jù)發(fā)送完畢時(shí),自動(dòng)置SCON的TI(SCON.1)為1,向CPU發(fā)出中斷請(qǐng)求,CPU響應(yīng)中斷后用軟件將TI清0,然后開始發(fā)送下一幀。串行通信的方式1、2、3都按照上述接收和發(fā)送過程來完成通信,對(duì)于方式0,接收和發(fā)送數(shù)據(jù)都由RXD引腳實(shí)現(xiàn),TXD引腳輸出同步移位時(shí)鐘脈沖信號(hào)。

3.?MCS-51串行口的波特率在串行通信中,收發(fā)雙方對(duì)傳送的數(shù)據(jù)速率即波特率要有一定的約定。通過上面的論述,我們已經(jīng)知道,MCS-51單片機(jī)的串行口通過編程可以有4種工作方式。其中方式0和方式2的波特率是固定的,方式1和方式3的波特率可變,由定時(shí)器T1的溢出率決定,下面加以分析。

1)方式0和方式2在方式0中,波特率為時(shí)鐘頻率的1/12,即fosc/12,固定不變。在方式2中,波特率取決于PCON中的SMOD值,當(dāng)SMOD=0時(shí),波特率為fosc/64;當(dāng)SMOD=1時(shí),波特率為fosc/32。即波特率?=?。

2)方式1和方式3在方式1和方式3下,波特率由定時(shí)器T1的溢出率和SMOD共同決定。即方式1和方式3的波特率=溢出率其中T1的溢出率取決于單片機(jī)定時(shí)器T1的計(jì)數(shù)速率和定時(shí)器的預(yù)置值。當(dāng)定時(shí)器T1設(shè)置在定時(shí)方式時(shí),定時(shí)器T1溢出率=(T1計(jì)數(shù)速率)/(產(chǎn)生溢出所需機(jī)器周期數(shù)),由于定時(shí)方式時(shí),T1計(jì)數(shù)速率=fosc/12,產(chǎn)生溢出所需機(jī)器周期數(shù)=M-計(jì)數(shù)初值X,所以串行接口工作方式1和3時(shí)波特率=實(shí)際上,當(dāng)定時(shí)器T1做波特率發(fā)生器使用時(shí),通常是工作在模式2,此時(shí),M?=?256,可得串行接口工作方式1和3時(shí)波特率=

計(jì)數(shù)初值X?=?256-計(jì)數(shù)速率與TMOD寄存器中的C/位有關(guān),當(dāng)C/=0時(shí),計(jì)數(shù)速率為fosc/12,當(dāng)C/

=1時(shí),計(jì)數(shù)速率為外部輸入時(shí)鐘頻率。

是工作在方式2,即自動(dòng)重裝載的8位定時(shí)器,此時(shí)TL1作計(jì)數(shù)用,自動(dòng)重裝載的值在TH1內(nèi)。設(shè)計(jì)數(shù)的預(yù)置值(初始值)為X,那么每過256-X個(gè)機(jī)器周期,定時(shí)器溢出一次。為了避免溢出而產(chǎn)生不必要的中斷,此時(shí)應(yīng)禁止T1中斷。表8-5列出了采用不同晶振的常用的波特率和對(duì)應(yīng)的計(jì)數(shù)初值。

下面分析以下程序設(shè)置的波特率,波特率編程如下:

MOV SCON,#40H

;串行口為方式1,10位為一幀

MOV TMOD,#20H ;定時(shí)器T1為方式2

MOV TL1,#0F4H

;設(shè)置定時(shí)器初始值

MOV TH1,#0F4H

SETB TR1 ;啟動(dòng)定時(shí)器分析TMOD的設(shè)置,對(duì)照表8-5,可知串行通信的波特率應(yīng)為2400bit/s,fosc?=?11.059MHz。表8-5定時(shí)器T1工作在定時(shí)、方式2時(shí)常用的波特率和計(jì)數(shù)初值知識(shí)點(diǎn)3單片機(jī)雙機(jī)通信

1.雙機(jī)通信的原理對(duì)于雙機(jī)異步通信,其程序通常采用兩種方法:查詢方式和中斷方式。任務(wù)2發(fā)送和接收數(shù)據(jù)都采用的是查詢方法。串行口初始化具體步驟如下:

(1)確定定時(shí)器1的工作方式—寫TMOD寄存器;

(2)計(jì)算定時(shí)器1的初值—裝載TH1、TL1;

(3)啟動(dòng)定時(shí)器1—寫TCON的TR1位;

(4)確定串口的控制;

(5)使用串口中斷方式時(shí),開CPU和中斷源——寫IE寄存器。從任務(wù)2的電路連接上我們看到,甲、乙雙方只連接了3根線,一根用于接收,一根用于發(fā)送,第三根為共地線。其中RXD為單片機(jī)系統(tǒng)的接收數(shù)據(jù)端,TXD為發(fā)送數(shù)據(jù)端。顯然單片機(jī)內(nèi)部的數(shù)據(jù)向外傳送(例如從甲機(jī)傳送給乙機(jī))時(shí),不可能8位數(shù)據(jù)同時(shí)進(jìn)行,在一個(gè)時(shí)刻只可能傳送一位數(shù)據(jù)(例如,從甲機(jī)的發(fā)送端TXD傳送一位數(shù)據(jù)到乙機(jī)的接收端RXD),8位數(shù)據(jù)依次在一根數(shù)據(jù)線上傳送,這種通信方式稱為串行通信。它與前面幾個(gè)項(xiàng)目所介紹的數(shù)據(jù)傳送不同,例如通過P0口傳送數(shù)據(jù)時(shí),就是8位數(shù)據(jù)同時(shí)進(jìn)行的,這種通信方式稱為并行通信。兩個(gè)單片機(jī)之間的數(shù)據(jù)通信,收發(fā)雙方必須采用相同的傳輸速率才能準(zhǔn)確地完成信息傳遞。分析程序可以看出,通信雙方都有對(duì)單片機(jī)定時(shí)器的編程,而且雙方對(duì)定時(shí)器的編程完全相同,因此在發(fā)送程序和接收程序中,初始化程序是一致的。這說明,MCS-51單片機(jī)在進(jìn)行串行通信時(shí),是與定時(shí)器的工作有關(guān)的。定時(shí)器用來設(shè)定串行通信數(shù)據(jù)的傳輸速度。在串行通信中,傳輸速度是用波特率來表征的。

2.RS-232C串行通信總線標(biāo)準(zhǔn)及其接口在單片機(jī)應(yīng)用系統(tǒng)中,數(shù)據(jù)通信主要采用異步串行通信。在設(shè)計(jì)通信接口時(shí),必須根據(jù)需要選擇標(biāo)準(zhǔn)接口,并考慮傳輸介質(zhì)、電平轉(zhuǎn)換等問題。采用標(biāo)準(zhǔn)接口后,能夠方便地把單片機(jī)和外設(shè)、測(cè)量?jī)x器等有機(jī)地連接起來,從而構(gòu)成一個(gè)測(cè)控系統(tǒng)。例如當(dāng)需要單片機(jī)和PC機(jī)通信時(shí),通常采用RS-232C接口進(jìn)行電平轉(zhuǎn)換。

RS-232C是使用最早、應(yīng)用最多的一種異步串行通信總線標(biāo)準(zhǔn)。它是美國(guó)電子工業(yè)協(xié)會(huì)(EIA)1962年公布、1969年最后修定而成的。其中RS表示RecommendedStandard,232是該標(biāo)準(zhǔn)的標(biāo)識(shí)號(hào),C表示最后一次修定。

RS-232C主要用來定義計(jì)算機(jī)系統(tǒng)的一些數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)電路終接設(shè)備(DCE)之間的電氣性能。例如CRT、打印機(jī)與CPU的通信大都采用RS-232C接口,MCS-51單片機(jī)與PC機(jī)的通信也是采用該種類型的接口。由于MCS-51系列單片機(jī)本身有一個(gè)全雙工的串行接口,因此該系列單片機(jī)用RS-232C串行接口總線非常方便。

RS-232C串行接口總線適用于:設(shè)備之間的通信距離不大于15米,傳輸速率最大為20kb/s。

1)?RS-232C信息格式標(biāo)準(zhǔn)

RS-232C采用串行格式,如圖8-19所示。該標(biāo)準(zhǔn)規(guī)定:信息的開始為起始位,信息的結(jié)束為停止位;信息本身可以是5、6、7、8位再加一位奇偶位。如果兩個(gè)信息之間無信息,則寫“1”,表示空。圖8-19RS-232C信息格式2)?RS-232C電平轉(zhuǎn)換器

RS-232C規(guī)定了自己的電氣標(biāo)準(zhǔn),由于它是在TTL電路之前研制的,所以它的電平不是+5V和地,而是采用負(fù)邏輯,即:邏輯“0”:+5V~+15V邏輯“1”:-5V~-15V因此,RS-232C不能和TTL電平直接相連,使用時(shí)必須進(jìn)行電平轉(zhuǎn)換,否則將使TTL電路燒壞,實(shí)際應(yīng)用時(shí)必須注意!常用的電平轉(zhuǎn)換集成電路是MAX232。圖8-20為MAX232的引腳圖。圖8-20MAX232引腳圖

3)?RS-232C總線規(guī)定

RS-232C標(biāo)準(zhǔn)總線采用標(biāo)準(zhǔn)的D型9芯的插頭座,其引腳的排列如圖8-21所示。各引腳的定義如表8-6所示。圖8-21RS-232CDB-9引腳圖表8-6RS-232各引腳定義

在最簡(jiǎn)單的全雙工系統(tǒng)中,僅用發(fā)送數(shù)據(jù)、接收數(shù)據(jù)和信號(hào)地三根線即可,對(duì)于MCS-51單片機(jī),利用其RXD(串行數(shù)據(jù)接收端)線、TXD(串行數(shù)據(jù)發(fā)送端)線和一根地線,就可以構(gòu)成符合RS-232C接口標(biāo)準(zhǔn)的全雙工通信口。任務(wù)3交通燈遠(yuǎn)程控制系統(tǒng)

1.任務(wù)要求本任務(wù)實(shí)現(xiàn)用PC機(jī)作為控制主機(jī)、單片機(jī)控制信號(hào)燈為從機(jī)遠(yuǎn)程控制系統(tǒng)。主、從機(jī)雙方除了要有統(tǒng)一的數(shù)據(jù)格式、波特率外,還要約定一些握手應(yīng)答信號(hào),即通信協(xié)議,如表8-7所示。8.3技能拓展表8-7交通燈控制系統(tǒng)PC機(jī)與單片機(jī)通信協(xié)議

協(xié)議說明:

(1)通過PC機(jī)鍵盤輸入01H命令,發(fā)送給單片機(jī);單片機(jī)收到PC機(jī)發(fā)來的命令后,進(jìn)入緊急情況狀態(tài),將兩個(gè)方向的交通指示燈都變?yōu)榧t燈,再發(fā)送01H作為應(yīng)答信號(hào),PC機(jī)收到應(yīng)答信號(hào)并在屏幕上顯示出來。

(2)通過PC機(jī)鍵盤輸入02H命令,發(fā)送給單片機(jī);單片機(jī)收到PC機(jī)發(fā)來的命令后,恢復(fù)正常交通燈指示狀態(tài),并回送02H作為應(yīng)答信號(hào),PC機(jī)屏幕上顯示02H。

(3)設(shè)置主、從機(jī)的波特率為2400b/s;幀格式為10位,包括1位起始位、8位數(shù)據(jù)位、1位停止位,無校驗(yàn)位。

2.硬件電路設(shè)計(jì)

PC機(jī)與單片機(jī)通信的硬件電路如圖8-22所示。單片機(jī)和PC通信電路器件清單如表8-8所示。圖8-22PC機(jī)與單片機(jī)通信的電路圖表8-8交通燈控制系統(tǒng)PC機(jī)與單片機(jī)通信器件清單

MCS-51系列單片機(jī)輸入、輸出的邏輯電平為TTL電平;而PC機(jī)配置的RS-232C標(biāo)準(zhǔn)接口邏輯電平為負(fù)邏輯,所以單片機(jī)與PC機(jī)間的通信要加電平轉(zhuǎn)換電路。圖8-22電路采用MAX232芯片來實(shí)現(xiàn)電平轉(zhuǎn)換,它可以將單片機(jī)TXD端輸出的TTL電平轉(zhuǎn)換成RS-232C標(biāo)準(zhǔn)電平。PC機(jī)用9芯標(biāo)準(zhǔn)插座通過MAX232芯片和單片機(jī)串行口連接,MAX232的14、9引腳接PC機(jī);11、8引腳接至單片機(jī)的TXD和RXD端。

3.軟件設(shè)計(jì)主機(jī)PC機(jī)的通信程序可以用TurboC語言編寫,也可以用高級(jí)語言VC、VB來編寫。最簡(jiǎn)單的方法是在PC機(jī)中安裝“串口調(diào)試助手”,只要設(shè)定好波特率等參數(shù)就可以直接使用,用戶無需再自己編寫通信程序。1)流程圖單片機(jī)通信程序參考流程如圖8-23所示。圖8-23單片機(jī)通信程序流程圖

2)指令代碼

(1)編寫匯編語言代碼。用匯編語言編寫的指令代碼如下:(2)編寫C語言代碼。用C語言編寫的指令代碼如下:

4.調(diào)試通過串口線將單片機(jī)與PC機(jī)相連,PC機(jī)上請(qǐng)安裝“串口調(diào)試助手”應(yīng)用程序,然后進(jìn)行以下測(cè)試。

(1)在PC機(jī)上運(yùn)行“串口調(diào)試助手”程序,設(shè)置好波特率,參數(shù)如圖8-24所示。圖8-24串口調(diào)試助手的設(shè)置

(2)給單片機(jī)交通燈控制系統(tǒng)上電,觀察交通燈的正常運(yùn)行狀態(tài)。

(3)在PC機(jī)的“串口調(diào)試助手”中,用PC鍵盤輸入十六進(jìn)制命令“01”并發(fā)送,注意觀察是否接收到返回的握手信號(hào)“01”和交通燈的顯示狀態(tài)。

(4)繼續(xù)用PC機(jī)鍵盤輸入十六進(jìn)制命令“02”并發(fā)送,注意觀察是否接收到返回的握手信號(hào)“02”和下位機(jī)交通燈的顯示狀態(tài)。

問1:串行通信與并行通信有何異同?串行和并行兩種通信方式各有什么優(yōu)缺點(diǎn)?答:并行通信中,信息傳輸?shù)奈粩?shù)和數(shù)據(jù)位數(shù)相等;串行通信中,數(shù)據(jù)一位一位順序傳送。并行通信速度快,傳輸線多,適合于近距離的數(shù)據(jù)通信,但硬件接線成本高;串行通信速度慢,但硬件成本低,傳輸線少,適合于長(zhǎng)距離數(shù)據(jù)傳輸。8.4互動(dòng)環(huán)節(jié)

問2:串行口的工作過程?答:(1)串行通信的接收過程如下:

SCON的REN(SCON.4)為1時(shí),允許接收,外部數(shù)據(jù)由RXD引腳串行輸入(最低位先入)。一幀數(shù)據(jù)接收完畢后送入SBUF,同時(shí)置SCON的RI(SCON.0)為1,向CPU發(fā)出中斷請(qǐng)求。CPU響應(yīng)中斷后用軟件將RI清0,接收到的數(shù)據(jù)從SBUF讀出,然后開始接收下一幀。

(2)串行通信的發(fā)送過程如下:先將要發(fā)送的數(shù)據(jù)送入SBUF,即可啟動(dòng)發(fā)送,數(shù)據(jù)由TXD引腳串行發(fā)送(最低位先發(fā))。一幀數(shù)據(jù)發(fā)送完畢時(shí),自動(dòng)置SCON的TI(SCON.1)為1,向CPU發(fā)出中斷請(qǐng)求。CPU響應(yīng)中斷后用軟件將TI清0,然后開始發(fā)送下一幀。串行通信的方式1、2和3都按照上述接收和發(fā)送過程來完成通信。對(duì)于方式0,接收和發(fā)送數(shù)據(jù)都由RXD引腳實(shí)現(xiàn),TXD引腳輸出同步移位時(shí)鐘脈沖信號(hào)。

問3:任務(wù)2中,若采用fosc?=?11.059MHz,要實(shí)現(xiàn)串行通信的波特率為9600bit/s,定時(shí)器1的TH1和TL1的初值如何設(shè)置?答:當(dāng)定時(shí)器T1做波特率發(fā)生器使用時(shí),通常是工作在方式2,那么TH1和TL1的值相同,通過表8-5可得TH1=TL1=FDH。

問4:任務(wù)2中,如果銀行動(dòng)態(tài)密碼為368094,如何實(shí)現(xiàn)呢?答:電路依然可以采用圖8-4所示的電路,只要將A8_2.asm或者C8_2.c中的程序加以修改即可。

(1)匯編程序修改:甲機(jī)發(fā)送數(shù)據(jù)程序修改如下,乙機(jī)接收程序不改變:

(2)?C語言程序修改:將甲機(jī)發(fā)送數(shù)據(jù)程序C8_2.c中的程序主函數(shù)中一維數(shù)組unsignedcharsend[]={3,4,1,8,5,7};修改為unsigne

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論