2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩26頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《單片機(jī)應(yīng)用與仿真訓(xùn)練》設(shè)計(jì)報(bào)告</p><p><b>  單片機(jī)多機(jī)通信</b></p><p>  姓 名: </p><p>  學(xué) 號(hào): </p><p>  專業(yè)班級(jí):

2、 </p><p>  指導(dǎo)老師:    </p><p>  所在學(xué)院: </p><p>  2011年7月 5 日</p><p><b>  摘要</b></p><p>  本設(shè)計(jì)是基于AT89S52單片機(jī)溫度檢測(cè)傳輸?shù)娜龣C(jī)通信

3、系統(tǒng),有三個(gè)單片機(jī)組成,其中一個(gè)作為主機(jī)(上位機(jī)),控制并負(fù)責(zé)接收來(lái)自從機(jī)1號(hào)和從機(jī)2號(hào)采集的數(shù)據(jù)信息,并顯示在數(shù)碼管上。由主機(jī)發(fā)送控制信息(通過(guò)按鍵控制),確定是接收來(lái)自想要得到各從機(jī)數(shù)據(jù)。從機(jī)1號(hào)和2號(hào)是數(shù)據(jù)采集模塊,用來(lái)采集室內(nèi)或室外溫度信息,并通過(guò)通信協(xié)議傳送給主機(jī)。為保證三機(jī)通信可靠性,通信口要有識(shí)別功能,51單片機(jī)串行口控制寄存器SCON中SM2位正是滿足這一要求而設(shè)置的。當(dāng)串行口以工作方式三工作時(shí),接收和發(fā)送的信息都是11

4、位數(shù)據(jù),既包含SBUF寄存器傳送的8位數(shù)據(jù),還包括SCON中可編程第9位數(shù)據(jù)即TB8或RB8,主機(jī)可通過(guò)設(shè)定TB8是0或1,來(lái)區(qū)別發(fā)送的是地址還是數(shù)據(jù)。從機(jī)都先將SCON中的SM2設(shè)置為1,待主機(jī)發(fā)送地址信息,與本身的地址對(duì)照,如果是,則令從機(jī)SM2為0,準(zhǔn)備接收主機(jī)信息并發(fā)送溫度信息,如果不是,則繼續(xù)等待。主機(jī)通過(guò)中斷口接收數(shù)據(jù),處理后顯示在數(shù)碼管上。此次設(shè)計(jì)由于只有一個(gè)18b20溫度傳感器,這里用三個(gè)任意的數(shù)據(jù)代替從機(jī)2采集溫度數(shù)據(jù)

5、,由于傳輸距離較短,這里不用MAX232,直接將主機(jī)的發(fā)送端接從機(jī)</p><p><b>  1概述</b></p><p><b>  1.1設(shè)計(jì)概述</b></p><p>  目前在通信領(lǐng)域里,單片機(jī)一對(duì)一通信已經(jīng)不能滿足人們?cè)O(shè)計(jì)的需要,多機(jī)通信已經(jīng)成為主要通信方式。單片機(jī)多機(jī)通信是指兩臺(tái)以上的單片機(jī)組成的網(wǎng)絡(luò)結(jié)構(gòu)

6、,可以通過(guò)串行通信方式共同實(shí)現(xiàn)對(duì)某一過(guò)程的控制。目前單片機(jī)多機(jī)通信形式較多,常見的有星形、環(huán)形,串行總線型通信和主從式多機(jī)型四種。本設(shè)計(jì)采用的是主從式多機(jī)型,它是一種分散性網(wǎng)絡(luò)結(jié)構(gòu),具有接口簡(jiǎn)單、使用靈活等優(yōu)點(diǎn)。下圖為主從式多機(jī)通信示意圖:</p><p><b>  多機(jī)通信示意圖</b></p><p>  1.2多機(jī)通信基本原理</p><p

