版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)說(shuō)明書</b></p><p> 課程設(shè)計(jì)名稱: 單片機(jī)課程設(shè)計(jì) </p><p> 課程設(shè)計(jì)題目: 單片機(jī)與單片機(jī)之間的串行通訊 </p><p> 學(xué) 院 名 稱: 信息工程學(xué)院 </p><
2、;p> 專業(yè): 電子信息科學(xué)與技術(shù) 班級(jí): </p><p> 學(xué)號(hào): xxx 姓名: xxx </p><p> 評(píng)分: 教師: xxx </p><p> 2012年6月25日</p><p> 電
3、子信息工程專業(yè) 課程設(shè)計(jì)任務(wù)書</p><p> 20 10 -20 11學(xué)年 第 2 學(xué)期 第 17 周- 20 周 </p><p> 注:1、此表一組一表二份,課程設(shè)計(jì)小組組長(zhǎng)一份;任課教師授課時(shí)自帶一份備查。</p><p> 課程設(shè)計(jì)結(jié)束后與“課程設(shè)計(jì)小結(jié)”、“學(xué)生成績(jī)單”一并交院教務(wù)存檔</p><p><b>
4、 摘要</b></p><p> 串行通訊是單片機(jī)的一個(gè)重要應(yīng)用。本設(shè)計(jì)就是利用兩塊單片機(jī)來(lái)完成一個(gè)系統(tǒng),實(shí)現(xiàn)單片機(jī)之間的串行通訊。</p><p> 隨著計(jì)算機(jī)的不斷普及,在我們的周圍可能會(huì)同時(shí)出現(xiàn)多臺(tái)微型計(jì)算機(jī),而且這些計(jì)算機(jī)的牌號(hào),后型號(hào)不同,而且有的格式不兼容。于是利用單片機(jī)串行口實(shí)現(xiàn)不同計(jì)算機(jī)之間的相互通信,以達(dá)到信息或程序的共享是非常有用的。從智能家用電器到工
5、業(yè)上的控制系統(tǒng)都采用了上位機(jī)與下位機(jī)基于串行通信的主從工作方式,這樣就充分利用了微機(jī)分析處理能力強(qiáng)、速度快的特點(diǎn)及下位機(jī)(單片機(jī))面向控制、使用靈活方便的優(yōu)勢(shì)。由于AT09C52系列單片機(jī)具有性能穩(wěn)定、工作可靠、價(jià)格低廉等可特點(diǎn),因此其應(yīng)用相當(dāng)廣泛。AT09C52單片機(jī)中有異步通信串行接口,能方便的構(gòu)成雙機(jī),多機(jī)通訊接口。隨著測(cè)量向自動(dòng)化,智能化,網(wǎng)絡(luò)化方向的發(fā)展。利用多機(jī)通訊構(gòu)成的分布式系統(tǒng)逐漸普及。本實(shí)驗(yàn)就點(diǎn)對(duì)點(diǎn)的雙機(jī)通信進(jìn)行訓(xùn)練。
6、學(xué)習(xí)串口的工作方式,初始化編程,和單片機(jī)與單片機(jī)點(diǎn)對(duì)點(diǎn)通信的編程方法以及硬件電路的設(shè)計(jì)方法。</p><p> 在此基礎(chǔ)上可以進(jìn)一步提高,實(shí)現(xiàn)多機(jī)通信以及單片機(jī)與PC機(jī)的通訊,手機(jī)通過(guò)藍(lán)牙與單片機(jī)通訊,電腦通過(guò)藍(lán)牙與單片機(jī)通訊等一系列功能擴(kuò)展。</p><p> 【關(guān)鍵字】 雙機(jī)串行通訊 AT89C52 異步通訊 功能擴(kuò)展</p><p><b&
7、gt; 目錄</b></p><p><b> 前言1</b></p><p> 第一章、系統(tǒng)功能2</p><p> 1.1 設(shè)計(jì)要求和系統(tǒng)的組成及工作原理2</p><p> 第二章、系統(tǒng)設(shè)計(jì)方案3</p><p><b> 2.1硬件設(shè)計(jì)3<
8、/b></p><p> 2.1.1 AT89C52和RS232說(shuō)明3</p><p> 2..12 雙機(jī)通訊的方案選擇7</p><p><b> 2.1軟件設(shè)計(jì)8</b></p><p> 2.2.1 甲機(jī)程序的編寫說(shuō)明8</p><p> 2.2.2 甲機(jī)程序的編寫說(shuō)
9、明12</p><p> 第三章、調(diào)試與操作19</p><p> 3.1 開發(fā)板調(diào)試19</p><p> 3.2 測(cè)試結(jié)果與分析20</p><p><b> 第四章、結(jié)論21</b></p><p> 附錄一、參考文獻(xiàn)22</p><p> 附
10、錄二、元器件清單23</p><p> 附錄三、 電路總圖24</p><p> 附錄四、 實(shí)物圖25</p><p><b> 前言</b></p><p> 電子科學(xué)技術(shù)是人類在生產(chǎn)斗爭(zhēng)和科學(xué)實(shí)驗(yàn)中發(fā)展起來(lái)的。隨著科學(xué)技術(shù)的發(fā)展和人類的進(jìn)步,電子技術(shù)已經(jīng)成了各種工程技術(shù)的核心,特別是進(jìn)入信息時(shí)代以來(lái),電
11、子技術(shù)更是成了基本技術(shù),其具體應(yīng)用領(lǐng)域涵蓋了通信領(lǐng)域、控制系統(tǒng)、測(cè)試系統(tǒng)、計(jì)算機(jī)等等各行各業(yè)。</p><p> 單片機(jī)之間的數(shù)據(jù)通訊在當(dāng)今社會(huì)應(yīng)用相當(dāng)廣泛,單片機(jī)之間的數(shù)據(jù)通訊。由于52系列單片機(jī)具有性能穩(wěn)定、工作可靠、價(jià)格低廉等特點(diǎn),因此其應(yīng)用相當(dāng)廣泛。一個(gè)52系列的單片機(jī)(如At89c52)內(nèi)部包含有RAM、FLASH ROM、三個(gè)16位的定時(shí)器/計(jì)數(shù)器、一個(gè)通用異步串行通信控制器(UART)等多種資源。
12、但即便如此,在一些相對(duì)復(fù)雜的單片機(jī)應(yīng)用系統(tǒng)中,僅僅一個(gè)單片機(jī)資源還是不夠的,因此而常常需要擴(kuò)充I/O接口、定時(shí)器/計(jì)數(shù)器、串行通信接口、RAM、ROM等。采用通用的標(biāo)準(zhǔn)器件進(jìn)行擴(kuò)充是通常的做法,但將單片機(jī)本身作為一個(gè)通用的擴(kuò)充器件來(lái)使用,也不失為一個(gè)好的方法。在這種情況下,一個(gè)系統(tǒng)中就使用了兩個(gè)或兩個(gè)以上的單片機(jī),而單片機(jī)之間就要通過(guò)互連來(lái)進(jìn)行數(shù)據(jù)通信。52系列的單片機(jī)(以下簡(jiǎn)稱單片機(jī))都帶有串口,利用串口進(jìn)行互連通信極為方便,其各種連
13、接方式在許多書籍和資料上都有介紹,在此不再重述。但如果系統(tǒng)要求擴(kuò)充的資源是對(duì)外連接的串口,或?qū)ο嗷ブg的數(shù)據(jù)傳送有一定的速度要求,則單片機(jī)的串口就不能用作系統(tǒng)內(nèi)兩單片機(jī)的通信接口了。所幸的是,單片機(jī)的并行端口也能相互連接來(lái)進(jìn)行數(shù)據(jù)通信。根據(jù)單片機(jī)端口內(nèi)部結(jié)構(gòu)的</p><p> 本文就是關(guān)于用單片機(jī)與單片機(jī)之間的串行通訊的過(guò)程及基本原理。</p><p><b> 第一章
14、系統(tǒng)功能</b></p><p> 1.1設(shè)計(jì)要求和系統(tǒng)的組成及工作原理</p><p><b> 一.設(shè)計(jì)要求</b></p><p> 1.用RS232串行芯片實(shí)現(xiàn)雙向通訊。</p><p> 2.傳送的數(shù)據(jù)在顯示器上(數(shù)碼管和發(fā)光二極管)顯示。</p><p><b
15、> 二.系統(tǒng)組成</b></p><p><b> 圖1 總體框圖</b></p><p><b> 三.工作原理</b></p><p> 雙機(jī)通信系統(tǒng)通過(guò)甲乙單片機(jī)的串行口來(lái)實(shí)現(xiàn)數(shù)據(jù)的收發(fā)。</p><p> 甲單片機(jī)通過(guò)開關(guān)電路來(lái)啟動(dòng)發(fā)送程序,甲機(jī)當(dāng)開關(guān)按下時(shí)向乙
16、機(jī)發(fā)送一個(gè)數(shù)據(jù),乙機(jī)上蜂嚀器發(fā)出聲音提示有數(shù)據(jù)發(fā)送過(guò)來(lái),乙機(jī)通過(guò)接收中斷來(lái)接收和開關(guān)判斷是否接收甲機(jī)發(fā)送過(guò)來(lái)的數(shù)據(jù),并通過(guò)編寫好的數(shù)據(jù)代碼在8個(gè)發(fā)光二極管上顯示主機(jī)發(fā)送過(guò)來(lái)的數(shù)據(jù)。</p><p> 乙單片機(jī)通過(guò)開關(guān)電路來(lái)啟動(dòng)發(fā)送程序,乙機(jī)給甲機(jī)發(fā)送一數(shù)據(jù),甲機(jī)上蜂嚀器發(fā)出聲音提示有數(shù)據(jù)發(fā)送過(guò)來(lái),甲機(jī)通過(guò)接收中斷來(lái)接收和開關(guān)判斷是否接收乙機(jī)發(fā)送過(guò)來(lái)的數(shù)據(jù),并通過(guò)編寫好的數(shù)據(jù)代碼在8個(gè)發(fā)光二極管上顯示乙機(jī)發(fā)送過(guò)來(lái)
17、的數(shù)據(jù)。</p><p> 第二章 系統(tǒng)設(shè)計(jì)方案</p><p><b> 2.1 硬件設(shè)計(jì)</b></p><p> 2.1.1 AT89C52和RS23說(shuō)明</p><p> 一. At89c52單片機(jī)內(nèi)部有1個(gè)功能很強(qiáng)大的全雙工串行口,可以同時(shí)發(fā)送和接收數(shù)據(jù)。串行口的內(nèi)部有數(shù)據(jù)接收緩沖器和數(shù)據(jù)發(fā)送緩沖器,
18、數(shù)據(jù)接收緩沖器只能讀出不能寫入,數(shù)據(jù)發(fā)送緩沖器只能寫入不能讀出,這兩個(gè)數(shù)據(jù)緩沖器都是用SBUF來(lái)表示,地址都是99H,CPU對(duì)特殊功能寄存器SBUF執(zhí)行寫操作就將數(shù)據(jù)寫入發(fā)送緩沖器,對(duì)SBUF執(zhí)行度操作就是讀出接收緩沖器中的內(nèi)容。特殊功能寄存器SCON參訪串行口的控制狀態(tài)信號(hào),串行口用T1或者T2作為波特率發(fā)生器(發(fā)送和接收時(shí)鐘),特殊功能寄存器PCON的最高位SMOD為串行口波特率的倍率控制位。</p><p>
19、; SCON:串行口控制寄存器</p><p> 寄存器地址98H,位尋址9FH~98H。</p><p> SM0、SM1:串行口工作方式選擇位</p><p> SM2:多機(jī)通信控制位</p><p> REN:允許/禁止串行口接收的控制位</p><p> TB8:在方式2和方式3中,是被發(fā)送的第9位
20、數(shù)據(jù),可根據(jù)需要由軟件置1或清</p><p> 零,也可以作為奇偶校驗(yàn)位,在方式1中是停止位。</p><p> RB8:在方式2和方式3中,是被接收的第9位數(shù)據(jù)(來(lái)自第TB8位);在方式</p><p> 中,RB8收到的是停止位,在方式0中不用。</p><p> TI——串行口發(fā)送中斷請(qǐng)求標(biāo)志位: 當(dāng)發(fā)送完一幀串行數(shù)據(jù)后,由硬
21、件置1;在轉(zhuǎn) </p><p> 向中斷服務(wù)程序后,用軟件清0。</p><p> RI——串行口接收中斷請(qǐng)求標(biāo)志位: 當(dāng)接收完一幀串行數(shù)據(jù)后,由硬件置1;在轉(zhuǎn) 向中斷服務(wù)程序后,用軟件清0。</p><p> SM0、SM1:串行口工作方式選擇位,其組合含義如下所示:</p><p> PCON的D7位作為串行波特率系數(shù)SMOD控制
22、位,PCON不可位尋址,其地址為87H,當(dāng)SMOD=1時(shí),波特率加倍。SMOD在PCON中的位置如下所示:</p><p> RS232近程通訊總線適合于數(shù)據(jù)傳輸速率在0~20000b/s范圍內(nèi)的通信,由于通行設(shè)備廠商都生產(chǎn)與RS-232C制式兼容的通信設(shè)備,因此,它作為一種標(biāo)準(zhǔn),目前已在微機(jī)通信接口中廣泛采用。如圖2所示:</p><p><b> 圖2 DB9<
23、/b></p><p><b> 1.電氣特性</b></p><p> EIA-RS-232C對(duì)電器特性、邏輯電平和各種信號(hào)線功能都作了規(guī)定。</p><p> 在TxD和RxD上:邏輯1(MARK)=-3V~-15V</p><p> 邏輯0(SPACE)=+3~+15V</p><
24、p> 在RTS、CTS、DSR、DTR和DCD等控制線上:</p><p> 信號(hào)有效(接通,ON狀態(tài),正電壓)=+3V~+15V</p><p> 信號(hào)無(wú)效(斷開,OFF狀態(tài),負(fù)電壓)=-3V~-15V</p><p> RS232C與TTL轉(zhuǎn)換:EIA-RS-232C是用正負(fù)電壓來(lái)表示邏輯狀態(tài),與TTL以高低電平表示邏輯狀態(tài)的規(guī)定不同。因此,為了能
25、夠同計(jì)算機(jī)接口或終端的TTL器件連接,必須在EIA-RS-232C與TTL電路之間進(jìn)行電平和邏輯關(guān)系的變換。</p><p> 最大直接傳輸距離說(shuō)明:RS-232C標(biāo)準(zhǔn)規(guī)定,若不使用MODEM,在碼元畸變小于4%的情況下,DTE和DCE之間最大傳輸距離為15m(50英尺。</p><p><b> 2.DB-9連接器</b></p><p>
26、; 使用DB-9連接器,作為提供多功能I/O卡或主板上COM1和COM2兩個(gè)串行接口的連接器。它只提供異步通信的9個(gè)信號(hào)。DB-25型連接器的引腳分配與DB-25型引腳信號(hào)完全不同。因此,若與配接DB-25型連接器的DCE設(shè)備連接,必須使用專門的電纜線。</p><p> 最大直接傳輸距離說(shuō)明:RS-232C標(biāo)準(zhǔn)規(guī)定,若不使用MODEM,在碼元畸變小于4%的情況下,DTE和DCE之間最大傳輸距離為15m(50
27、英尺)。</p><p> 用RS-232總線連接系統(tǒng)有近程通訊方式和遠(yuǎn)程通訊方式兩種,近程通訊是指?jìng)鬏斁嚯x小于15米的通訊,可以用RS-232 電纜直接連接。15米以上的長(zhǎng)距離通訊,需要采用調(diào)制調(diào)解器。</p><p> 當(dāng)計(jì)算機(jī)與終端之間利用RS-232作近程連接時(shí),有幾根線實(shí)現(xiàn)交換連接。本次實(shí)驗(yàn)不需要檢測(cè)數(shù)據(jù)等信號(hào)狀態(tài)的</p><p> RS-232
28、是異步通訊中最廣泛的標(biāo)準(zhǔn)總線,適用于數(shù)據(jù)中端設(shè)備(DTE)和數(shù)據(jù)通訊設(shè)備(DCE)之間的接口。在微機(jī)通訊中,通常使用 的RS-232接口信號(hào)是九根引腳。如圖3:各引腳功能如下:</p><p> 圖3 DB9管腳說(shuō)明</p><p> 用RS-232總線連接系統(tǒng)有近程通訊方式和遠(yuǎn)程通訊方式兩種,近程通訊是指?jìng)鬏斁嚯x小于15米的通訊,可以用RS-232 電纜直接連接。15米以上的長(zhǎng)距
29、離通訊,需要采用調(diào)制調(diào)解器。</p><p> 計(jì)算機(jī)和終端用RS-232連接的交叉圖4如下,圖中“發(fā)送數(shù)據(jù)”與“接收數(shù)據(jù)”是交叉相連的,是得兩臺(tái)設(shè)備都能正常的發(fā)送和接收。</p><p> 圖4 通訊連接 </p><p><b> 數(shù)據(jù)發(fā)送與接收線:</b></p><p> 發(fā)送數(shù)據(jù)(TxD)——
30、通過(guò)TxD終端將串行數(shù)據(jù)發(fā)送到MODEM。</p><p> 接收數(shù)據(jù)(RxD)——通過(guò)RxD線終端接收從MODEM發(fā)來(lái)的串行數(shù)據(jù)。</p><p> 2.1.2 雙機(jī)通訊的方案選擇</p><p><b> 設(shè)計(jì)方案:</b></p><p> 該系統(tǒng)采用主從共兩片AT89C52單片機(jī)來(lái)實(shí)現(xiàn)上位機(jī)對(duì)下位機(jī)的控
31、制,由于是近距離的雙機(jī)通信,我們采用單片機(jī)直接交叉連接的方式,上位機(jī)發(fā)送的數(shù)據(jù)由串行口TXD端輸出,直接由下位機(jī)的串行口數(shù)據(jù)接收端RXD接收。需要注意的是一定要保證主從機(jī)相同的數(shù)據(jù)傳輸速率,即要求設(shè)置相同的波特率。電路分為數(shù)碼管顯示模塊,指示模塊、以及單片機(jī)工作的基本復(fù)位、晶振模塊。</p><p> 甲機(jī)由3個(gè)數(shù)碼管,4個(gè)獨(dú)立鍵盤開關(guān),1個(gè)蜂嚀器組成。</p><p> 乙機(jī)由8個(gè)發(fā)
32、光二極管,一個(gè)蜂嚀器,1個(gè)數(shù)字溫度傳感器DS18B20組成。</p><p> 單片機(jī)上最基本的兩個(gè)電路: 復(fù)位電路(圖5)和晶振電路(圖6)</p><p><b> 圖5 復(fù)位電路</b></p><p><b> 圖6 晶振電路</b></p><p><b> 2.2 軟件
33、設(shè)計(jì)</b></p><p> 本系統(tǒng)的軟件設(shè)計(jì)流程圖。系統(tǒng)設(shè)計(jì)代碼分為以下幾個(gè)部分:初始化串行、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、鍵盤輸入、數(shù)值轉(zhuǎn)換、LED顯示,數(shù)碼管顯示,用keil編譯。</p><p> 甲機(jī)程序設(shè)計(jì)框圖(圖7):</p><p> 圖7 甲程序設(shè)計(jì)框圖</p><p> /*******************
34、***********</p><p> 程序名稱: 雙機(jī)通信甲機(jī)程序</p><p> 實(shí)驗(yàn)地點(diǎn): 信工學(xué)院E404</p><p> ******************************/</p><p> #include<reg51.h></p><p> #define uc
35、har unsigned char</p><p> #define uint unsigned int</p><p> sbit k1=P3^4;</p><p> sbit k2=P3^5;</p><p> sbit k3=P3^6;</p><p> sbit k4=P3^7; /
36、/四個(gè)獨(dú)立鍵盤</p><p> sbit dula=P2^6; //段選</p><p> sbit wela=P2^7; //位選</p><p> sbit beep=P2^3; //蜂鳴器</p><p> uchar wendu,temp;</p><p> unsign
37、ed char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,</p><p> 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //不帶小數(shù)點(diǎn)顯示0到9</p><p> unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6
38、,0xed,0xfd,</p><p> 0x87,0xff,0xef}; // 帶小數(shù)點(diǎn)顯示0到9</p><p> /******************************</p><p> 延時(shí)程序 x (ms) </p><p> *****
39、*************************/</p><p> void delay(uint x)</p><p><b> {</b></p><p><b> char i;</b></p><p> while(x--)</p><p> for(i
40、=0;i<120;i++);</p><p><b> }</b></p><p> /******************************</p><p> 數(shù)碼管顯示溫度值 </p><p> ******************************/</p><p&
41、gt; void display(uint temp)</p><p><b> {</b></p><p> uchar A1,A2,A3;</p><p> if(wendu>=110) //溫度大于31度蜂鳴器發(fā)聲</p><p><b> { </
42、b></p><p><b> beep=0;</b></p><p> delay(50);</p><p><b> beep=1;</b></p><p><b> }</b></p><p> temp=temp+200;<
43、/p><p> A1=temp/100;</p><p> A2=temp%100/10;</p><p> A3=temp%100%10;</p><p><b> dula=1;</b></p><p> P0=table[A1]; //顯示百位</p&
44、gt;<p><b> dula=0;</b></p><p><b> wela=1;</b></p><p> P0=0x7f; //0111 1111 選中第一個(gè)數(shù)碼管</p><p><b> wela=0;</b></p>
45、<p><b> delay(5);</b></p><p><b> dula=1;</b></p><p> P0=table1[A2]; //顯示十位</p><p><b> dula=0;</b></p><p><b&
46、gt; wela=1;</b></p><p> P0=0x7e; //0111 1111 選中第一個(gè)數(shù)碼管</p><p><b> wela=0;</b></p><p><b> delay(5);</b></p><p><b> dula=1
47、;</b></p><p> P0=table[A3]; //顯示個(gè)位</p><p><b> dula=0;</b></p><p><b> wela=1;</b></p><p> P0=0x7b; //0111 1111 選中第一個(gè)數(shù)碼管&l
48、t;/p><p><b> wela=0;</b></p><p><b> delay(5);</b></p><p><b> }</b></p><p> /******************************</p><p> 甲機(jī)
49、向乙機(jī)發(fā)送程序 </p><p> ******************************/</p><p> void com(uchar com)</p><p><b> {</b></p><p><b> SBUF=com;</b></p><p&g
50、t; while(!TI); //是否發(fā)送完</p><p><b> TI=0;</b></p><p><b> }</b></p><p> void main()</p><p> { </p><p><b>
51、 uchar b;</b></p><p> SCON=0x50; //SM0=1,SM1=1,SEN=1</p><p> TMOD=0X20; //定時(shí)器工作于方式一</p><p><b> TH1=0XFD;</b></p><p> TL1
52、=0XFD; //波特率9600</p><p> TR1=1; //啟動(dòng)定時(shí)器</p><p> IE=0X90; //開中斷</p><p> beep=1; //蜂鳴器初始狀態(tài)不響</p><p><b> while(1)<
53、/b></p><p><b> { </b></p><p> if(k1==0) //接收乙機(jī)溫度值顯示</p><p><b> {</b></p><p> while(k4==1)</p><p><b> {</
54、b></p><p> display(wendu);</p><p> delay(10);</p><p><b> } </b></p><p><b> } </b></p><p> if(k2==0) //發(fā)送流水燈指令&l
55、t;/p><p><b> {</b></p><p><b> b=2;</b></p><p><b> com(b);</b></p><p><b> }</b></p><p> if(k3==0) //
56、發(fā)送搖擺燈指令</p><p><b> {</b></p><p><b> b=3;</b></p><p><b> com(b);</b></p><p><b> }</b></p><p> if(k4==0)
57、 //關(guān)閉甲乙機(jī)所有顯示 </p><p><b> {</b></p><p> P0=0XFF; </p><p><b> delay(1);</b></p><p><b> wela=1;</b></p>
58、;<p><b> delay(1);</b></p><p><b> wela=0;</b></p><p><b> b=4;</b></p><p><b> com(b);</b></p><p><b> }&
59、lt;/b></p><p><b> delay(5);</b></p><p><b> }</b></p><p><b> }</b></p><p> /******************************</p><p>
60、; 甲機(jī)從乙機(jī)接收程序 </p><p> ******************************/</p><p> void ert()interrupt 4</p><p><b> {</b></p><p><b> RI=0; </b></p><
61、p> wendu=SBUF;</p><p><b> }</b></p><p> 乙機(jī)程序設(shè)計(jì)框圖(圖8):</p><p><b> 圖8 乙機(jī)設(shè)計(jì)框圖</b></p><p> /******************************</p><p&
62、gt; 程序名稱: 雙機(jī)通信乙機(jī)程序</p><p> 實(shí)驗(yàn)地點(diǎn): 信工學(xué)院E404</p><p> ******************************/</p><p> #include<reg52.h></p><p> #include <intrins.h></p>&
63、lt;p> #define uchar unsigned char</p><p> #define uint unsigned int</p><p> sbit DS=P2^2; //ds18b20片選信號(hào)</p><p> uint temp; // 記錄ds18b20的溫度值</p>&
64、lt;p> sbit k1=P3^4;</p><p> sbit k2=P3^5;</p><p> sbit k3=P3^6;</p><p> sbit k4=P3^7; //四個(gè)獨(dú)立鍵盤</p><p> sbit beep=P2^3;</p><p><b> uchar k
65、;</b></p><p> /******************************</p><p> 延時(shí)程序 x (ms) </p><p> ******************************/</p><p> void delay(uint x)</p><p>&
66、lt;b> {</b></p><p><b> char i;</b></p><p> while(x--)</p><p> for(i=0;i<120;i++);</p><p><b> }</b></p><p> /*****
67、*************************</p><p> send reset and initialization command </p><p> ******************************/</p><p> void dsreset(void) </p><p><b>
68、 {</b></p><p><b> uint i;</b></p><p><b> DS=0;</b></p><p><b> i=103;</b></p><p> while(i>0)i--;</p><p>&l
69、t;b> DS=1;</b></p><p><b> i=4;</b></p><p> while(i>0)i--;</p><p><b> }</b></p><p> /******************************</p>&
70、lt;p> read a bit </p><p> ******************************/</p><p> bit tmpreadbit(void) </p><p><b> {</b></p><p><b> uint i;</b>&l
71、t;/p><p><b> bit dat;</b></p><p> DS=0;i++; //i++ for delay</p><p> DS=1;i++;i++;</p><p><b> dat=DS;</b></p><p> i=8;whi
72、le(i>0)i--;</p><p> return (dat);</p><p><b> }</b></p><p> /******************************</p><p> read a byte date </p><p> *********
73、*********************/</p><p> uchar tmpread(void) </p><p><b> {</b></p><p> uchar i,j,dat;</p><p><b> dat=0;</b></p><p> fo
74、r(i=1;i<=8;i++)</p><p><b> {</b></p><p> j=tmpreadbit();</p><p> dat=(j<<7)|(dat>>1); //讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個(gè)字節(jié)在DAT里</p><p><b> }&l
75、t;/b></p><p> return(dat);</p><p><b> }</b></p><p> /******************************</p><p> write a byte to ds18b20 </p><p> *********
76、*********************/</p><p> void tmpwritebyte(uchar dat) </p><p><b> {</b></p><p><b> uint i;</b></p><p><b> uchar j;</b>&l
77、t;/p><p> bit testb;</p><p> for(j=1;j<=8;j++)</p><p><b> {</b></p><p> testb=dat&0x01;</p><p> dat=dat>>1;</p><p>
78、 if(testb) //write 1</p><p><b> {</b></p><p><b> DS=0;</b></p><p><b> i++;i++;</b></p><p><b> DS=1;</b></p&g
79、t;<p> i=8;while(i>0)i--;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> DS=0; //write 0</p&g
80、t;<p> i=8;while(i>0)i--;</p><p><b> DS=1;</b></p><p><b> i++;i++;</b></p><p><b> }</b></p><p><b> }</b>&
81、lt;/p><p><b> }</b></p><p> /******************************</p><p> DS18B20 begin change </p><p> ******************************/</p><p> vo
82、id tmpchange(void) </p><p><b> {</b></p><p> dsreset();</p><p><b> delay(1);</b></p><p> tmpwritebyte(0xcc); // address all drivers on bus
83、</p><p> tmpwritebyte(0x44); // initiates a single temperature conversion</p><p><b> }</b></p><p> /******************************</p><p> get the tem
84、perature </p><p> ******************************/</p><p> uint tmp() </p><p><b> {</b></p><p><b> float tt;</b></p><
85、;p> uchar a,b;</p><p> dsreset();</p><p><b> delay(1);</b></p><p> tmpwritebyte(0xcc);</p><p> tmpwritebyte(0xbe);</p><p> a=tmpread()
86、;</p><p> b=tmpread();</p><p><b> temp=b;</b></p><p> temp<<=8; //two byte compose a int variable</p><p> temp=temp|a;</p><
87、;p> tt=temp*0.0625;</p><p> temp=tt*10+0.5;</p><p> return (temp-200);</p><p><b> }</b></p><p> /******************************</p><p>
88、 乙機(jī)向甲機(jī)發(fā)送程序 </p><p> ******************************/</p><p> void com(uchar com)</p><p><b> {</b></p><p><b> SBUF=com;</b></p><p
89、> while(!TI);</p><p><b> TI=0;</b></p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> uchar temp,a,
90、i;</p><p> SCON=0x50; //SM0=1,SM1=1,SEN=1</p><p> TMOD=0X20;//定時(shí)器工作于方式一</p><p> TH1=0XFD;//波特率9600</p><p><b> TL1=0XFD;</b>
91、;</p><p> TR1=1;//啟動(dòng)定時(shí)器</p><p> IE=0X90;//開中斷</p><p> beep=1;//蜂鳴器初始狀態(tài)不響</p><p><b> while(1)</b></p><p><b> { <
92、;/b></p><p> if(k1==0)//采集當(dāng)前溫度值并向甲機(jī)發(fā)送</p><p><b> {</b></p><p> while(k2==1&&k3==1&&k4==1)</p><p><b> {</b></p>
93、<p> tmpchange();</p><p><b> delay(5);</b></p><p> for(a=10;a>0;a--)</p><p><b> { </b></p><p> com(tmp());</p><p>
94、<b> delay(1);</b></p><p><b> }</b></p><p><b> } </b></p><p> } </p><p> if(k==2) //接收甲機(jī)流水燈指令并用蜂
95、鳴器提示</p><p><b> {</b></p><p><b> while(1)</b></p><p><b> {</b></p><p><b> beep=0;</b></p><p> if(k1==0
96、) //決定接收流水燈指令并關(guān)閉蜂鳴器</p><p><b> { </b></p><p><b> beep=1;</b></p><p><b> break;</b></p><p><b> }</b></p>
97、<p><b> }</b></p><p> while(1) //顯示流水燈現(xiàn)象</p><p><b> {</b></p><p> temp=0x7f;</p><p> P1=temp; </p><p> for(i=
98、1;i<8;i++) </p><p><b> {</b></p><p> a=temp>>i;</p><p><b> P1=a; </b></p><p> delay(50);</p><p><b> }</b&g
99、t;</p><p> if(k==4) //關(guān)閉所有顯示</p><p><b> { </b></p><p><b> P1=0x0ff;</b></p><p><b> beep=0;</b></p><p> delay
100、(50);</p><p><b> beep=1;</b></p><p><b> break;</b></p><p><b> } </b></p><p><b> }</b></p><p><b>
101、 }</b></p><p> if(k==3) //接收甲機(jī)搖擺燈指令并用蜂鳴器提示</p><p><b> {</b></p><p><b> while(1)</b></p><p><b> {</b></p><p&g
102、t;<b> beep=0;</b></p><p> if(k1==0) //決定接收搖擺燈指令并關(guān)閉蜂鳴器</p><p><b> { </b></p><p><b> beep=1;</b></p><p><b> break;</b&g
103、t;</p><p><b> }</b></p><p><b> }</b></p><p> while(1)//顯示搖擺燈現(xiàn)象</p><p><b> {</b></p><p> delay(50);</p>&l
104、t;p> P1=0x55;</p><p> delay(50);</p><p><b> P1=0x0aa;</b></p><p> if(k==4) //關(guān)閉所有顯示</p><p><b> { </b></p><p><b&g
105、t; P1=0x0ff;</b></p><p><b> beep=0;</b></p><p> delay(50);</p><p><b> beep=1;</b></p><p><b> break;</b></p><p&
106、gt;<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p>
107、/******************************</p><p> 乙機(jī)從甲機(jī)接收程序 </p><p> ******************************/</p><p> void ert()interrupt 4</p><p><b> {</b></p>&l
108、t;p><b> RI=0; </b></p><p><b> k=SBUF;</b></p><p><b> }</b></p><p> 最后用Proteus畫好原理圖,把編譯好的甲乙機(jī)程序HEX文件,下載到原理圖里,點(diǎn)擊運(yùn)行仿真,查看效果!</p><p&g
109、t;<b> 第三章 調(diào)試與操作</b></p><p><b> 3.1開發(fā)板調(diào)試</b></p><p> 通過(guò)Proteus仿真(附錄三)得出甲乙程序在理論上已經(jīng)通過(guò),接下來(lái)通過(guò)下載軟件STC-ISP把甲乙機(jī)程序分別下載到兩塊單片機(jī)里,上電調(diào)試。</p><p> 首先進(jìn)行甲機(jī)向乙機(jī)發(fā)送數(shù)據(jù),按下流水燈按鈕,
110、這時(shí)乙機(jī)蜂嚀器發(fā)出聲音提示有數(shù)據(jù)傳送過(guò)來(lái),按下乙機(jī)接收按鈕,這是可以看到乙機(jī)上的八個(gè)發(fā)光二極管顯示流水燈的現(xiàn)象(圖9所示)。</p><p><b> 圖9 流水燈現(xiàn)象</b></p><p> 按下甲機(jī)上的關(guān)閉所有顯示按鈕,再發(fā)送要搖擺燈按鈕這時(shí)乙機(jī)蜂嚀器發(fā)出聲音提示有數(shù)據(jù)傳送過(guò)來(lái),按下乙機(jī)接收按鈕,這是可以看到乙機(jī)上的八個(gè)發(fā)光二極管顯示搖擺燈的現(xiàn)象(圖10所示
111、)。</p><p><b> 圖10 搖擺燈現(xiàn)象</b></p><p> 甲機(jī)向乙機(jī)發(fā)送的數(shù)據(jù)可以在乙機(jī)上顯示出來(lái)的,然后進(jìn)行乙機(jī)向甲機(jī)發(fā)送乙機(jī)通過(guò)DS18B20采集到的溫度值傳輸?shù)郊讬C(jī)上顯示。按下乙機(jī)發(fā)送溫度值按鈕,這時(shí)甲機(jī)蜂嚀器發(fā)出聲音提示有數(shù)據(jù)傳送過(guò)來(lái),按下甲機(jī)接收按鈕,這是可以看到甲機(jī)上的數(shù)碼管上顯示溫度值的現(xiàn)象(圖11所示)。</p>
112、<p><b> 圖11 溫度顯示</b></p><p> 這時(shí)如果用手觸摸乙機(jī)上數(shù)字溫度傳感器DS18B20,可以發(fā)現(xiàn)甲機(jī)上的顯示數(shù)字不斷上升,當(dāng)溫度上升超過(guò)程序設(shè)置的31度時(shí),甲機(jī)上的蜂嚀器發(fā)出報(bào)警信號(hào)!并且溫度不斷閃爍。</p><p> 3.2測(cè)試結(jié)果與分析</p><p> 通過(guò)甲乙相互通信在開發(fā)板上的現(xiàn)象和測(cè)量的
113、結(jié)果,可以知道甲乙機(jī)程序開發(fā)板上是可行的。甲機(jī)傳送的數(shù)據(jù)通過(guò)乙機(jī)八個(gè)發(fā)光二極管顯示,結(jié)果可以看到流水燈和搖擺燈現(xiàn)象;乙機(jī)傳送的數(shù)據(jù)通過(guò)甲機(jī)數(shù)碼管來(lái)顯示,結(jié)果可以知道乙機(jī)當(dāng)時(shí)采集到的溫度是29.9度。</p><p><b> 第四章 總結(jié)</b></p><p> 一 .設(shè)計(jì)中注意事項(xiàng)</p><p> 1.串行通信,使用的晶振是11.0
114、5926MHZ,波特率是9600 兩塊板子要嚴(yán)格一致。</p><p> 2.程序下載時(shí)通過(guò)P3.1(TXD)下載進(jìn)去的,因此下載時(shí)此端口不用被占用。</p><p> 3.雙機(jī)通信的基本原理是對(duì)RXD和TXD操作,RS23最大通信距離為15m。</p><p> 4.如果之間用三根線 TXD RXD GND連接兩個(gè)單片機(jī),這時(shí)候的傳輸距離在1m 內(nèi),
115、距離越大干擾越大,因?yàn)閷?dǎo)線存在電阻。</p><p> 5.由于SBUF是8位的,最大是256,如果乙機(jī)直接傳輸必然,甲機(jī)顯示的溫度就不是正常的溫度!這時(shí)在乙的程序中溫度值減去200,甲的程序加回200就是!</p><p><b> 二.設(shè)計(jì)體會(huì)和收獲</b></p><p> 最初選擇雙機(jī)串行通信這個(gè)實(shí)驗(yàn)時(shí),由于從未接觸過(guò)這類設(shè)計(jì),感
116、到新鮮的同時(shí)不乏挑戰(zhàn)性?,F(xiàn)在終于將它完成了,感到受益頗多。第一,這是一份考驗(yàn)我們自覺(jué)性、動(dòng)手能力與協(xié)作意識(shí)的任務(wù)。在長(zhǎng)達(dá)二個(gè)禮拜的時(shí)間里,我們不斷發(fā)現(xiàn)自身不足也不斷自我完善。第二,未知并不可怕,可怕的是因未知而止步。我們?cè)谡n堂上所學(xué)的知識(shí)是非常有限的,這次的課程設(shè)計(jì)就是個(gè)很好的體現(xiàn)。很多函數(shù)的運(yùn)用我們還沒(méi)掌握,一些簡(jiǎn)單的循環(huán)語(yǔ)句都可能出錯(cuò)。實(shí)踐后才能真的知道我們真正掌握了多少。第三,團(tuán)結(jié)就是力量一點(diǎn)都不假,三個(gè)臭皮匠頂一個(gè)諸葛亮。在團(tuán)組
117、合作時(shí)我們更便于互相取長(zhǎng)補(bǔ)短,相互討論,效果很好。</p><p><b> 附錄一 參考文獻(xiàn)</b></p><p> 1《C語(yǔ)言程序設(shè)計(jì)》清華大學(xué)出版社;譚浩強(qiáng)主編 1999.12</p><p> 2《C語(yǔ)言程序設(shè)計(jì)技巧及應(yīng)用》 上海科學(xué)普及出版社;陳進(jìn)編著 1992
118、.6</p><p> 3《微型計(jì)算機(jī)原理與應(yīng)用》(第二版)西安電子科技大學(xué)出版社;王永山,楊宏五, 楊嬋娟編著 1999.12</p><p> 4《單片機(jī)原理及應(yīng)用教程》北京大學(xué)出版社;范立南,謝子殿編著 2007.8</p><p> 5.《51單片機(jī)C語(yǔ)言應(yīng)用程序設(shè)計(jì)實(shí)例精講》(第二版)電子工業(yè)出版社;戴佳 戴衛(wèi)恒編著 2
119、008.12 </p><p> 6.《單片機(jī)語(yǔ)言C51典型應(yīng)用設(shè)計(jì)》 人民郵電出版社;劉文濤編著 2005.10 </p><p> 7.《μVision2單片機(jī)應(yīng)用程序開發(fā)指南》科學(xué)出版社;尹勇 李宇編著 2005.2 </p><p><b> 附錄二 元器件清單</b></p>&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)單片機(jī)課程設(shè)計(jì)-雙機(jī)串行通信
- 課程設(shè)計(jì)--單片機(jī)雙機(jī)通信系統(tǒng)
- 單片機(jī)雙機(jī)通信系統(tǒng)-課程設(shè)計(jì)
- 雙機(jī)通信系統(tǒng)單片機(jī)課程設(shè)計(jì)
- 單片機(jī)單片機(jī)課程設(shè)計(jì)-雙機(jī)串行通信e
- 單片機(jī)的雙機(jī)串口通信-課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告--雙機(jī)串行通訊
- 單片機(jī)課程設(shè)計(jì)---雙機(jī)之間的串行通信設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-雙機(jī)通信的設(shè)計(jì)與制作
- 單片機(jī)雙機(jī)通信設(shè)計(jì)
- 單片機(jī)雙機(jī)通信系統(tǒng)設(shè)計(jì)【開題報(bào)告】
- 單片機(jī)多機(jī)通信課程設(shè)計(jì)
- 單片機(jī)多機(jī)通信課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告
- 《單片機(jī)課程設(shè)計(jì)》報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告
- 雙機(jī)通信課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論