版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 摘要</b></p><p> 由單片機(jī)構(gòu)成的雙機(jī)通信系統(tǒng)采用總線型主從式結(jié)構(gòu)。程設(shè)計就是要利用單片機(jī)來完成一個系統(tǒng),實現(xiàn)雙片單片機(jī)串行通信。通信的結(jié)果實用數(shù)碼管進(jìn)行顯示,數(shù)碼管采用查表方式顯示。所謂主從式結(jié)構(gòu),即在兩個單片機(jī)中,一個主機(jī)負(fù)責(zé)通信管理,另一個為從機(jī),從機(jī)要負(fù)責(zé)主機(jī)的調(diào)度與支配。該設(shè)計用AT89C51芯片,并用C語言程序來控制AT89C51,使之
2、能實現(xiàn)兩個單片機(jī)之間的通信。通信方式為單工通信,一個為主單片機(jī),作為發(fā)送方,另一個為從單片機(jī),作為接收方。</p><p> 關(guān)鍵字:單片機(jī).AT89C51.C語言</p><p><b> 目錄</b></p><p><b> 摘要1</b></p><p><b> 前言
3、3</b></p><p><b> 二 緒論4</b></p><p><b> 2.1單片機(jī)4</b></p><p><b> 2.2C語言:4</b></p><p><b> 2.3雙機(jī)通信5</b></p>
4、;<p><b> 三.系統(tǒng)分析6</b></p><p> 3.1 基本原理6</p><p> 3.2波特率選擇7</p><p> 3.3通信協(xié)議的使用7</p><p><b> 四 、硬件設(shè)計7</b></p><p> 4.1單
5、片機(jī)串行通信功能10</p><p> 4.2 MAX232芯片12</p><p> 4.3整體電路設(shè)計13</p><p><b> 五、軟件設(shè)計14</b></p><p> 5.1串行通信軟件實現(xiàn)14</p><p> 5.2程序流程圖14</p>&l
6、t;p><b> 六.聯(lián)合調(diào)試17</b></p><p><b> 總結(jié)18</b></p><p><b> 參考文獻(xiàn)24</b></p><p><b> 前言</b></p><p> 近年來,在自動化控制和只能儀器儀表中,單
7、片機(jī)的應(yīng)用越來越廣泛,由于單片機(jī)的運算功能較差,往往需要借助計算機(jī)系統(tǒng),因此單片機(jī)和PC機(jī)進(jìn)行遠(yuǎn)程通信更具有實際意義,通信的關(guān)鍵在于互傳數(shù)據(jù)信息。51單片機(jī)內(nèi)部的串行口具有通信的功能,該 串口可作為通信接口,利用該串口與PC機(jī)的串口通信進(jìn)行串行通信,將單片機(jī)采集的數(shù)據(jù)進(jìn)行整理及統(tǒng)計等復(fù)雜處理就能滿足實際的應(yīng)用需要。51單片機(jī)的開發(fā)除了硬件支持外,同樣離不開軟件。用匯編語言或C語言等高級語言編寫的源程序必須轉(zhuǎn)化為機(jī)器碼才能被執(zhí)行。目前流行
8、的Keil 8051c編譯器。它提供了集成開發(fā)環(huán)境,包括C編譯器、宏編碼、連接器、庫管理和仿真調(diào)制器。</p><p> 利用keil 8051ccuvision編寫的程序可直接調(diào)用編譯器編譯,連接后可直接運行。學(xué)生結(jié)合自己的實際情況,選擇合適的方法來完成51單片機(jī)和PC機(jī)的串口通 信。二 緒論</p><p><b> 2.1單片機(jī)</b></p&
9、gt;<p> 單片機(jī)是一種集成在電路芯片,是采用超大規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機(jī)存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統(tǒng)、定時器/計時器等功能(可能還包括顯示驅(qū)動電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個小而完善的計算機(jī)系統(tǒng)。</p><p> 在我國,單片機(jī)已經(jīng)不是一個陌生的名詞,它的出現(xiàn)是近代計算機(jī)技術(shù)發(fā)展史
10、上的一個重要里程碑,因為單片機(jī)的誕生標(biāo)志著計算機(jī)正式形成了通用計算機(jī)系統(tǒng)和嵌入式計算機(jī)系統(tǒng)兩大分支。在單片機(jī)誕生之前,為了滿足工程對象的嵌入式應(yīng)用要求,只能將通用計算機(jī)進(jìn)行機(jī)械加固、電氣加固后嵌入到對象系統(tǒng)中構(gòu)成。由于通用計算機(jī)的巨大體積和高成本,無法嵌入到大多數(shù)對象體系中。單片機(jī)則應(yīng)嵌入式應(yīng)用而誕生。單片機(jī)的單芯片的微小體積和極低的成本,可廣泛的嵌入到玩具、家用電器、機(jī)器人、儀器儀表、汽車電子系統(tǒng)、工業(yè)控制單元、辦公自動化設(shè)備、金融電
11、子系統(tǒng)、艦船、個人信息終端及通訊產(chǎn)品中,成為現(xiàn)代電子系統(tǒng)中最重要的智能化工具。</p><p> 單片機(jī)作為最典型的嵌入式系統(tǒng),它的成功應(yīng)用推動了嵌入式系統(tǒng)的發(fā)展。近年來。除了各種類型的工控機(jī),各種以通用微處理器構(gòu)成的計算機(jī)主模板快、以通用處理器為核,片內(nèi)擴(kuò)展一些外圍功能電路單元構(gòu)成的嵌入式微處理器,甚至單片形式的PC及等,都實現(xiàn)了嵌入式應(yīng)用,成為嵌入式系統(tǒng)的龐大家族。</p><p>
12、 作為典型的嵌入式系統(tǒng)的單片機(jī),在我國大規(guī)模應(yīng)用已有十余年歷史。在全國高等工科院校中,已普遍開設(shè)單片機(jī)及相關(guān)課程。單片機(jī)已成為電子系統(tǒng)中最普遍的應(yīng)用手段。除了單設(shè)課程外,在涉及的許多環(huán)節(jié),如課程設(shè)計、畢業(yè)設(shè)計、研究生論文課題中,單片機(jī)系統(tǒng)都是最廣泛的應(yīng)用手段。目前,許多單片機(jī)教材都Shiite以80C51系列為基礎(chǔ)來講述其原理及應(yīng)用的。這是因為MCS-51系列單片機(jī)奠定了8位單片機(jī)的基礎(chǔ),形成了單片機(jī)的經(jīng)典體系結(jié)構(gòu)。單片機(jī)是現(xiàn)代計算機(jī)
13、、電子技術(shù)的新興領(lǐng)域,無論是單片機(jī)本身還是單片機(jī)應(yīng)用系統(tǒng)設(shè)計方案都會隨著時代不斷發(fā)生變變化。</p><p><b> 2.2C語言:</b></p><p> C語言是Combined Language(組合語言)的中英混合簡稱。是一種計算機(jī)程序設(shè)計語言。它既具有高級語言的特點,又具有匯編語言的特點。它可以作為工作系統(tǒng)設(shè)計語言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程
14、序設(shè)計語言,編寫不依賴計算機(jī)硬件的應(yīng)用程序。因此,它的應(yīng)用范圍廣泛,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,具體應(yīng)用比如單片機(jī)以及嵌入式系統(tǒng)開發(fā)。</p><p><b> C 語言特點:</b></p><p> 是一種成功的系統(tǒng)描述語言,用C語言開發(fā)的UNIX操作系統(tǒng)就是一個成功的范例;同時C語言又是一種通用的程序設(shè)計語言,在國際上廣泛流行。世界上
15、很多著名的計算公司都成功的開發(fā)了不同版本的C語言,很多優(yōu)秀的應(yīng)用程序也都使用C語言開發(fā)的,它是一種很有發(fā)展前途的高級程序設(shè)計語言。1. C是中級語言。它把高級語言的基本結(jié)構(gòu)和語句與低級語言的實用性結(jié)合起來。C 語言可以像匯編語言一樣對位、字節(jié)和地址進(jìn)行操作, 而這三者是計算機(jī)最基本的工作單元。2.C是結(jié)構(gòu)式語言。結(jié)構(gòu)式語言的顯著特點是代碼及數(shù)據(jù)的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦阌谑?/p>
16、用、維護(hù)以及調(diào)試。C 語言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便的調(diào)用,并具有多種循環(huán)、條件語句控制程序流向,從而使程序完全結(jié)構(gòu)化。3.C語言功能齊全。具有各種各樣的數(shù)據(jù)類型,并引入了指針概念,可使程序效率更高。另外C語言也具有強大的圖形功能,支持多種顯示器和驅(qū)動器。而且計算功能、邏輯判斷功能也比較強大,可以實現(xiàn)決策目的的游戲。 C語言適用范圍大。適合于多種操作系統(tǒng),如Windows、DOS、UNIX等等;也適用于多</p>
17、;<p><b> 2.3雙機(jī)通信</b></p><p> 兩臺機(jī)器的通信方式可分為單工通信、半雙工通信、雙工通信,他們的通信原理及通信方式為:</p><p> 單工通信:是指消息只能單方向傳輸?shù)墓ぷ鞣绞健喂ねㄐ判诺朗菃蜗蛐诺?,發(fā)送端和接收端的身份是固定的,發(fā)送端只能發(fā)送信息,不能接收信息;接收端只能接收信息,不能發(fā)送信息,數(shù)據(jù)信號僅從一端傳
18、送到另一端,即信息流是單方向的。通信雙方采用“按——講”(Push To Talk,PTT)單工通信屬于點到點的通信。根據(jù)收發(fā)頻率的異同,單工通信可分為同頻通信和異頻通信。</p><p> 半雙工通信:這種通信方式可以實現(xiàn)雙向的通信,但不能在兩個方向上同時進(jìn)行,必須輪流交替地進(jìn)行。也就是說,通信信道的每一段都可以是發(fā)送端,也可以是接端。但同一時刻里,信息只能有一個傳輸方向。如日常生活中的例子有步話機(jī)通信等。&
19、lt;/p><p> 雙工通信:雙工通信是指在同一時刻信息可以進(jìn)行雙向傳輸,和打電話一樣,說的同時也能聽,邊說邊聽。這種發(fā)射機(jī)和接收機(jī)分別在兩個不同的頻率上(兩個頻率差有一定要求)能同時進(jìn)行工作的雙工機(jī)也稱為異頻雙工機(jī)。雙工機(jī)的特點是使用方便,但線路設(shè)計較復(fù)雜,價格也較高。</p><p><b> 三.系統(tǒng)分析</b></p><p><
20、;b> 3.1 基本原理</b></p><p> MCS-51系列單片機(jī)上有一個通用異步接收/發(fā)送器UART,通過引腳RXD[P3.O]和TXD[P3.1]可與外音B電路進(jìn)行全雙工的串行異步通信,發(fā)送數(shù)據(jù)時由TXD端送出,接收時數(shù)據(jù)由RXD端輸入。本文將具體介紹單片機(jī)串口的特點和編程方法,并且在最后給出一個實用的單片機(jī)與計算機(jī)通過串口通信的程序。1.1串行接口的基本特點</p>
21、<p> MCS-51單片機(jī)的串行端口有4種基本工作方式,通過編程設(shè)置,可以使其工作在任一方式,以滿足不同場合的需要。其中,方式0主要用于外接移位寄存器,以擴(kuò)展單片機(jī)的I/O電路;工作方式1多用于雙機(jī)之間或與外設(shè)電路的通信;方式2、3除有方式1的功能外,還可以作多機(jī)通信,以構(gòu)成分布式多微機(jī)系統(tǒng)。 </p><p> 串行端口有兩個控制寄存器SCON、PCON,用于設(shè)置工作方式、發(fā)送或接收的狀態(tài)、
22、特征位、數(shù)據(jù)傳送波特率[每秒傳送的位數(shù)]以及作為中斷標(biāo)志等。</p><p> 串行端口有一個數(shù)據(jù)寄存器SBUF在特殊功能寄存器中的字節(jié)地址為99H,該寄存器為發(fā)送和接收所共用。</p><p> 串行端口的波特率可以用程序來控制。在不同工作方式中,由時鐘振蕩頻率的分頻值或由定時器T1的定時溢出時間確定,使用十分方便靈活。???串口控制寄存器</p><p>
23、 輸入:在(REN)=1時,串行口采樣RXD引腳,當(dāng)采樣到1至O的跳變時,確認(rèn)是串行發(fā)送來的一幀數(shù)據(jù)的開始位0,從而開始接收一幀數(shù)據(jù)。只有當(dāng)8位數(shù)據(jù)接收完,并檢測到高電平停止位后,只有滿足①(R1)=0;②(SM2)=0或接收到的第9位數(shù)據(jù)為1時,停止位才進(jìn)入RB8,8位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志RI;否則信息丟失。所以在方式1接收時,應(yīng)先用軟件清零RI和SM2標(biāo)志。</p><p> 方式2
24、為固定波特率的11位UART方式。它比方式1增加了一位可程控為1或0的第9位數(shù)據(jù)。</p><p> 輸出:發(fā)送的串行數(shù)據(jù)由TXD端輸出一幀信息為11位,附加的第9位來自SCON寄存器的TB8位,用軟件置位或復(fù)位。它可作為多機(jī)通訊中地址/數(shù)據(jù)信息的標(biāo)志位,也可以作為數(shù)據(jù)的奇偶校驗位。當(dāng)CPU執(zhí)行一條數(shù)據(jù)寫入SUBF的指令且TI=0時,就啟動發(fā)送器發(fā)送。發(fā)送一幀信息后,置位中斷標(biāo)志TI。</p>&
25、lt;p> ? 輸入:在(REN)=1時,串行口采樣RXD引腳,當(dāng)采樣到1至O的跳變時,確認(rèn)是串行發(fā)送來的一幀數(shù)據(jù)的開始位0,從而開始接收一幀數(shù)據(jù)。在接收到附加的第9位數(shù)據(jù)后,當(dāng)滿足①(RI):0;②(SM2)=0或接收到的第9位數(shù)據(jù)為1時,第9位數(shù)據(jù)才進(jìn)入RB8,8位數(shù)據(jù)才能進(jìn)入接收寄存器,并由硬件置位中斷標(biāo)志Ri;否則信息丟失。且不置位RI。</p><p> 方式3為波特率可變的11位UART方式
26、。除波特率外,其余與方式2相同。 波特率的選擇??? 如前所述,在串行通訊中,收發(fā)雙方的數(shù)據(jù)傳送率(波特率)要有一定的約定。在MCS-51串行口的四種工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可變的,由定時器T1的溢出率控制。</p><p><b> 1.方式O</b></p><p> 方式0的波特率固定為主振頻率? 的1/12。</
27、p><p><b> 2.方式2</b></p><p> 方式2的波特率由PCON中的選擇位SMOD來決定,可表示為:波特率=2sMoD×fosc/64也就是當(dāng)SMOD=1時,波特率為1/32×fosc,當(dāng)SMOD=0時,波特率為1/64×fosc。</p><p><b> 3.方式1和方式3<
28、;/b></p><p> 定時器T1作為波特率發(fā)生器,其公式如下:</p><p> 波特率=2SMOD/32×定時器T1溢出率</p><p> T1溢出率=T1計數(shù)率/產(chǎn)生溢出所需的周期數(shù) 式中T1計數(shù)率取決于它工作在定時器狀態(tài)還是計數(shù)器狀態(tài)。當(dāng)工作于定時器狀態(tài)時,T1計數(shù)率為Fosc/2:當(dāng)工作于計數(shù)器狀態(tài)時,T1計數(shù)率為外部輸入頻率,
29、此頻率應(yīng)小于Fosc/24。產(chǎn)生溢出所需周期與定時器T1的工作方式、T1的預(yù)置值有關(guān)。定時器T1工作于方式O:溢出所需周期數(shù)=8192-×</p><p> 定時器T1工作于方式1:溢出所需周期數(shù)=65536-X</p><p> 定時器T1工作于方式2:溢出所需周期數(shù)=256-X</p><p> 因為方式2為自動重裝入初值的8位定時器/計數(shù)器模式
30、,所以用它來做波特率發(fā)生器最恰當(dāng)。這種方式下,T1的溢出率[次/秒]計算式可以表示為:</p><p> T1溢出率=Fsoc/12[256-X]</p><p><b> 3.2波特率選擇</b></p><p> 波特率(Boud Rate)就是在串口通信中每秒能夠發(fā)送的位數(shù)(bits/second)。MCS-51串行端口在四種工作模
31、式下有不同的波特率計算方法。其中,模式0和模式2波特率計算很簡單,請同學(xué)們參看教科書;模式1和模式3的波特率選擇相同,故在此僅以工作模式1為例來說明串口通信波特率的選擇。???? 在串行端口工作于模式1,其波特率將由計時/計數(shù)器1來產(chǎn)生,通常設(shè)置定時器工作于模式2(自動再加模式)。在此模式下波特率計算公式為:?????????波特率=(1+SMOD)*晶振頻率/(384*(256-TH1)) 其中,SMOD——寄存器PCON的第7位,稱
32、為波特率倍增 。TH1——定時器的重載值。???? 在選擇波特率的時候需要考慮兩點:首先,系統(tǒng)需要的通信速率。這要根據(jù)系統(tǒng)的運作特點,確定通信的頻率范圍。然后考慮通信時鐘誤差。使用同一晶振頻率在選擇不同的通信速率時通信時鐘誤差會有很大差別。為了通信的穩(wěn)定,我們應(yīng)該盡量選擇時鐘誤差最小的頻率進(jìn)行通信。??? 下面舉例說明波特率選擇過程:假設(shè)系統(tǒng)要求的通信頻率在20000bit/s以下,晶振頻率為12MHz,設(shè)置SMOD=1(即波特率倍增&
33、lt;/p><p> 因此,在通信中,最好選用波特率為1200,2400,4800中的一個。</p><p> 3.3通信協(xié)議的使用</p><p> 通信協(xié)議是通信設(shè)備在通信前的約定。單片機(jī)、計算機(jī)有了協(xié)議這種約定,通信雙方才能明白對方的意圖,以進(jìn)行下一步動作。假定我們需要在PC機(jī)與單片機(jī)之間進(jìn)行通信,在雙方程式設(shè)計過程中,有如下約定:</p>&
34、lt;p> 0xA1:單片機(jī)讀取P0端口數(shù)據(jù),并將讀取數(shù)據(jù)返回PC機(jī);</p><p> 0xA2:單片機(jī)從PC機(jī)接收一段控制數(shù)據(jù);</p><p> 0xA3:單片機(jī)操作成功信息。</p><p> 在系統(tǒng)工作過程中,單片機(jī)接收到PC機(jī)數(shù)據(jù)信息后,便查找協(xié)議,完成相應(yīng)的操作。當(dāng)單片機(jī)接收到0xA1時,讀取P0端口數(shù)據(jù),并將讀取數(shù)據(jù)返回PC機(jī);當(dāng)單片機(jī)
35、接收到0xA2時,單片機(jī)等待從PC機(jī)接收一段控制數(shù)據(jù);當(dāng)PC接收到0xA3時,就表明單片機(jī)操作已經(jīng)成功。</p><p> AT89C51是一種帶4K字節(jié)閃存可編程可擦除只讀存儲器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低電壓、高性能CMOS 8位微處理器,俗稱單片機(jī)。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機(jī)
36、。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。外形及引腳排列如圖所示:</p><p> 管腳說明:VCC
37、:供電電壓。GND:接地。P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P0口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗時,P0輸出原碼,此時P0外部必須被拉高。 P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上
38、拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸
39、出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出</p><p> 4.1單片機(jī)串行通信功能</p><p> 圖4.1AT89C51</p><p> 計算機(jī)與外界的信息交換稱為通信,常用的通信方式有兩種:并行通信和串行通信。51單片機(jī)用4個接口與外界進(jìn)行數(shù)據(jù)輸入與數(shù)據(jù)輸出就是并行通信,并行通信的特點是
40、傳輸信號的速度快,但所用的信號線較多,成本高,傳輸?shù)木嚯x較近。串行通信的特點是只用兩條信號線(一條信號線,再加一條地線作為信號回路)即可完成通信,成本低,傳輸?shù)木嚯x較遠(yuǎn)。</p><p> 51單片機(jī)的串行接口是一個全雙工的接口,它可以作為UART(通用異步接受和發(fā)送器)用,也可以作為同步移位寄存器用。51單片機(jī)串行接口的結(jié)構(gòu)如下:</p><p> ?。?)數(shù)據(jù)緩沖器(SBUF)<
41、;/p><p> 接受或發(fā)送的數(shù)據(jù)都要先送到SBUF緩存。有兩個,一個緩存,另一個接受,用同一直接地址99H,發(fā)送時用指令將數(shù)據(jù)送到SBUF即可啟動發(fā)送;接收時用指令將SBUF中接收到的數(shù)據(jù)取出。</p><p> ?。?)串行控制寄存器(PCON)</p><p> SCON用于串行通信方式的選擇,收發(fā)控制及狀態(tài)指示,各位含義如下:</p><
42、p> SM0,SM1:串行接口工作方式選擇位,這兩位組合成00,01,10,11對應(yīng)于工作方式0、1、2、3。串行接口工作方式特點見下表</p><p> SM2:多機(jī)通信控制位。</p><p> REN:接收允許控制位。軟件置1允許接收;軟件置0禁止接收。</p><p> TB8:方式2或3時,TB8為要發(fā)送的第9位數(shù)據(jù),根據(jù)需要由軟件置1或清0
43、。</p><p> RB9:在方式2或3時,RB8位接收到的第9位數(shù)據(jù),實際為主機(jī)發(fā)送的第9位數(shù)據(jù)TB8,使從機(jī)根據(jù)這一位來判斷主機(jī)發(fā)送的時呼叫地址還是要傳送的數(shù)據(jù)。</p><p> TI:發(fā)送中斷標(biāo)志。發(fā)送完一幀數(shù)據(jù)后由硬件自動置位,并申請中斷。必須要軟件清零后才能繼續(xù)發(fā)送。</p><p> RI:接收中斷標(biāo)志。接收完一幀數(shù)據(jù)后由硬件自動置位,并申請中
44、斷。必須要軟件清零后才能繼續(xù)接收。</p><p> ?。?)輸入移位寄存器</p><p> 接收的數(shù)據(jù)先串行進(jìn)入輸入移位寄存器,8位數(shù)據(jù)全移入后,再并行送入接收SBUF中。</p><p><b> (4)波特率發(fā)生器</b></p><p> 波特率發(fā)生器用來控制串行通信的數(shù)據(jù)傳輸速率的,51系列單片機(jī)用定時
45、器T1作為波特率發(fā)生器,T1設(shè)置在定時方式。波特率時用來表示串行通信數(shù)據(jù)傳輸快慢程度的物理量,定義為每秒鐘傳送的數(shù)據(jù)位數(shù)。</p><p> ?。?)電源控制寄存器PCON</p><p> 其最高位為SMOD。</p><p><b> ?。?)波特率計算</b></p><p> 當(dāng)定時器T1工作在定時方式的時候
46、,定時器T1溢出率=(T1計數(shù)率)/(產(chǎn)生溢出所需機(jī)器周期)。由于是定時方式,T1計數(shù)率= fORC/12。產(chǎn)生溢出所需機(jī)器周期數(shù)=模M-計數(shù)初值X。</p><p> 4.2 MAX232芯片</p><p> 用8051串行接口通信,如果兩臺8051單片機(jī)之間的距離很近(不超過1.5m),可以采用直接將兩臺8051單片機(jī)的串行接口直接相連,利用其自身的TTL電平(0-5V)直接傳輸
47、數(shù)據(jù)信息。如果傳輸距離較遠(yuǎn)(超過1.5m),由于傳輸線的阻抗與分布電容,會產(chǎn)生電平損耗和波形畸變,以至于檢測不出數(shù)據(jù)或數(shù)據(jù)出錯。此時可利用 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。</p><p> 電平轉(zhuǎn)換芯片MAX232是美信公司(M
48、AXIM)生產(chǎn),專用于進(jìn)行將TTL電平轉(zhuǎn)換為RS232電平的芯片,MAX232內(nèi)部有泵電源,能將+5V電源電壓在芯片內(nèi)提高到RS232電平所需的+10V或者-10V電平。</p><p> 圖4.2.電平轉(zhuǎn)換芯片MAX232</p><p><b> 4.3整體電路設(shè)計</b></p><p> 最終設(shè)計電路如下圖3所示,發(fā)送方的數(shù)據(jù)由串
49、行口TXD段輸出,經(jīng)過電平轉(zhuǎn)換芯片MAX232將TTL電平轉(zhuǎn)換為RS232電平輸出,經(jīng)過傳輸線將信號傳送到接收端。接收方也使用MAX232芯片進(jìn)行電平轉(zhuǎn)換后,信號到達(dá)接收方串行口的接收端。接受方接收后,通過P1口在數(shù)碼管上顯示接收的信息。</p><p> 圖4.3.串行通信電路</p><p><b> 五、軟件設(shè)計</b></p><p&g
50、t; 通過通信協(xié)議進(jìn)行發(fā)送接收,主機(jī)先送AAH給從機(jī),當(dāng)從機(jī)接收到AAH后,向主機(jī)回答B(yǎng)BH。主機(jī)收到BBH后就把數(shù)碼表TAB[16]中的10個數(shù)據(jù)送給從機(jī),并發(fā)送檢驗和。從機(jī)收到16個數(shù)據(jù)并計算接收到數(shù)據(jù)的檢驗和,與主機(jī)發(fā)送來的檢驗和進(jìn)行比較,若檢驗和相同則發(fā)送00H給主機(jī);否則發(fā)送FFH給主機(jī),重新接受。從機(jī)收到16個正確數(shù)據(jù)后送到一個數(shù)碼管顯示。</p><p> 5.1串行通信軟件實現(xiàn)</p&g
51、t;<p> ?。?)串行口工作于方式1;用定時器1產(chǎn)生9600bit/s的波特率,工作于方式2。</p><p> (2)功能:將本機(jī)ROM中數(shù)碼表TAB[16]中的16個數(shù)發(fā)送到從機(jī),并保存在從機(jī)內(nèi)部ROM中,從機(jī)收到這16個數(shù)據(jù)后送到一個數(shù)碼管循環(huán)顯示。</p><p> ?。?)通信協(xié)議:主機(jī)首先發(fā)送連絡(luò)信號(AAH),從機(jī)接收到之后返回一個連絡(luò)信號(BBH)表示從
52、機(jī)已準(zhǔn)備好接收。</p><p> (4)通信過程使用第九位發(fā)送奇偶校驗位。</p><p> ?。?)從機(jī)接收到一個數(shù)據(jù)后,立即進(jìn)行奇偶校驗,若數(shù)據(jù)沒有錯誤,則返回00H,否則返回FFH。</p><p> (6)主機(jī)發(fā)送一個數(shù)據(jù)后,等待從機(jī)返回數(shù)據(jù);若為00H,則繼續(xù)發(fā)送下一個數(shù)據(jù),若為FFH,則重新發(fā)送數(shù)據(jù)。</p><p><
53、;b> 5.2程序流程圖</b></p><p> ?。?)發(fā)送端程序流程圖</p><p><b> 接收方程序流程圖</b></p><p><b> 六.聯(lián)合調(diào)試</b></p><p> 在protues上進(jìn)行仿真實驗。首先使用KeilC將編寫完成的程序編譯生成HE
54、X文件,將HEX文件燒錄到兩片單片機(jī)中,進(jìn)行仿真實驗,結(jié)果如下圖所示,可以看到,接收端已將接受到的數(shù)據(jù)完整的顯示了出來。</p><p><b> 圖6.1.仿真圖</b></p><p><b> 總結(jié)</b></p><p> 本次設(shè)計是通過兩塊簡單的89C51單片機(jī)實現(xiàn)信息的串口通信。設(shè)計過程中,從雙機(jī)通信背景
55、的了解,到89C51單片機(jī)具體功能的了解,與89C51單片機(jī)的區(qū)別;從串口通信的原理的熟悉,到掌握具體串口通信在雙機(jī)之間的實現(xiàn);從硬件電路設(shè)計到程序編寫;從硬件調(diào)試到軟件模擬實現(xiàn)等過程在自己的努力和老師的親切指導(dǎo)下,都是有條不紊地進(jìn)行。 設(shè)計中,收獲不少東西,也遇到了不少的問題。首先,在完成單片機(jī)課程學(xué)習(xí)任務(wù)后,對內(nèi)容的掌握不夠,缺乏靈活運用的能力,對于知識的擴(kuò)展也存在一定的問題,因此,初面對設(shè)計課題,無法系統(tǒng)地進(jìn)
56、行設(shè)計思路的擬定。其次,一個學(xué)期的學(xué)習(xí),在鞏固和學(xué)習(xí)硬件知識的同時,用軟件控制協(xié)調(diào)硬件實現(xiàn)現(xiàn)實功能,通過硬件完成軟件的功能等方面的融會貫通,取得了一定的效果。再者,硬件設(shè)計過程中,I/O口的擴(kuò)展,外部ROM的擴(kuò)展,對于芯片的選擇,軟件編寫時,對于某些指令的功能,功能模塊的連接,芯片地址選擇等都遇到了很大的障礙,不過在老師幫助和自己查閱資料得到了解決,與此同時,了解了不少的問題。另外,設(shè)計中犯一些常識性的錯誤,對設(shè)計進(jìn)程造成了一定的影響。
57、例如,程序調(diào)試時,由于粗心錄入程序時,將程序敲錯,比如</p><p> 通過本次課程設(shè)計,不僅使理論知識得到了實踐,有效鞏固了知識。同時對于單片機(jī)發(fā)展歷史、強大功能、應(yīng)用領(lǐng)域以及系列知識得到了大概的系統(tǒng)認(rèn)識,同時也初步了解了一個完整的系統(tǒng)開發(fā)的過程,對于創(chuàng)造思維的培養(yǎng)和開發(fā)能力的鍛煉,本次設(shè)計,為此提供了一個很好的平臺。</p><p> 當(dāng)然,同學(xué)之間的相互討論學(xué)習(xí),互相提高,老師
58、知識的幫助,經(jīng)驗的傳授,也是本次設(shè)計的一道美麗的風(fēng)景線,真正起到了拋磚引玉的目的。在此,感謝老師給我們這樣好的學(xué)習(xí)機(jī)會。</p><p><b> 附錄:</b></p><p><b> 主機(jī)發(fā)送程序</b></p><p> #include <reg51.h></p><p>
59、; #define uchar unsigned char </p><p> void init();</p><p> void send();</p><p> ucharTAB[16] ={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
60、};</p><p> uchar i,sum;</p><p><b> int j;</b></p><p><b> main()</b></p><p> { init();</p><p><b> send();</b></
61、p><p><b> } </b></p><p> void init(void)</p><p><b> { EA=1;</b></p><p><b> ES=1;</b></p><p> TMOD=0x20;</p>&l
62、t;p><b> TH1=0xfd;</b></p><p><b> TL1=0xfd;</b></p><p> PCON=0x00;</p><p> SCON=0x50;</p><p><b> TR1=1;</b></p><p&
63、gt;<b> } </b></p><p> void send(void)</p><p><b> {do</b></p><p> { SBUF=0xaa;</p><p> while(!TI);</p><p><b> TI=0;</
64、b></p><p> while(!RI);</p><p><b> RI=0;</b></p><p><b> }</b></p><p> while((SBUF^0xbb)!=0);</p><p><b> do</b>&l
65、t;/p><p><b> { sum=0;</b></p><p> for(i=0;i<=15;i++)</p><p> { SBUF=TAB[i];</p><p> sum+=TAB[i];</p><p> while(!TI);</p><p>&
66、lt;b> TI=0;</b></p><p><b> }</b></p><p><b> SBUF=sum;</b></p><p> while(!TI);</p><p><b> TI=0;</b></p><p>
67、; while(!RI);</p><p><b> RI=0;</b></p><p><b> }</b></p><p> while(SBUF!=0);</p><p><b> }</b></p><p><b> 從機(jī)接
68、收程序</b></p><p> #include<reg51.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> void delay(int );</p><p>
69、void receive(void) ;</p><p> void init(void);</p><p> uchar i,sum;</p><p><b> int j;</b></p><p> ucharTAB[16] ={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
70、,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};</p><p> void main()</p><p><b> { init();</b></p><p> receive();</p><p><b> }</b></p><p
71、> void init(void)</p><p><b> { EA=1;</b></p><p><b> ES=1;</b></p><p> TMOD=0x20;</p><p><b> TH1=0xfd;</b></p><p&g
72、t;<b> TL1=0xfd;</b></p><p> PCON=0x00;</p><p> SCON=0x50;</p><p><b> TR1=1;</b></p><p><b> } </b></p><p> void de
73、lay(int x)</p><p> {int i,j;</p><p> for(i=0;i<x;i++)</p><p> for(j=1;j<=150;j++ );</p><p><b> }</b></p><p> void receive(void)<
74、/p><p> { uchar TABS[16];</p><p><b> do</b></p><p> { while(!RI);RI=0; }</p><p> while((SBUF^0xaa)!=0);</p><p> SBUF=0xbb;</p><p&
75、gt; while(!TI);TI=0;</p><p><b> while(1)</b></p><p><b> { sum=0;</b></p><p> for(i=0;i<=15;i++)</p><p> { while(!RI);RI=0;</p>&l
76、t;p> TABS[i]=SBUF;</p><p> sum+=TABS[i];</p><p><b> }</b></p><p> while(!RI);RI=0;</p><p> if((SBUF^sum)==0)</p><p> { SBUF=0x00;</
77、p><p> while(!TI);</p><p><b> TI=0;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> else</b></p&
78、gt;<p> { SBUF=0xff;</p><p> while(!TI);</p><p><b> TI=0;</b></p><p><b> }</b></p><p><b> }</b></p><p><
79、b> while(1)</b></p><p> { for(i=0;i<=15;i++)</p><p> { P1=TABS[i];</p><p> delay(500);</p><p><b> }</b></p><p><b> }<
80、;/b></p><p><b> }</b></p><p><b> 參考文獻(xiàn)</b></p><p> [1] 胡偉. 單片機(jī)C程序設(shè)計及應(yīng)用實例. 北京:人民郵電出版社,2003</p><p> [2] 韓毅剛.計算機(jī)通信技術(shù). 北京市:北京航空航天大學(xué)出版社,2007<
81、;/p><p> [3] 李朝青. 單片機(jī)與PC機(jī)網(wǎng)絡(luò)通信技術(shù).北京:北京航空航天大學(xué)出版社,2007 </p><p> [4] 郭惠 吳訊著 單片機(jī)C語言程序設(shè)計.北京:電子工業(yè)出版社,2008 [5] 陳濤著 單片機(jī)應(yīng)用及C51程序設(shè)計.北京:機(jī)械工業(yè)出版社,2011</p><p> [6] 孫近平 張大鵬著 51系列單片機(jī)原理、開發(fā)與應(yīng)用實例.北
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)單片機(jī)課程設(shè)計-雙機(jī)串行通信e
- 單片機(jī)課程設(shè)計---雙機(jī)之間的串行通信設(shè)計
- 單片機(jī)課程設(shè)計--單片機(jī)串行通訊
- 單片機(jī)課程設(shè)計報告--雙機(jī)串行通訊
- 課程設(shè)計--單片機(jī)雙機(jī)通信系統(tǒng)
- 單片機(jī)雙機(jī)通信系統(tǒng)-課程設(shè)計
- 雙機(jī)通信系統(tǒng)單片機(jī)課程設(shè)計
- 單片機(jī)雙機(jī)通信課程設(shè)計報告
- 單片機(jī)串口通信課程設(shè)計-- pc和單片機(jī)的串行雙工通信
- 單片機(jī)的雙機(jī)串口通信-課程設(shè)計
- pc機(jī)與單片機(jī)串行通信課程設(shè)計
- 單片機(jī)課程設(shè)計--基于單片機(jī)的串行通信發(fā)射機(jī)設(shè)計
- 單片機(jī)雙機(jī)通信設(shè)計
- 單片機(jī)課程設(shè)計-雙機(jī)通信的設(shè)計與制作
- 雙單片機(jī)串行通信
- 單片機(jī)串行通信_485
- 單片機(jī)多機(jī)通信課程設(shè)計
- 單片機(jī)多機(jī)通信課程設(shè)計
- 單片機(jī)課程設(shè)計--利用rs-232實現(xiàn)單片機(jī)與pc間的串行通信
- 單片機(jī)秒表單片機(jī)課程設(shè)計
評論
0/150
提交評論