7、>  51用于多機(jī)通信時(shí)必須工作在方式2或方式3。以方式3為例,每發(fā)送一幀數(shù)據(jù)為11位:1位起始位(0),8位數(shù)據(jù)位和1位停止位(1),附加的第9位數(shù)據(jù)在非多機(jī)系統(tǒng)中為奇偶校驗(yàn)位,在發(fā)送端有SCON的TB8產(chǎn)生,在接收端傳送到開關(guān)電源模塊SCON的RB8。它還可設(shè)定為“0”或“1”作為在MTD2002多機(jī)通信中區(qū)分?jǐn)?shù)據(jù)幀(0標(biāo)志)還是地址幀(1標(biāo)志)的標(biāo)志。在MCS-51多機(jī)系統(tǒng)中有以下協(xié)議:所有的各從機(jī)均處于聽命狀態(tài),即SM2=

8、1,以便接收主機(jī)發(fā)來(lái)的地址,當(dāng)接收到一幀信息的RB8為“1”時(shí),表示主機(jī)發(fā)送來(lái)的是地址信息,所有的從機(jī)均發(fā)生接收中斷,否則中斷屏蔽。當(dāng)一從機(jī)進(jìn)入相應(yīng)的中斷服務(wù)程序,把接收到的地址和本機(jī)的地址比較,如果相符合就令其SM2=0,并向主機(jī)發(fā)回本機(jī)地址以作應(yīng)答,該從機(jī)就與主機(jī)聯(lián)通,準(zhǔn)備接收主機(jī)發(fā)來(lái)的命令或數(shù)據(jù)信息,而其他的未被尋址從機(jī)保持SM2=1并退出各自的中斷服務(wù)程序。這樣,只有SM2=0的從機(jī)才能接收到主機(jī)發(fā)送來(lái)的數(shù)據(jù)信息,順利實(shí)現(xiàn)地址幀

9、和數(shù)據(jù)幀的分離。被尋址從機(jī)在通信完成后重新使SM2=1,并退出中斷服務(wù)程序,等待下次通信。</p><p><b>  1.3 通信協(xié)議</b></p><p>  要實(shí)現(xiàn)單片機(jī)和PC機(jī)的正常通信,必須正確設(shè)定它們兩者之間的通信方式,保證雙方都用相同的波特率、起始位、停止位、奇偶校驗(yàn)位,并且要建立雙方通信的應(yīng)答信號(hào)。</p><p>  單片機(jī)

10、既可工作在同步移位寄存器方式下也可工作在UART(通用異步收發(fā)器)下。串行口的通信方式是由特殊功能寄存器SCON來(lái)控制的。其各控制定義如下:</p><p>  SM0,SM1:工作模式設(shè)定位;SM2:允許使用方法2、3多機(jī)通信控制位;RB8:接收數(shù)據(jù)第9位;TB8:發(fā)送數(shù)據(jù)第9位;TI:發(fā)送中斷標(biāo)志;RI:接收中斷標(biāo)志。本文中工作方式為3,即9位UART定時(shí)器T1作為波特率發(fā)生器。</p><

11、;p>  1)串行通信波特率為9600bps;</p><p>  2)幀格式為8位數(shù)據(jù)位,一位起始位,一位可編程的第9位(即發(fā)送和接收的地址/數(shù)據(jù)位的標(biāo)志位),一位停止位;</p><p>  3)主機(jī)和從機(jī)遵循主從原則,主機(jī)用呼叫方式選擇從機(jī),數(shù)據(jù)在主機(jī)和從機(jī)之間雙向傳遞,各從機(jī)之間的相互通信需通過(guò)主機(jī)作為中介;</p><p>  4)主從機(jī)之間還應(yīng)傳送

12、一些供它們識(shí)別的命令和狀態(tài)字,如以‘c’表示主機(jī)發(fā)送從機(jī)接收命令,以‘d’表示從機(jī)發(fā)送主機(jī)接收命令等。</p><p>  2系統(tǒng)總體方案及硬件設(shè)計(jì)</p><p><b>  2.1總體設(shè)計(jì)方案</b></p><p>  多機(jī)通信模塊共有四個(gè)基本模塊組成,一是主單片機(jī),主要功能是控制發(fā)送命令和接受從機(jī)發(fā)送的數(shù)據(jù);二是從單片機(jī)1,負(fù)責(zé)采集溫度

13、數(shù)據(jù),并發(fā)送到主機(jī);三是從機(jī)2,功能作用同上,但也可以是其他數(shù)據(jù),比如空氣空氣濕度、水分、相關(guān)氣體含量等;四是顯示模塊,本設(shè)計(jì)采用數(shù)碼管顯示,數(shù)碼管便宜簡(jiǎn)單、編程容易、易控制,同時(shí)硬件電路比較好設(shè)計(jì)等。下圖為總體設(shè)計(jì)框圖:</p><p><b>  總體設(shè)計(jì)方案框圖</b></p><p><b>  2.2硬件電路設(shè)計(jì)</b></p&g

14、t;<p>  單片機(jī)最小系統(tǒng)有時(shí)鐘電路、復(fù)位電路、電源電路組成,如下圖</p><p><b>  時(shí)鐘電路:</b></p><p>  單片機(jī)工作時(shí),是一條一條地從ROM中取指令,然后一步一步地執(zhí)行。單片機(jī)訪問一次存儲(chǔ)器的時(shí)間,稱之為一個(gè)機(jī)器周期,這是一個(gè)時(shí)間基準(zhǔn)?!獋€(gè)機(jī)器周期包括12個(gè)時(shí)鐘周期。如果一個(gè)單片機(jī)選擇了12MHz晶振,它的時(shí)鐘周期是1

15、/12us,它的一個(gè)機(jī)器周期是12×(1/12)us,也就是1us。沒有晶振,就沒有時(shí)鐘周期,沒有時(shí)鐘周期,就無(wú)法執(zhí)行程序代碼,單片機(jī)就無(wú)法工作。旁邊的兩個(gè)電容叫負(fù)載電容。一般單片機(jī)的晶振工作于并聯(lián)諧振狀態(tài),它是根據(jù)晶振廠家提供的晶振要求負(fù)載電容選值的。晶振的頻率就是在它提供的負(fù)載電容下測(cè)得的,能最大限度的保證頻率值的誤差。兩個(gè)電容的取值都是相同的,或者說(shuō)相差不大,如果相差太大,容易造成諧振的不平衡,容易造成停振或者干脆不起振

16、。</p><p><b>  復(fù)位電路:</b></p><p><b>  上電復(fù)位電路</b></p><p>  上圖是用作上電復(fù)位用的,VCC一上電,由于電容兩端電壓不能突變,所以RST上為高電平,然后電容放電,RST就為低電平了,放電時(shí)間為1/(R10*C),這個(gè)時(shí)間應(yīng)該大于三個(gè)晶振周期。而那個(gè)開關(guān)的作用就是手

17、動(dòng)復(fù)位用的了。</p><p><b>  電源電路:</b></p><p>  電源電路見最小系統(tǒng)中的電源即是,較簡(jiǎn)單。</p><p><b>  顯示電路:</b></p><p>  顯示電路由四位共陰數(shù)碼管組成,其中位選由單片機(jī)P2口提供,段選由P0(P0口已上拉電阻)口提供,其中位選處

18、加限流電阻。</p><p><b>  溫度采集電路:</b></p><p><b>  Vcc</b></p><p><b>  DA</b></p><p><b>  GND</b></p><p>  18B20傳感器

19、是獨(dú)特的一線接口,只需要一條口線通信,簡(jiǎn)化了分布式溫度傳感應(yīng)用 無(wú)需外部元件 可用數(shù)據(jù)總線供電,電壓范圍為3.0 V至5.5 V 無(wú)需備用電源 測(cè)量溫度范圍為-55 ° C至+125 ℃ 。根據(jù)DS18B20的通訊協(xié)議,主機(jī)(單片機(jī))控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過(guò)三個(gè)步驟:每一次讀寫之前都要對(duì)DS18B20進(jìn)行復(fù)位操作,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主

20、CPU將數(shù)據(jù)線下拉500微秒,然后 釋放,當(dāng)DS18B20收到信號(hào)后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功。</p><p><b>  傳輸電路:</b></p><p>  上圖為MAX232電平轉(zhuǎn)換芯片電路,其主要特點(diǎn)是:</p><p>  符合所有的RS-232C技術(shù)標(biāo)準(zhǔn)。</

21、p><p>  只需要單一 +5V電源供電。</p><p>  片載電荷泵具有升壓、電壓極性反轉(zhuǎn)能力,能夠產(chǎn)生+10V和-10V電壓V+、V- 。</p><p>  功耗低,典型供電電流5mA 。</p><p>  內(nèi)部集成2個(gè)RS-232C驅(qū)動(dòng)器 。6、高集成度,片外最低只需4個(gè)電容即可工作。</p><p>  

22、由于本次通信是單片機(jī)之間的通信,距離較近,此次設(shè)計(jì)過(guò)程中沒用,直接將主機(jī)的發(fā)射口接從機(jī)接收口,主機(jī)接收口連接從機(jī)發(fā)射口。</p><p><b>  3軟件設(shè)計(jì)</b></p><p><b>  3.1控制流程圖</b></p><p>  多機(jī)溫度檢測(cè)系統(tǒng)設(shè)計(jì)流程圖</p><p>  主機(jī)發(fā)送

23、控制命令,確定由哪一個(gè)從機(jī)傳送采集的溫度數(shù)據(jù),然后經(jīng)過(guò)處理,顯示在數(shù)碼管上。</p><p>  3.2串行口采集步驟</p><p>  主機(jī)發(fā)送信息,可以傳送到各個(gè)從機(jī)或指定從機(jī),各從機(jī)發(fā)送的信息只能被主機(jī)接收。</p><p>  多機(jī)通信(關(guān)鍵是地址幀的識(shí)別)</p><p>  主機(jī)發(fā)送:地址幀、數(shù)據(jù)幀的鑒別是通過(guò)第9位數(shù)據(jù)確定:T

24、B8=1,地址幀,TB8=0,數(shù)據(jù)幀;從機(jī)接收:各從機(jī)串行口工作在方式2、方式3下;多機(jī)通信標(biāo)志SM2(SCON.5)=1;檢查接收到的第9位RB8(SCON.2),當(dāng) RB8=1:地址幀,將地址裝入SBUF,置位RI,發(fā)出接收中斷請(qǐng)求;判斷主機(jī)發(fā)送地址是否與本機(jī)相符,若相符,則將從機(jī)SM2清0(變成直通方式),準(zhǔn)備接收其后傳送來(lái)的數(shù)據(jù)。RB8=0:數(shù)據(jù)幀,對(duì)SM2=1,RB8=0的從機(jī),接收數(shù)據(jù)丟棄,而對(duì)SM2=0的從機(jī):直通方式,不

25、論RB8是0還是1,都將接受到的數(shù)據(jù)送SBUF,并發(fā)出中斷請(qǐng)求。</p><p>  多機(jī)通信的過(guò)程總結(jié)如下:</p><p> ?。?)全部從機(jī)串行口工作方式初始化為2或3,置位SM2,允許中斷;</p><p> ?。?)主機(jī)置位TB8,發(fā)送要尋址的從機(jī)地址;</p><p>  (3)所有的從機(jī)均接收主機(jī)發(fā)送的地址,進(jìn)入中斷進(jìn)行地址比較

26、;</p><p>  (4)確認(rèn)尋址從機(jī),自身SM2清0,向主機(jī)返回地址供主機(jī)核對(duì);</p><p> ?。?)主機(jī)核對(duì)無(wú)誤,向被尋址從機(jī)發(fā)送發(fā)送命令,通知從機(jī)進(jìn)行一對(duì)一數(shù)據(jù)通信。</p><p><b>  3.3軟件流程圖</b></p><p><b>  PROTEUS仿真</b><

27、/p><p><b>  從機(jī)1顯示如下:</b></p><p>  按下開關(guān)后,主機(jī)發(fā)送從機(jī)A地址,從機(jī)A收到地址和自己相比較,如果正確,則回應(yīng)主機(jī),然后發(fā)送溫度數(shù)據(jù),如果不正確,則繼續(xù)等待。</p><p>  從機(jī)B溫度顯示如下:</p><p>  按下開關(guān)后,主機(jī)發(fā)送從機(jī)B地址,從機(jī)B收到地址和自己相比較,如果正

28、確,則回應(yīng)主機(jī),然后發(fā)送溫度數(shù)據(jù),如果不正確,則繼續(xù)等待。</p><p><b>  課程設(shè)計(jì)體會(huì)</b></p><p>  通過(guò)本次課程設(shè)計(jì),進(jìn)一步熟悉了單片機(jī)編程原理和數(shù)字控制電路技術(shù)的相關(guān)知識(shí),使自己所學(xué)的理論知識(shí)得到鞏固,并充分認(rèn)識(shí)到了自己所學(xué)的專業(yè)知識(shí)的實(shí)用性和重要性,同時(shí)對(duì)Proteuls操作更加熟練。</p><p>  過(guò)程

29、中遇到了一些困難,如:多機(jī)通信協(xié)議部分地址和數(shù)據(jù)的如何安排發(fā)送等,顯示電路中的驅(qū)動(dòng)是否需要驅(qū)動(dòng)等問題。經(jīng)過(guò)查找相關(guān)資料和科技文獻(xiàn),和電子發(fā)燒友的同學(xué)們交流,一步步解決所遇到的困難。但是在解決這些問題的過(guò)程無(wú)疑是對(duì)自己自身專業(yè)素質(zhì)的一種提高,同時(shí)也加深自己對(duì)專業(yè)技術(shù)的認(rèn)識(shí)。這次課程設(shè)計(jì),使我看到自身的不足和缺點(diǎn),也使我學(xué)到了如何克服電子電路設(shè)計(jì)時(shí)的困難,希望今后類似這樣的課程設(shè)計(jì)會(huì)更多,讓我多一些機(jī)會(huì)鍛煉自己的創(chuàng)新能力!</p>

30、;<p><b>  參考文獻(xiàn):</b></p><p>  [1] 康華光.電子技術(shù)基礎(chǔ)(模擬部分)(第五版).北京:高等教育出版社,2006.</p><p>  [2] 康華光.電子技術(shù)基礎(chǔ)(數(shù)字部分)(第五版).北京:高等教育出版社,2006.</p><p>  [3]單片機(jī)原理及應(yīng)用技術(shù)(第一版).中國(guó)礦業(yè)大學(xué)出版社,

31、2008</p><p>  附件1:主機(jī)A源程序代碼</p><p>  #include <reg51.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  uchar ch[]={0

32、x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};</p><p>  uchar ch1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};</p><p>  uchar Mode;</p><p>  uchar m1,m2,m3,m4;</p&g

33、t;<p>  sbit P10 = P1^0;</p><p>  sbit P13 = P1^3;</p><p>  sbit P17 = P1^7;</p><p>  sbit P20 = P2^0;</p><p>  sbit P21 = P2^1;</p><p>  sbit P23 =

34、 P2^3;</p><p>  sbit P22 = P2^2;</p><p>  sbit P24 = P2^4;</p><p>  sbit P25 = P2^5;</p><p>  sbit key=P1^4;</p><p>  sbit key0=P1^2;</p><p> 

35、 void UART_init()</p><p><b>  {</b></p><p>  TMOD = 0x20;</p><p>  TH1 = 0xfd;</p><p>  TL1 = 0xfd;</p><p><b>  TR1 = 1;</b></p&

36、gt;<p>  SCON = 0xd0;</p><p><b>  ES = 1;</b></p><p><b>  EX0 = 1;</b></p><p>  IT0 = 1; //INT0下跳觸發(fā)</p><p><b>  EA = 1;</b>&l

37、t;/p><p><b>  TI = 0;</b></p><p><b>  }</b></p><p>  void DelayMs(int ms)</p><p><b>  {</b></p><p><b>  uchar i;<

38、/b></p><p>  while(ms--) </p><p>  for(i=0; i<120; i++);</p><p><b>  }</b></p><p>  void putc_to_SerialPort(uchar c)</p><p><b>  {&

39、lt;/b></p><p><b>  SBUF = c;</b></p><p>  while(TI == 0);</p><p><b>  TI = 0;</b></p><p><b>  }</b></p><p>  void Ma

40、sterControl(unsigned char Addr)//, unsigned char Comd)</p><p><b>  {</b></p><p><b>  TB8 = 1;</b></p><p>  putc_to_SerialPort(Addr);</p><p>  De

41、layMs(50);</p><p><b>  TB8 = 0;</b></p><p><b>  }</b></p><p>  void delay(int us) </p><p>  { int s;</p><p>  for ( s=0; s<us;

42、 s++);</p><p><b>  }</b></p><p>  void disp()</p><p><b>  { </b></p><p>  //int t1,t2, t0;</p><p>  P0 = 0xff;</p><p>

43、  P0 = ch[m1];</p><p><b>  P23=0;</b></p><p>  delay(200);</p><p><b>  P23=1;</b></p><p>  P0 = 0xff;</p><p>  P0= ch1[m2];</p&g

44、t;<p><b>  P22=0;</b></p><p>  delay(200);</p><p><b>  P22=1;</b></p><p>  P0 = 0xff;</p><p>  P0 = ch[m3];</p><p><b>

45、  P24=0;</b></p><p>  delay(200);</p><p><b>  P24=1;</b></p><p>  P0 = 0xff;</p><p>  P0 = ch[0];</p><p><b>  P20=0;</b></

46、p><p>  delay(200);</p><p><b>  P20=1;</b></p><p><b>  }</b></p><p>  com_int(void) interrupt 4</p><p><b>  {</b></p>

47、;<p>  uchar i,k;</p><p><b>  ES=0;</b></p><p><b>  if(RI==1)</b></p><p><b>  {</b></p><p><b>  RI = 0;</b></p

48、><p>  if(SBUF=='b')</p><p><b>  {</b></p><p><b>  i=i+1; </b></p><p><b>  }else</b></p><p>  if(SBUF=='d

49、9;)</p><p><b>  {</b></p><p><b>  k=k+1;</b></p><p>  }else if(i==1)</p><p><b>  {</b></p><p><b>  m1=0;</b&g

50、t;</p><p><b>  m1=SBUF;</b></p><p><b>  i=i+1;</b></p><p>  }else if(i==2)</p><p><b>  {</b></p><p><b>  m2=0;<

51、;/b></p><p><b>  m2=SBUF;</b></p><p><b>  i=i+1;</b></p><p>  } else if(i==3)</p><p><b>  {</b></p><p><b>  

52、//i=0;</b></p><p><b>  m3=0;</b></p><p><b>  m3=SBUF;</b></p><p><b>  i=i+1;</b></p><p><b>  } </b></p>&l

53、t;p>  else if(i==4)</p><p><b>  {</b></p><p><b>  i=0;</b></p><p><b>  m4=0;</b></p><p><b>  m4=SBUF;</b></p>

54、<p><b>  }</b></p><p>  else if(k==1)</p><p><b>  {</b></p><p><b>  m1=0;</b></p><p><b>  m1=SBUF;</b></p>

55、<p><b>  k=k+1;</b></p><p>  }else if(k==2)</p><p><b>  {m2=0;</b></p><p><b>  m2=SBUF;</b></p><p><b>  k=k+1;</b>

56、;</p><p>  }else if(k==3)</p><p>  { //k=0;</p><p><b>  m3=0;</b></p><p><b>  m3=SBUF;</b></p><p><b>  k=k+1;</b><

57、;/p><p><b>  }</b></p><p>  else if(k==4)</p><p><b>  { k=0;</b></p><p><b>  m4=0;</b></p><p><b>  m4=SBUF;</b

58、></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  ES=1;</b></p><p><b>  }</b></p><p>  void main(void)&

59、lt;/p><p><b>  {</b></p><p>  P1 = 0xff;</p><p>  UART_init();</p><p><b>  Mode = 0;</b></p><p><b>  while(1)</b></p>

60、;<p><b>  {</b></p><p>  if(key==0)</p><p><b>  {</b></p><p>  DelayMs(35);</p><p>  if(key==0)</p><p><b>  {</b>

61、;</p><p><b>  key0==1;</b></p><p><b>  P10 = 1;</b></p><p>  MasterControl('b');//,'O');</p><p><b>  }</b></p>

62、<p><b>  }</b></p><p>  if(key0==0)</p><p><b>  {</b></p><p>  DelayMs(35);</p><p>  if(key0==0)</p><p><b>  {</b&g

63、t;</p><p><b>  key==1;</b></p><p>  P13 = 1; </p><p>  MasterControl('c');</p><p><b>  }</b></p><p><b>  }</b>

64、;</p><p><b>  disp();</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  從機(jī)B程序代碼:</b></p><p>  #include &l

65、t;reg51.h></p><p>  #include"DS18B20.H"</p><p>  #include"intrins.h"</p><p>  #define uchar unsigned char</p><p>  uchar m1,m2,m3;</p><

66、;p>  uchar RecData;</p><p>  sbit P10 = P1^0;</p><p>  sbit P13 = P1^3;</p><p>  sbit P24 = P2^4;</p><p>  sbit P23 = P2^3;</p><p>  sbit P25 = P2^5;<

67、;/p><p>  void UART_init()</p><p><b>  {</b></p><p>  TMOD = 0x21;</p><p>  TH1 = 0xfd;</p><p>  TL1 = 0xfd;</p><p><b>  TR1 =

68、1;</b></p><p>  SCON = 0xf0;</p><p><b>  ES = 1;</b></p><p><b>  PS = 1;</b></p><p><b>  EA = 1;</b></p><p><b

69、>  }</b></p><p>  void DelayMs(int ms)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  while(ms--) </p><p>  for(i=0;

70、i<120; i++);</p><p><b>  }</b></p><p>  void delay1(uint ms) </p><p><b>  {</b></p><p><b>  uchar y ;</b></p><p> 

71、 while(ms--)</p><p><b>  {</b></p><p>  for(y = 0 ; y<250 ; y++)</p><p><b>  {</b></p><p><b>  _nop_() ;</b></p><p>

72、<b>  _nop_() ;</b></p><p><b>  _nop_() ;</b></p><p><b>  _nop_() ;</b></p><p><b>  }</b></p><p><b>  }</b>&l

73、t;/p><p><b>  }</b></p><p>  void putc_to_SerialPort(uchar c)</p><p><b>  {</b></p><p><b>  SBUF = c;</b></p><p>  while(T

74、I == 0);</p><p><b>  TI = 0;</b></p><p><b>  }</b></p><p>  void dispy()</p><p><b>  { </b></p><p>  //P0 = 0xff;</

75、p><p>  P0 = ch[disp[0]];</p><p><b>  P23=0;</b></p><p>  delay(60);</p><p><b>  P23=1;</b></p><p>  //P0 = 0xff;</p><p>

76、;  P0= ch[disp[1]];</p><p><b>  P25=0;</b></p><p>  delay(60);</p><p><b>  P25=1;</b></p><p>  //P0 = 0xff;</p><p>  P0 = ch[disp[

77、2]];</p><p><b>  P24=0;</b></p><p>  delay(60);</p><p><b>  P24=1;</b></p><p><b>  }</b></p><p>  com_int(void) interru

78、pt 4</p><p><b>  {</b></p><p><b>  ES=0;</b></p><p><b>  if(RI)</b></p><p><b>  {</b></p><p><b>  uch

79、ar i;</b></p><p>  RecData = SBUF;</p><p><b>  RI = 0;</b></p><p>  if(RB8 == 1) </p><p><b>  {</b></p><p>  if(RecData == &

80、#39;b') </p><p><b>  {</b></p><p><b>  SM2 = 0;</b></p><p>  putc_to_SerialPort('b');</p><p>  delay1(20); </p><p>  f

81、or(i=0;i<=3;i++)</p><p><b>  { </b></p><p>  putc_to_SerialPort(disp[i]); </p><p>  delay1(300);</p><p><b>  }</b></p><p><b

82、>  SM2=1;</b></p><p><b>  }</b></p><p>  else {</p><p><b>  SM2 = 1;</b></p><p><b>  } </b></p><p>&l

83、t;b>  } </b></p><p><b>  } </b></p><p><b>  RI=0;</b></p><p><b>  TI=0;</b></p><p><b>  SM2=1; </b></p>

84、<p><b>  ES=1; </b></p><p><b>  }</b></p><p>  void main(void)</p><p><b>  {</b></p><p>  P0 = 0xff;</p><p>  P1

85、 = 0xff;</p><p>  UART_init();</p><p>  // dispy();</p><p><b>  while(1)</b></p><p><b>  { </b></p><p><b>  dispy();</b&

86、gt;</p><p>  ReadTemperature();</p><p><b>  }</b></p><p><b>  }</b></p><p>  其中18B20.H文件如下:</p><p>  #define uchar unsigned char<

87、;/p><p>  #define uint unsigned int</p><p>  sbit DQ =P2^2; //定義通信端口</p><p>  uchar disp[3]; //待顯示的數(shù)據(jù),高2位整數(shù)部分,低2位小數(shù)部分</p><p><b>  //延時(shí)函數(shù)</b></p>

88、<p>  void delay(unsigned int i)</p><p><b>  {</b></p><p>  while(i--);</p><p><b>  }</b></p><p><b>  //初始化函數(shù)</b></p>&

89、lt;p>  Init_DS18B20(void)</p><p><b>  {</b></p><p>  uchar x=0;</p><p>  DQ = 1; //DQ復(fù)位</p><p>  delay(8); //稍做延時(shí)</p><p>  DQ = 0; //

90、單片機(jī)將DQ拉低</p><p>  delay(80); //精確延時(shí) 大于 480us</p><p>  DQ = 1; //拉高總線</p><p>  delay(14);</p><p>  x=DQ; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗</p><p>  dela

91、y(20);</p><p><b>  }</b></p><p><b>  //讀一個(gè)字節(jié)</b></p><p>  ReadOneChar(void)</p><p><b>  {</b></p><p>  uchar i=0;</p

92、><p>  uchar dat = 0;</p><p>  for (i=8;i>0;i--)</p><p><b>  {</b></p><p>  DQ = 0; // 給脈沖信號(hào)</p><p><b>  dat>>=1;</b></p&g

93、t;<p>  DQ = 1; // 給脈沖信號(hào)</p><p><b>  if(DQ)</b></p><p>  dat|=0x80;</p><p><b>  delay(4);</b></p><p><b>  }</b></p>&l

94、t;p>  return(dat);</p><p><b>  }</b></p><p><b>  //寫一個(gè)字節(jié)</b></p><p>  WriteOneChar(unsigned char dat)</p><p><b>  {</b></p>

95、<p>  unsigned char i=0;</p><p>  for (i=8; i>0; i--)</p><p><b>  {</b></p><p><b>  DQ = 0;</b></p><p>  DQ = dat&0x01;</p>

96、<p><b>  delay(5);</b></p><p><b>  DQ = 1;</b></p><p><b>  dat>>=1;</b></p><p><b>  }</b></p><p><b>  

97、delay(4);</b></p><p><b>  }</b></p><p><b>  //讀取溫度</b></p><p>  void ReadTemperature(void)</p><p><b>  {</b></p><p&

98、gt;  uchar a=0,temp;</p><p>  uchar b=0;</p><p>  Init_DS18B20();</p><p>  WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作</p><p>  WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換</p><p>

99、  Init_DS18B20();</p><p>  WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作</p><p>  WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度</p><p>  a=ReadOneChar(); //讀取溫度值低位</p><p>  b=R

100、eadOneChar(); //讀取溫度值高位</p><p><b>  temp=b;</b></p><p>  temp&=0xf0;</p><p>  if(temp==0) //正溫</p><p><b>  {</b></p><p&g

101、t;  disp[3]=(b<<4)|(a>>4)/100;</p><p>  disp[2]=(((b<<4)|(a>>4))%100)/10;</p><p>  disp[1]=(((b<<4)|(a>>4))%100)%10;</p><p>  disp[0]=((a&0x0

102、f)*625)/1000;</p><p><b>  }</b></p><p>  else //負(fù)溫</p><p><b>  {</b></p><p><b>  if(a==0)</b></p><p><b>  {

103、</b></p><p><b>  a=~a+1;</b></p><p><b>  b=~b+1; </b></p><p><b>  }</b></p><p><b>  else</b></p><p>&

104、lt;b>  { </b></p><p><b>  a=~a+1;</b></p><p><b>  b=~b;</b></p><p><b>  }</b></p><p>  disp[3]=22;</p><p&g

105、t;  disp[2]=((b<<4)|(a>>4))/10;</p><p>  disp[1]=((b<<4)|(a>>4))%10;</p><p>  disp[0]=((a&0x0f)*625)/1000;</p><p><b>  }</b></p><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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論