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

下載本文檔

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

文檔簡介

1、<p>  基于485通信的網(wǎng)絡(luò)系統(tǒng)研究與設(shè)計</p><p><b>  摘要</b></p><p>  基于51單片機的485網(wǎng)絡(luò)系統(tǒng)的算法研究,通過485總線組成遠(yuǎn)距離數(shù)據(jù)采集控制系統(tǒng)。在分析了不同類型的單片機的特點及單片機與單片機機通信技術(shù)的基礎(chǔ)上,設(shè)計了單片機控制的采集系統(tǒng),并通過串口通信實現(xiàn)單片機與主機之間的通信,實現(xiàn)數(shù)據(jù)的傳送并將數(shù)據(jù)在主機上

2、顯示及存儲,完成單機的多通道數(shù)據(jù)采集系統(tǒng)的設(shè)計及實現(xiàn)。通信包括一個主機和兩個從機,主機完成報警門限設(shè)置及1602LCD的顯示,2個從機分別從測量環(huán)境溫度、濕度。一個主機和兩個從機的軟件模塊的算法分析。溫度DS18B20傳感器,濕度傳感器HS1101,分別采集數(shù)據(jù)通過485總線傳輸?shù)接?1單片機做的主機,主機判斷是否超過門限設(shè)置,如果超過門限設(shè)置就報警。整個網(wǎng)絡(luò)同步運行。設(shè)置主機和從機之間的通訊協(xié)議,以便整個網(wǎng)絡(luò)更好的構(gòu)成一個獨立框架不受

3、其它信號的干擾。提高整個網(wǎng)絡(luò)軟硬件方面的可靠性。</p><p>  關(guān)鍵詞: 485總線 數(shù)據(jù)采集 通信協(xié)議 </p><p>  Communications network system research and design based on the 485</p><p><b>  Abstract</b&g

4、t;</p><p>  485 network system of the Algorithm and the research based on the 51SCM. On the analysis of the different types of single chip microcomputer and the characteristics of the single chip microcomput

5、er and PC communications technology, and on the basis of the design of the single chip computer control acquisition system, and through the realizes serial communication of communication between the microcontroller and h

6、ost, realize the data to the data transmission in host display and storage, complete </p><p>  Keywords:485 bus; Data acquisition ; Protocols Communication </p><p><b>  目錄</b></p&

7、gt;<p><b>  第一章 緒論1</b></p><p>  1.1 課題研究背景概述1</p><p>  1.2 課題研究的意義1</p><p>  1.3 本論文的主要內(nèi)容和結(jié)構(gòu)安排2</p><p>  第二章 系統(tǒng)分析及總體設(shè)計3</p><p>  2

8、.1系統(tǒng)功能簡介3</p><p>  2.2系統(tǒng)總統(tǒng)結(jié)構(gòu)設(shè)計3</p><p>  2.3 本章小結(jié)3</p><p>  第三章 系統(tǒng)各模塊硬件設(shè)計及軟件實現(xiàn)4</p><p>  3.1溫度采集模塊設(shè)計4</p><p>  3.1.1 溫度DS18B20傳感器工作原理4</p><

9、;p>  3.1.2 DS18B20連接單片機的電路圖4</p><p>  3.1.3 溫度采集模塊流程圖5</p><p>  3.2濕度采集模塊設(shè)計5</p><p>  3.2.1濕度傳感器HS11015</p><p>  3.2.2濕度傳感器HS1101與單片機連接圖5</p><p>  

10、3.2.3濕度采集模塊流程圖7</p><p>  3.3報警模塊設(shè)計7</p><p>  3.4液晶顯示模塊8</p><p>  3.3.1 字符型液晶顯示模塊引腳8</p><p>  3.3.2 字符型液晶顯示模塊內(nèi)部結(jié)構(gòu)9</p><p>  3.3.3 報警模塊及LCD顯示電路圖9</p

11、><p>  3.3.4 報警模塊及LCD顯示流程圖10</p><p>  第四章485總線網(wǎng)絡(luò)系統(tǒng)軟件部分11</p><p>  4.1 系統(tǒng)結(jié)構(gòu)11</p><p>  4.1.1總體框架11</p><p>  4.1.2芯片介紹11</p><p>  4.2 485總線介紹

12、12</p><p>  4.2.1 485總線電氣特性與通訊距離14</p><p>  4.2.2 485總線匹配15</p><p>  4.3 485通訊協(xié)議介紹15</p><p>  4.3.1 485通訊幀格式介紹16</p><p>  4.4通信軟件設(shè)計17</p><p

13、>  4.4.1 從機通信軟件設(shè)計17</p><p>  4.4.2 主機通信軟件設(shè)計18</p><p>  4.5 主機接收與發(fā)送19</p><p>  4.6 本章小結(jié)20</p><p>  第五章 功能仿真與測試21</p><p>  5.1 調(diào)試平臺21</p><

14、;p>  5.1.1 Proteus的簡介21</p><p>  5.2調(diào)試及結(jié)果21</p><p>  5.2.1 測試環(huán)境及工具21</p><p>  5.2.2 測試方法21</p><p>  5.2.3 測試結(jié)果分析22</p><p><b>  參考文獻(xiàn)24<

15、/b></p><p><b>  致謝25</b></p><p>  附錄 主要模塊的C語言26</p><p><b>  第一章 緒論</b></p><p>  1.1 課題研究背景概述</p><p>  RS-485是EIA(美國電子工業(yè)協(xié)會)制定的平

16、衡發(fā)送、平衡接收的標(biāo)準(zhǔn)異步串行總線,它具有傳輸距離遠(yuǎn)、靈敏度高、多點通信能力強等優(yōu)點。</p><p>  在由以單片機為核心構(gòu)成的儀器儀表、智能設(shè)備等諸多數(shù)據(jù)采集系統(tǒng)中,往往需要實現(xiàn)計算機與單片機之間的數(shù)據(jù)交換,這也就是單片機與計算機之間的通信,以此來充分發(fā)揮單片機與計算機各自的長處,提升整個應(yīng)用系統(tǒng)性能及性價比。傳統(tǒng)的基于RS-232協(xié)議的通信由于傳輸距離短、速度慢、信號易受干擾等不足,使得其應(yīng)用局限性日益突

17、出。有鑒于此,本論文中討論了如何基于RS-485通信協(xié)議,構(gòu)建RS-485通信網(wǎng)絡(luò),實現(xiàn)若干單片機與計算機之間遠(yuǎn)程遠(yuǎn)遠(yuǎn)通信。</p><p>  1.2 課題研究的意義</p><p>  RS- 485是在RS-422的基礎(chǔ)上發(fā)展起來的,能實現(xiàn)一點對多點的通信,也能實現(xiàn)多點雙向通信,但同一時刻只能有一個發(fā)送器,其余的為接收器,即一主多從的通信方式。目前市場上可供選擇的RS-485總線芯片

18、很多,其中包括可支持128個節(jié)點的MAXl487和支持400個節(jié)點的SP485。利用該類芯片可直接組成簡單的通信網(wǎng)絡(luò)。</p><p>  RS-485總線采用差分平衡電路,即一條導(dǎo)線上的電壓是另外一條導(dǎo)線的電壓的取反值,接收器輸入電壓為兩根導(dǎo)線電壓的差值。由于其在兩條線路上傳遞的是大小相同,方向相反的電流,而噪聲電壓對于線路的影響都是同時出現(xiàn),兩條線路的噪聲電壓相互抵消,極大的削弱噪聲的影響。差分平衡電路不受節(jié)

19、點之間的地平電壓差的影響,EIA 485沒有規(guī)定引腳定義,信號功能,只需保持兩根信號線相鄰,在同一個雙絞線中,引腳A,B不能互換就可以了,所以在工業(yè)現(xiàn)場使用過程中,RS-485接口沒有標(biāo)準(zhǔn)的規(guī)范,有可能是DB9,也有可能是RJ45/RJ11,但是用的最多的還是工業(yè)接線端子。由于RS-485總線采用差分平衡電路,極大的抑制噪聲干擾,有極強的抗共模干擾能力,輸入電壓檢測靈敏度為200毫伏(電壓信號可以在極遠(yuǎn)距離進(jìn)行恢復(fù)),使得RS-485的

20、傳輸距離可以達(dá)到1200米(傳輸速率在110Kbps情況下)。最大傳輸速率10Mbps(傳輸距離12米)。RS-485支持多點通信,多個驅(qū)動器和接收器共享一條信號通道,在半雙工連接模式下,只能有一個驅(qū)動器工作,多個驅(qū)動器同時啟用,會產(chǎn)生線競爭(導(dǎo)致通信失敗),同時容易產(chǎn)生大電流,可能</p><p>  1.3 本論文的主要內(nèi)容和結(jié)構(gòu)安排</p><p>  本論文的結(jié)構(gòu)安排如下:<

21、/p><p>  第一章:緒論。485通信網(wǎng)絡(luò)的簡介,及485總線的電氣特性介紹。RS-485是EIA(美國電子工業(yè)協(xié)會)制定的平衡發(fā)送、平衡接收的標(biāo)準(zhǔn)異步串行總線,它具有傳輸距離遠(yuǎn)、靈敏度高、多點通信能力強等優(yōu)點。</p><p>  第二章:系統(tǒng)功能分析及總體設(shè)計。系統(tǒng)的功能介紹。</p><p>  第三章:數(shù)據(jù)采集模塊電路研究與設(shè)計。溫度DS18B20傳感器,濕

22、度傳感器HS1101,是如何工作的。LCD顯示數(shù)據(jù),以及報警。</p><p>  第四章:485總線網(wǎng)絡(luò)系統(tǒng)通訊設(shè)計部分。主要芯片的介紹。通訊協(xié)議分為三層;物理層、數(shù)據(jù)鏈路層和用戶層。485總線電氣特性與通訊距離。</p><p>  第五章:功能仿真與測試。</p><p>  第二章 系統(tǒng)分析及總體設(shè)計</p><p><b>

23、;  2.1系統(tǒng)功能簡介</b></p><p>  本論文做的是由51單片機組成的485網(wǎng)絡(luò)系統(tǒng),通過485總線組成遠(yuǎn)距離數(shù)據(jù)采集控制系統(tǒng)。通信包括一個主機和兩個從機,主機完成報警門限設(shè)置和顯示。主機完成和兩個從機之間的通信,2個從機分別測量環(huán)境溫度、濕度。</p><p>  溫度傳感器、濕度傳感器,分別采集數(shù)據(jù)通過485總線傳輸?shù)接?1單片機做的主機,主機判斷是否超過門限

24、設(shè)置,如果超過門限設(shè)置就報警。并且LCD顯示各數(shù)據(jù)采集器采集的數(shù)據(jù),整個網(wǎng)絡(luò)同步運行。</p><p>  2.2系統(tǒng)總統(tǒng)結(jié)構(gòu)設(shè)計</p><p>  本系統(tǒng)使用到溫度傳感器、濕度傳感器、AT89C51單片機、SP485芯片、485總線、1602LCD顯示器、蜂鳴器。</p><p>  圖2-1 系統(tǒng)的具體框架</p><p><b&

25、gt;  2.3 本章小結(jié)</b></p><p>  本章主要設(shè)計了整個系統(tǒng)的結(jié)構(gòu),在本系統(tǒng)中主要用到2個傳感器分別是:溫度傳感器,濕度傳感器。2個傳感器采集到數(shù)據(jù)后到各自的從機進(jìn)行處理,其中濕度需A/D轉(zhuǎn)換。再由各自的從機進(jìn)行數(shù)據(jù)保存,主機依次訪問從機。所有采集到的數(shù)據(jù)通過485網(wǎng)絡(luò)傳輸?shù)街鳈C進(jìn)行判斷并顯示,主機判斷是否超過門限要報警,如果超過門限就報警。</p><p>

26、  第三章 系統(tǒng)各模塊硬件設(shè)計及軟件實現(xiàn)</p><p>  3.1溫度采集模塊設(shè)計</p><p>  本系統(tǒng)中使用溫度傳感器DS18B20,DS18B20與微處理器連接時僅需要一條線即可實現(xiàn)與微處理器間雙向通訊。DS18B20的測量范圍為-55℃-125℃,在-10℃-85℃范圍內(nèi),精度為±0.5℃。在使用中不需要任何外圍元件。DS18B20可以通過內(nèi)部寄生電路從數(shù)據(jù)線上獲取

27、電源,因此,當(dāng)數(shù)據(jù)線上的時序滿足一定的要求時,可以不接外部電源,從而使系統(tǒng)結(jié)構(gòu)更簡單,可靠性更高。DS18B20的測量分辨率可通過程序設(shè)定為9-12位。DS18B20內(nèi)部含有EEPROM,在系統(tǒng)掉電以后,它仍可保存分辨率及報警溫度的設(shè)定值。</p><p>  3.1.1 溫度DS18B20傳感器工作原理</p><p>  測量前,首先將-55 ℃所對應(yīng)的基數(shù)分別置入減法計數(shù)器

28、1和溫度寄存器中,減法計數(shù)器1和溫度寄存器被預(yù)置在-55 ℃所對應(yīng)的一個基數(shù)值。減法計數(shù)器1對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行減法計數(shù),當(dāng)減法計數(shù)器1的預(yù)置值減到0時溫度寄存器的值將加1,減法計數(shù)器1的預(yù)置將重新被裝入,減法計數(shù)器1重新開始對低溫度系數(shù)晶振產(chǎn)生的脈沖信號進(jìn)行計數(shù),如此循環(huán)直到減法計數(shù)器2計數(shù)到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數(shù)值即為所測溫度。</p><p>  3.1.

29、2 DS18B20連接單片機的電路圖 </p><p>  下圖是溫度采集從機的電路圖,當(dāng)從機采集完數(shù)據(jù)后,通過連接SP485芯片,然后連接整個485網(wǎng)絡(luò),最后傳送到主機。</p><p>  圖3-1 DS18B20與單片機的電路圖</p><p>  3.1.3 溫度采集模塊流程圖</p><p>  圖3 -2溫度采集模塊流程圖<

30、;/p><p>  3.2濕度采集模塊設(shè)計</p><p>  本系統(tǒng)使用濕度傳感器HS1101,HS1101 測量范圍是0%~100%,電容量由162PF 變到200PF,其誤差不大于±2%RH,響應(yīng)時間小于5ms,濕度系數(shù)為0.34PF/℃,年漂移量0.5%RH/年,長期穩(wěn)定。HS1101在電路中相當(dāng)于一個電容器件,它的電容量隨著所測空氣濕度的增加而增大。</p>

31、<p>  3.2.1濕度傳感器HS1101</p><p>  HS1101是電容傳感器,在電路構(gòu)成中等效于一個電容器件,其電容量隨著所測空氣濕度的增大而增大。涉及如何將電容的變化量準(zhǔn)確的轉(zhuǎn)變?yōu)橛嬎銠C易于接受的信號時,常用兩種方法:一種是將HS1101置于運放與阻容組成的橋式振蕩電路中,所產(chǎn)生的正弦波電壓信號經(jīng)整流。直流放大。再A/D轉(zhuǎn)換為數(shù)字信號;第二種是將HS110置于555振蕩電路中,將電容值

32、的變化轉(zhuǎn)化與之成反比的電壓頻率信號,可直接被計算機采集。本系統(tǒng)使用的是第二種方法。</p><p>  3.2.2濕度傳感器HS1101與單片機連接圖</p><p>  濕度傳感器采集到的數(shù)據(jù)是模擬信號,單片只能處理數(shù)字信號,所以在采集信號后經(jīng)過A/D轉(zhuǎn)換變成數(shù)字信號再由單片機進(jìn)行處理。</p><p>  圖3-3 濕度采集與單片機連接電路</p>

33、<p>  3.2.3濕度采集模塊流程圖</p><p>  圖3-4 濕度采集及A/D轉(zhuǎn)換流程圖</p><p><b>  3.3報警模塊設(shè)計</b></p><p>  蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計算機、打印機、復(fù)印機、報警器、電子玩具、汽車電子設(shè)備、電話機、定時器等電子產(chǎn)品中作發(fā)聲器件。

34、蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。蜂鳴器在電路中用字母“H”或“HA”(舊標(biāo)準(zhǔn)用“FM”、“LB”、“JD”等)表示。蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。多諧振蕩器由晶體管或集成電路構(gòu)成。當(dāng)接通電源后(1.5~15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發(fā)聲。</p><p>  圖3-5 蜂鳴器電路</p

35、><p><b>  3.4液晶顯示模塊</b></p><p>  本系統(tǒng)采用1602LCD字符型液晶顯示模塊是一類專門用于顯示字母,數(shù)字,符號等的點陣式液晶顯示模塊。在顯示器件上的電極圖型設(shè)計,它是由若干個5*7或5*11等點陣符位組成。每一個點陣字符位都可以顯示一個字符。點陣字符位之間有一空點距的間隔起到了字符間距和行距的作用。</p><p&g

36、t;  圖3-6 液晶接口電路</p><p>  3.3.1 字符型液晶顯示模塊引腳</p><p>  VSS為接地電源,VDD接5V正電源,VL為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高,對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度。RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平時選擇指令寄存器。RW為讀寫信號線,高電平時進(jìn)行讀操

37、作,低電平時進(jìn)行寫操作。當(dāng)RS和RW共同為低電平時可以寫入指令或者顯示地址,當(dāng)RS為低電平RW為高電平時可以讀忙信號,當(dāng)RS為高電平RW為低電平時可以寫入數(shù)據(jù)。E端為使能端,當(dāng)E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。DB0~DB7為8位雙向數(shù)據(jù)線,BLK和BLA是背光燈電源。模塊引腳如表1。</p><p>  表1 字符型液晶顯示模塊引腳</p><p>  3.3.2 字符型液

38、晶顯示模塊內(nèi)部結(jié)構(gòu)</p><p>  液晶顯示模塊LCD1602的內(nèi)部結(jié)構(gòu)如圖3.7分為三部份:一為LCD控制器,二為LCD驅(qū)動器,三為LCD顯示裝置。</p><p>  圖3-7 LCD1602內(nèi)部結(jié)構(gòu)</p><p>  3.3.3 報警模塊及LCD顯示電路圖</p><p>  P3.6口輸出的是控制信號,Q1相當(dāng)于一個電子開關(guān),用

39、來控制蜂鳴器的供電通斷。當(dāng)P3.6口輸出高電平時,Q1飽和導(dǎo)通,LS2獲得電工作發(fā)出鳴響,當(dāng)P3.6空輸出低電平時Q1截止蜂鳴器失電,停止工作。</p><p>  圖3-8 報警模塊及LCD顯示電路圖</p><p>  3.3.4 報警模塊及LCD顯示流程圖</p><p>  圖3-9 報警模塊流程圖</p><p>  第四章485

40、總線網(wǎng)絡(luò)系統(tǒng)軟件部分</p><p><b>  4.1 系統(tǒng)結(jié)構(gòu)</b></p><p>  本論文通信系統(tǒng)的系統(tǒng)結(jié)構(gòu)如下圖所示,系統(tǒng)采用半雙工主從通信方式,主機可以讀取從機的數(shù)據(jù)或?qū)憯?shù)據(jù)到從機,并將數(shù)據(jù)送終端進(jìn)行顯示;從機主要負(fù)責(zé)對分布的電子設(shè)備進(jìn)行監(jiān)測或控制,用中斷的方式接收主機發(fā)來的命令并做出回應(yīng)。</p><p>  4.1.1總體框

41、架 </p><p>  圖4-1 系統(tǒng)總體框架圖</p><p><b>  4.1.2芯片介紹</b></p><p>  本系統(tǒng)中用SP485芯片和AT89C51單片機。SP485芯片連接各單片機的通信,SP485是半雙工收發(fā)器,滿足RS-485規(guī)范。它的BiCMOS設(shè)計可實現(xiàn)低功耗操作。但不影響其它特性,數(shù)據(jù)傳輸速率高達(dá)5Mbps。&

42、lt;/p><p>  圖4-2 SP485 芯片引腳圖</p><p>  表2 SP485工作原理</p><p>  本系統(tǒng)中的主機和從機都用AT89C51單片機。80C51單片機是把那些作為控制應(yīng)用所必需的基本內(nèi)容都集成在一個尺寸有限的集成電路芯片上。按功能劃分由如下功能部件組成,即微處理器、數(shù)據(jù)存儲器、程序存儲器、并行I/O口、串行口、定時器/計數(shù)器、中斷系

43、統(tǒng)及特殊功能寄存器。該單片機中有一個8位的微處理器,與通用的微處理器基本相同,同樣包括了運算器和控制器兩大部分,只是增加了面向控制的處理功能,不僅可處理數(shù)據(jù),還可以進(jìn)行位變量的處理。片內(nèi)為128個字節(jié),片外最多可外擴至64k字節(jié),用來存儲程序在運行期間的工作變量、運算的中間結(jié)果、數(shù)據(jù)暫存和緩沖、標(biāo)志位等,所以稱為數(shù)據(jù)存儲器。</p><p>  由于受集成度限制,片內(nèi)只讀存儲器一般容量較小,如果片內(nèi)的只讀存儲器的

44、容量不夠,則需用擴展片外的只讀存儲器,片外最多可外擴至64k字節(jié)。</p><p>  具有5個中斷源,2級中斷優(yōu)先權(quán)。</p><p>  片內(nèi)有2個16位的定時器/計數(shù)器, 具有四種工作方式。</p><p>  1個全雙工的串行口,具有四種工作方式。可用來進(jìn)行串行通訊,擴展并行I/O口,甚至與多個單片機相連構(gòu)成多機系統(tǒng),從而使單片機的功能更強且應(yīng)用更廣。<

45、;/p><p>  P1口、P2口、P3口、P4口為4個并行8位I/O口。</p><p>  4.2 485總線介紹</p><p>  RS-485 標(biāo)準(zhǔn)是由兩個行業(yè)協(xié)會共同制訂和開發(fā)的,即EIA—電子工業(yè)協(xié)會和TIA—通訊工業(yè)協(xié)會。EIA 曾經(jīng)在它所有標(biāo)準(zhǔn)前面加上RS 前綴英文Rcommended standard 的縮寫,因此許多工程師一直延用這種名稱。<

46、/p><p>  RS-485 總線作為一種多點差分?jǐn)?shù)據(jù)傳輸?shù)碾姎庖?guī)范,已成為業(yè)界應(yīng)用最為廣泛的標(biāo)準(zhǔn)通信接口之一。這種通信接口允許在簡單的一對雙絞線上進(jìn)行多點雙向通信,它所具有的噪聲抑制能力、數(shù)據(jù)傳輸速率、電纜長度及可靠性是其他標(biāo)準(zhǔn)無法比擬的。正因為此,許多不同領(lǐng)域都采用RS-485 作為數(shù)據(jù)傳輸鏈路。例如:汽車電子、電信設(shè)備局域網(wǎng)、智能樓宇等都經(jīng)??梢砸姷骄哂蠷S-485 接口電路的設(shè)備。這項標(biāo)準(zhǔn)得到廣泛接受的另外

47、一個原因是它的通用性RS-485 標(biāo)準(zhǔn)只對接口的電氣特性做出規(guī)定如下表1:</p><p>  表3 RS485 總線電氣性能</p><p>  本論文使用對節(jié)點數(shù)要求較多的SP485芯片及485總線,而485總線采用國際上通行的屏蔽雙絞線。我推薦用的屏蔽雙絞線的型號為RVSP2*0.5(二芯屏蔽雙絞線,每芯由16股的0.2mm的導(dǎo)線組成)。采用屏蔽雙絞線有助于減少和消除兩根485通信

48、線之間產(chǎn)生的分布電容以及來自于通訊線周圍產(chǎn)生的共模干擾。</p><p>  485收發(fā)器在規(guī)定的共模電壓-7V至+12V之間時,才能正常工作。如果超出此范圍會影響通訊,嚴(yán)重的會損壞通訊接口。共模干擾會增大上述共模電壓。消除共模干擾的有效手段之一是將485通訊線的屏蔽層用作地線,將機具、電腦等網(wǎng)絡(luò)中的設(shè)備地連接在一起,并由一點可靠地接入大地。通信線盡量遠(yuǎn)離高壓電線,不要與電源線并行,更不能捆扎在一起。</p

49、><p>  星形結(jié)構(gòu)會產(chǎn)生反射信號,從而影響到485通信??偩€到每個終端設(shè)備的分支線長度應(yīng)盡量短,一般不要超出5米。分支線如果沒有接終端,會有反射信號,對通訊產(chǎn)生較強的干擾,應(yīng)將其去掉。485總線必須要單點可靠接地。單點就是整個485總線上只能是有一個點接地,不能多點接地,因為將其接地是因為要將地線(一般都是屏蔽線作地線)上的電壓保持一致,防止共模干擾,如果多點接地適得其反??煽拷拥貢r整個485線路的地線必須要有良

50、好的接觸,從而保證電壓一致,因為在實際施工中,為了接線方便,將線剪成多段再連接,但是沒有將屏蔽線作良好的連接,從而使得其地線分成了多段,電壓不能保持一致,導(dǎo)致共模干擾。</p><p>  共模干擾是在信號線與地之間傳輸,屬于非對稱性干擾。消除共模干擾的方法包括:(1)采用屏蔽雙絞線并有效接地</p><p> ?。?)強電場的地方還要考慮采用鍍鋅管屏蔽</p><p&

51、gt; ?。?)布線時遠(yuǎn)離高壓線,更不能將高壓電源線和信號線捆在一起走線</p><p>  (4)不要和電控鎖共用同一個電源</p><p> ?。?)采用線性穩(wěn)壓電源或高品質(zhì)的開關(guān)電源(紋波干擾小于50mV) </p><p>  在RS485通信中,為防止信號反射,通常在終端都接有90~120歐姆的電阻。一般的RS485接口芯片在帶這樣的電阻負(fù)載時,其輸出電壓

52、的擺幅只有1.5~1.8V,因此在進(jìn)行長距離通信時,由于信號的衰減,接收器可能無法正確地接收到信號,導(dǎo)致誤碼。UM3085/UM3088驅(qū)動器將輸出信號擺幅提高到大于2.2V,從而在長距離通信中具有更高可靠性。此外,UM3085/UM3088具有斜率限制的特點,能減少EMI,并能在使用阻抗不匹的傳輸線時降低反射,提高通信質(zhì)量。</p><p>  4.2.1 485總線電氣特性與通訊距離</p>&

53、lt;p>  RS-485接口標(biāo)準(zhǔn)通信的最大傳輸距離為1 200 m,通信速率限制在93.75 kb/s;當(dāng)通信距離為100 m時,通信速率可達(dá)12Mb/s。但現(xiàn)有RS-485系統(tǒng)一般工作在較低傳輸速率,傳輸效率也較低。總之,對工業(yè)應(yīng)用而言,目前通常RS-485的最大傳輸距離為1200 m,最高速率在10 Mb/s左右,從而制約了工業(yè)環(huán)境下高速、遠(yuǎn)距離通訊的應(yīng)用。</p><p>  由終端電阻、偏置電阻和

54、RS-485收發(fā)器三者構(gòu)成的純阻性負(fù)載影響通信性能。長傳輸電纜可等效為傳輸線,為降低阻抗不連續(xù)導(dǎo)致的總線內(nèi)信號反射,需匹配與電纜特性阻抗等值的終端電阻。RS485網(wǎng)絡(luò)中大多數(shù)雙絞線電纜特性阻抗約為100~120Ω。當(dāng)傳輸距離小于1/6倍的傳輸信號波長,則無需終端匹配。設(shè)脈沖信號的上升時間為Tr,則傳輸信號的波長λ為λ=cTr/0.56. 式中c為電磁波波速。針對終端匹配負(fù)載與RS-485收發(fā)器之間印刷電路短線引起的反射,可縮減短線長度使

55、其表現(xiàn)為集中負(fù)載。因此,必須選用噪聲裕量大的高速RS-485器件,由實驗確定匹配參數(shù),通過降低總線負(fù)載,以提高傳輸速率。每個視窗內(nèi)上、下波形分別為RS-485發(fā)送端和經(jīng)220 m雙絞線后接收端的時域波形,其中視窗內(nèi)橫坐標(biāo)時間總長為1μs,縱坐標(biāo)電壓總幅值為40V。當(dāng)時鐘頻率為5MHz以下時,幾種485器件的接收波形區(qū)別不大;當(dāng)頻率增至10 MHz時,MAX3468和SN65HVD1176存在較大失真,接收信號的占空比變化很大; ISL4

56、486的過沖和高頻相移比SN65HVD23D更明顯。因此,綜合傳輸速率、接收信號波形及均衡功能等,</p><p>  4.2.2 485總線匹配</p><p>  總線匹配有兩種方法,一種是加匹配電阻,位于總線兩端的差分端口VA與VB之間應(yīng)跨接120Ω匹配電阻,以減少由于不匹配而引起的反射、吸收噪聲,有效地抑制了噪聲干擾。但匹配電阻要消耗較大電流,不適用于功耗限制嚴(yán)格的系統(tǒng)。另外一種比

57、較省電的匹配方案是RC 匹配利用一只電容C 隔斷直流成分,可以節(jié)省大部分功率,但電容C的取值是個難點,需要在功耗和匹配質(zhì)量間進(jìn)行折衷。除上述兩種外還有一種采用二極管的匹配方案,這種方案雖未實現(xiàn)真正的匹配,但它利用二極管的鉗位作用,迅速削弱反射信號達(dá)到改善信號質(zhì)量的目的,節(jié)能效果顯著。</p><p>  4.3 485通訊協(xié)議介紹</p><p>  通訊協(xié)議分為三層:物理層、數(shù)據(jù)鏈路層和

58、用戶層。</p><p>  (1)物理層采用SP485的電氣特性、差分信號來傳輸數(shù)據(jù)。</p><p>  (2)數(shù)據(jù)鏈路層接受上層來的數(shù)據(jù)并進(jìn)行處理,對數(shù)據(jù)打包,產(chǎn)生校驗碼,組成合理的信息幀,傳輸數(shù)據(jù)。校驗采用CRC校驗機制,校驗碼附加于信息碼的后面,同時,它接收來自對方的數(shù)據(jù),對數(shù)據(jù)進(jìn)行校驗、解包,轉(zhuǎn)化成用戶層能識別的數(shù)據(jù)。</p><p>  數(shù)據(jù)鏈路層所傳

59、輸?shù)膸袷綖椋?lt;/p><p>  其中幀頭包含了該幀的控制信息。根據(jù)傳輸內(nèi)容的不同,所傳輸?shù)膸钟忻顜托畔帧C顜^為簡單,幀格式如下:</p><p>  信息幀的幀頭還須包含傳輸信息的字節(jié)數(shù)及校驗的字節(jié)數(shù),幀格式如下:</p><p>  (3)用戶層將用戶數(shù)據(jù)傳輸轉(zhuǎn)換為數(shù)據(jù)鏈路層可以識別的格式,并將接收的數(shù)據(jù)轉(zhuǎn)換為用戶有用的信息,實現(xiàn)用戶的實際信息

60、的發(fā)送和接收,并進(jìn)行適當(dāng)?shù)奶幚?,實現(xiàn)實際需要的信息的傳輸。</p><p>  4.3.1 485通訊幀格式介紹</p><p>  該協(xié)議的信息格式如下:</p><p>  (1)編碼格式;二進(jìn)制代碼。</p><p>  (2)波特率:9600 b/s。</p><p>  (3)通信方式:半雙工。</p&

61、gt;<p>  (4)每個字符由u 位組成;</p><p>  1位:起始位(0);</p><p>  8位:數(shù)據(jù)位(1);</p><p>  1位:地址/數(shù)據(jù)識別位(1為地址,o為數(shù)據(jù));</p><p>  l位:停止位(1)。</p><p>  (5)字符發(fā)送順序;低位在先</p&g

62、t;<p>  (6)幀結(jié)束標(biāo)志:通信線路空閑3.5 ms以上</p><p>  (7)幀校驗方式:數(shù)據(jù)和(2字節(jié))</p><p>  (8)主機詢問的一般格式下圖:</p><p>  l從機地址碼I命令碼l數(shù)據(jù)個數(shù)數(shù)據(jù)l校驗和從機地址碼;兩字節(jié)二進(jìn)制數(shù),后一字節(jié)是前一字節(jié)的反碼。</p><p>  命令碼:一字節(jié)二進(jìn)制

63、數(shù),O1H代表主機讀,02H代表主機寫。</p><p>  數(shù)據(jù)個數(shù):表示主機要寫的字節(jié)個數(shù),一字節(jié)二進(jìn)制數(shù)。</p><p>  校驗和:兩字節(jié)二進(jìn)制數(shù),是將從機地址碼、命令和數(shù)據(jù)按字節(jié)從頭依次相加,生成兩字節(jié)的校驗和。</p><p>  (9)從機應(yīng)答的一般格式如下圖</p><p>  圖中信息段的定義同如上圖</p>

64、<p><b>  4.4通信軟件設(shè)計</b></p><p>  該系統(tǒng)主機的主要任務(wù)是循環(huán)讀取從機的檢測結(jié)果,并送終端顯示,其通信軟件由3部分組成:主程序中負(fù)責(zé)尋址從機的尋址模塊、通信中斷服務(wù)程序和TO中斷服務(wù)程序。尋址模塊程序流程圖見圖4-5。</p><p>  4.4.1 從機通信軟件設(shè)計</p><p>  在該系統(tǒng)中,

65、從機的主要任務(wù)是對被檢測設(shè)備進(jìn)行故障檢測和故障定位,通信軟件的主要功能是接收主機的命令并將檢測的結(jié)果回送主機。從機通信軟件由2部分組成:串行中斷服務(wù)程序和定時器TO中斷服務(wù)程序。串行中斷服務(wù)程序用于接收或發(fā)送數(shù)據(jù);TO中斷服務(wù)程序用于當(dāng)從機接收完一幀信息后進(jìn)行解釋并啟動通信向主機應(yīng)答,另外也用于當(dāng)從機發(fā)送超時后的一些處理。從機上電后處于偵聽狀態(tài),當(dāng)主機尋址時,便進(jìn)人中斷服務(wù)程序,其程序流程圖如下圖所示。</p><p

66、>  圖4-3 串行通信中斷服務(wù)程序流程圖</p><p>  首先判斷是接收中斷還是發(fā)送中斷,若是接收中斷,則清除RI,同時啟動字符間隔定時器TO,并置收發(fā)標(biāo)志為收。當(dāng)接收完第2個字節(jié)后,各從機立即判斷是否尋址本機,若是,則置SM2為‘0’,繼續(xù)接收主機送來的數(shù)據(jù);若不是,則禁止T0定時,不在接收后面的數(shù)據(jù)。當(dāng)被尋址從機接收完一幀信息后,字符間隔定時器會產(chǎn)生定時中斷,進(jìn)入TO中斷服務(wù)程序</p>

67、;<p>  圖4-4 TO中斷服務(wù)程序流程圖</p><p>  4.4.2 主機通信軟件設(shè)計</p><p>  對從機尋址是按照從機的編號順序進(jìn)行的,即從1號從機開始,主機發(fā)送該從機信息幀的第1個字節(jié)啟動尋址,同時啟動發(fā)送超時定時器TO,然后檢測通信結(jié)束標(biāo)志.當(dāng)主機成功的接收到該從機的應(yīng)答信息后,便會置位該標(biāo)志,完成與該從機的通信。接下來,尋址下一從機,直到所有從機都被

68、尋址。最后,主機完成其它功能后,又從1號從機開始下一循環(huán)的尋址。通信中斷服務(wù)程序和TO中斷服務(wù)程的設(shè)計方法與從機的大同小異,在此不再介紹。</p><p>  圖4-5 尋址模塊程序流程圖</p><p>  4.5 主機接收與發(fā)送</p><p>  本通信協(xié)議定時規(guī)定如下:</p><p>  (1)幀發(fā)送時限;70 ms.超過此時限結(jié)束

69、發(fā)送。</p><p>  (2)主機等待從機應(yīng)答時限:7 ms,超過此時限,酌情重發(fā)。</p><p>  (3)主機重發(fā)次數(shù):不超過4次,超過后,判通信失敗。</p><p>  一次完整的通信過程分為3個階段:主機詢問、從機應(yīng)答和鏈路釋放。主機詢問階段,主機以幀的形式將從機地址碼、命令、數(shù)據(jù)和校驗碼傳送到指定從機;從機應(yīng)答階段,從機解釋接收的命令碼,并組織相應(yīng)

70、幀信息回送到主機;鏈路釋放階段,從機清除接收緩沖區(qū)及相關(guān)變量,準(zhǔn)備與主機下次通信。任何一次完整的通信過程都是由主機方發(fā)起的,從機在被主機尋址前只能處于偵聽狀態(tài),從機在接收到地址碼的第2個字節(jié)后,立即判斷是否尋址自己,如果是,繼續(xù)接受下面的數(shù)據(jù),否則不與理睬。</p><p><b>  4.6 本章小結(jié)</b></p><p>  本章主要寫了485網(wǎng)絡(luò)系統(tǒng)的通訊部分

71、,包括了網(wǎng)絡(luò)總線結(jié)構(gòu),485通訊的網(wǎng)絡(luò)協(xié)議,485總線的電氣特性。該系統(tǒng)主機的主要任務(wù)是循環(huán)讀取從機的檢測結(jié)果,并送終端顯示。本系統(tǒng)中通信軟件由3部分組成:主程序中負(fù)責(zé)尋址從機的尋址模塊、通信中斷服務(wù)程序和TO中斷服務(wù)程序。</p><p>  第五章 功能仿真與測試</p><p><b>  5.1 調(diào)試平臺</b></p><p>  P

72、roteus是由Lab center Electronics開發(fā)的功能強大的單片機仿真軟件。</p><p>  5.1.1 Proteus的簡介</p><p>  Proteus與其他的仿真軟件相比較,在下面的優(yōu)點:</p><p>  1.能仿真模擬電路、數(shù)字電路、數(shù)模混合電路;</p><p>  2.能繪制原理圖、PCB圖;<

73、/p><p>  3.幾乎包括實際中所有使用的儀器;</p><p>  4.其最大的亮點在于能夠?qū)纹瑱C進(jìn)行實物級的仿真。從程序的編寫,編譯到調(diào)試,目標(biāo)版的仿真一應(yīng)俱全。支持匯編語言和C語言的編程。還可配合Keil C實現(xiàn)程序的聯(lián)合調(diào)試,將Proteus中繪制的原理圖作為實際中的目標(biāo)板,而用Keil C集成環(huán)境實現(xiàn)對目標(biāo)板的控制,與實際中通過硬件仿真器對目標(biāo)板的調(diào)試幾乎完全相同,并且支持多顯

74、示器的調(diào)試,即Proteus運行在一臺計算機上,而Keil C運行在另一臺計算機上,通過網(wǎng)絡(luò)連接實現(xiàn)遠(yuǎn)程的調(diào)試。</p><p><b>  5.2調(diào)試及結(jié)果</b></p><p>  5.2.1 測試環(huán)境及工具</p><p>  測試溫度:0~100攝氏度(模擬多點不同溫度值環(huán)境)。</p><p>  測試儀器

75、及軟件:數(shù)字萬用表,溫度計0~100攝氏度,串口調(diào)試助手。</p><p><b>  測試方法:目測。</b></p><p>  5.2.2 測試方法</p><p>  使系統(tǒng)運行,觀察系統(tǒng)硬件檢測是否正常(包括單片機最小系統(tǒng),鍵盤電路,顯示電路,溫度測試電路等)。系統(tǒng)自帶測試表格數(shù)據(jù),觀察顯示數(shù)據(jù)是否相符合即可。</p>

76、<p>  采用溫度傳感器和溫度計同時測量多點水溫變化情況(取溫度值不同的多點),目測顯示電路是否正常。并記錄各點溫度值,與實際溫度值比較,得出系統(tǒng)的溫度指標(biāo)。</p><p>  使用串口調(diào)試助手與單片機通訊,觀察單片機與串口之間傳輸數(shù)據(jù)正確否。</p><p>  5.2.3 測試結(jié)果分析</p><p>  自檢正常,溫度濕度顯示正常,串口傳輸數(shù)

77、據(jù)正確。</p><p>  因為芯片是塑料封裝,所以對溫度的感應(yīng)靈敏度不是相當(dāng)高,要一個很短的時間才穩(wěn)定。</p><p>  系統(tǒng)仿真電路原理圖:</p><p><b>  圖5-1 結(jié)果圖</b></p><p><b>  總結(jié)</b></p><p>  本論文主

78、要研究了由485通信網(wǎng)絡(luò)構(gòu)成的系統(tǒng),系統(tǒng)包括溫度采集模塊、濕度采集模塊、主機模塊、報警及顯示模塊。在溫度采集模塊中用到溫度傳感器DS18B20,其測量范圍為-55℃-125℃,在-10℃-85℃范圍內(nèi),精度為±0.5℃。在濕度采集模塊中將采集到的信號進(jìn)行濾波,同步采樣等處理后,輸入A/D轉(zhuǎn)換為數(shù)字信號后由單片機采集,然后利用單片機與PC機的通信將數(shù)據(jù)送到PC機進(jìn)行數(shù)據(jù)的存儲、后期處理與顯示,該系統(tǒng)的數(shù)據(jù)處理功能強大、顯示直觀。

79、主機主要是用來控制從機什么時候向主機發(fā)送數(shù)據(jù),以及判斷接受到的數(shù)據(jù)是否超過預(yù)先設(shè)計的值,如果超過將報警。本系統(tǒng)還是一個不完善的系統(tǒng),還有許多需要改進(jìn)的地方。設(shè)計中所采用的DS18B20搜索算法還存在不足,有時會發(fā)生重復(fù)或遺漏搜索。在通信協(xié)議不完整,沒有進(jìn)行發(fā)送超時出錯處理。還有各種不足之處有待將來改進(jìn)。</p><p><b>  參考文獻(xiàn)</b></p><p> 

80、 [1] 黃明強.51 單片機 C語言快速上手 [J].保定師范專科學(xué)校學(xué)報, 2004.2 </p><p>  [2] 四川、劉志勇.用DS1302+AT89C2051控制的紅外遙控LED電子鐘 [N]. 電子報, 2003.6</p><p>  [3] 李念強. 《單片機原理及應(yīng)用》.北京機械工業(yè)出版社,2007.3</p><p>  [4] 李平等.單

81、片機入門與開發(fā)[M].機械工業(yè)出版社,2008</p><p>  [5] 陳海宴.51單片機原理及應(yīng)用[M].北京航空航天大學(xué)出版社,2010</p><p>  [6] 王永軍、李景華.《數(shù)字邏輯與數(shù)字系統(tǒng)(第2版)》.電子工業(yè)出版社, 2001.7</p><p>  [7] 張靖武、周靈彬.《單片機系統(tǒng)的設(shè)計與仿真》.電子工業(yè)出版社,2006.2</p

82、><p>  [8] 馬忠梅、籍順心.《單片機的C語言應(yīng)用程序設(shè)計(第4版)》.北京航空航天大學(xué)出版社,2007.4</p><p>  [9] 韋兆碧;劉曄;時德鋼.《電氣自動化》.西安交通大學(xué)電氣工程學(xué)院,西安710049</p><p><b>  2002 第4期</b></p><p><b>  致謝&

83、lt;/b></p><p>  本文的研究工作是在**老師的精心指導(dǎo)和大力支持下完成的。居老師平日里工作繁多,但在我做畢業(yè)設(shè)計的每個階段,從論文的資料查詢、編寫程序到定稿的過程中,都給予我大力的幫助和細(xì)心的指導(dǎo)。在整個編寫程序和撰寫論文的過程中,*老師總是不厭其煩地給我講解每一個問題。在跟*老師作畢業(yè)論文的過程中,學(xué)到的不僅是知識,更重要的是思考與解決問題的能力。*老師循循善誘的教導(dǎo)和獨具匠心的思路,給予

84、我無限的啟迪。他對知識的孜孜不倦的探索精神,必將激勵我今后的學(xué)習(xí)和生活。在此,**老師表示崇高的敬意和衷心的感謝!</p><p>  然后還要感謝大學(xué)四年來所有的老師,在所有老師的精心培育下,我打下了堅實的專業(yè)知識基礎(chǔ);同時還要感謝所有的同學(xué),正是因為有了大家互相支持和鼓勵,此次畢業(yè)設(shè)計才會順利完成。</p><p>  附錄 主要模塊的C語言</p><p> 

85、 485網(wǎng)絡(luò)與51單片機的通訊代碼:</p><p>  #include<reg52.h></p><p>  #include<string.h></p><p>  #define uchar unsigned char </p><p>  #define uint unsigned int</p>

86、;<p><b>  /*通信命令*/</b></p><p>  #define _ACTIVE_ 0x01 // 主機詢問從機是否存在</p><p>  #define _GETDATA_ 0x02 //主機發(fā)送讀設(shè)備請求</p><p>  #define _OK_ 0x03 //從機應(yīng)答</p&g

87、t;<p>  #define _STATUS_ 0x04 //從機發(fā)送設(shè)備狀態(tài)信息</p><p>  #define _MAXSIZE 0x08 //緩沖區(qū)長度</p><p>  #define _ERRLEN 12 //任何通信幀長度超過12則表示出錯</p><p>  uchar dbuf[MAXSIZE] ;//該緩沖

88、區(qū)用于保存設(shè)備狀態(tài)信息</p><p>  uchar dev; //該字節(jié)用于保存本機設(shè)備號</p><p>  sbit M_DE = P1^0; //驅(qū)動器使能,1有效</p><p>  sbit M_RE = P1^1; //接收器使能,0 有效</p><p>  void

89、get_status(); //調(diào)用該函數(shù)獲得設(shè)備狀態(tài)信息,函數(shù)全碼未給出</p><p>  void send_data(uchar type,uchar len,uchar *buf); //發(fā)送數(shù)據(jù)幀</p><p>  bit recv_cmd(uchar *type); //接收主機命令,主機請求包含命令信息。</p><p> 

90、 void send_byte(uchar da); //該函數(shù)發(fā)送一幀數(shù)據(jù)中的一個字節(jié),由send_data()函數(shù)調(diào)用</p><p>  void main()</p><p><b>  {</b></p><p>  uchar type;</p><p>  uchar len;</p>&

91、lt;p><b>  /*系統(tǒng)初始化*/</b></p><p>  P1 = 0xff ; //讀取本機設(shè)備號</p><p>  dev = (P1>>2); </p><p>  TMOD = 0x20; //定時器T1使用方式2</p><p>  TH1 = 250;</p>

92、;<p>  TL1 = 250; </p><p>  TR1 = 1; //開始計時</p><p>  PCON = 0x80; //SMOD = 1;</p><p>  SCON = 0x50; //工作方式1,波特優(yōu)選法9600bps,允許接收</p><p>  ES = 0; // 關(guān)閉串品中斷&

93、lt;/p><p>  IT0 = 0; //外部中斷0使有電平觸發(fā)模式</p><p>  EX0 = 1; // 開啟外部中斷0</p><p>  EA = 0; //開啟總中斷</p><p><b>  /*主程序流程*/</b></p><p>  w

94、hile(1) </p><p><b>  {</b></p><p>  if(recv_cmd(&type) ==0) //發(fā)送幀錯誤或幀地址與本機地址不符,丟棄當(dāng)前幀后返回</p><p><b>  continue;</b></p><p>  switch(t

95、ype)</p><p><b>  {</b></p><p>  case _ACTIVE_: //主機詢問從機是否存在</p><p>  send_data(_OK_,0,dbuf); // 發(fā)送應(yīng)答信息,這里的buf 的內(nèi)容并未用到</p><p><b>  break;</b>

96、;</p><p>  case _GETDATA_: //主機發(fā)送讀設(shè)備請求</p><p>  len = strlen(dbuf);</p><p>  snd_data(_STATUS_,len,dbuf) ; // 發(fā)送設(shè)備信息</p><p><b>  break;</b></p>

97、<p><b>  default:</b></p><p>  break; //命令類型錯誤,丟棄當(dāng)前幀返回</p><p><b> ?。?lt;/b></p><p><b>  } </b></p><p><b>  }</b></

98、p><p><b>  }</b></p><p>  void READSTATUS() interrput 0 using 1 //產(chǎn)生外部中斷0時表示設(shè)備狀態(tài)發(fā)生改變,該函數(shù)使用寄存器組1</p><p><b>  {</b></p><p>  get_status(); //獲得設(shè)

99、備狀態(tài)信息,并將其存入dbuf指向的存儲區(qū),數(shù)據(jù)最后一個字節(jié)置0表示數(shù)據(jù)結(jié)束</p><p><b>  }</b></p><p><b> ?。?lt;/b></p><p>  /*該函數(shù)接收一幀數(shù)據(jù)度進(jìn)行檢測,無論該幀是否錯誤,函數(shù)均會返回。</p><p>  *函數(shù)參數(shù)type保存接收到的命令

100、字</p><p>  *當(dāng)接收的數(shù)扭幀錯誤或其地址位不為0時(非主機發(fā)送幀),快活數(shù)返回0,反之返回1</p><p><b>  */</b></p><p>  bit recv_cmd(uchar *type)</p><p><b>  {</b></p><p>

101、  bit db = 0; //當(dāng)接收到的上一個字節(jié)為0xdb時,該位置位</p><p>  bit c0 = 0; //當(dāng)接慢到的上一個字節(jié)為0xc0時,該位置位</p><p>  uchar data_buf[_ERRLEN]; //保存接收到的幀</p><p>  uchar tmp;</p><p>  uchar ecc

102、 = 0;</p><p><b>  uchar i;</b></p><p>  M_DE =0; //置發(fā)送禁止,接收允許</p><p><b>  M_RE = 0;</b></p><p>  /*接收一幀數(shù)據(jù)*/</p><p><b>  i =0

103、;</b></p><p>  while(!c0) //循環(huán)直至幀接收完畢</p><p><b> ?。?lt;/b></p><p><b>  RI = 0;</b></p><p>  while(RI);</p><p>  tmp = SBUF;<

104、/p><p><b>  RI = 0;</b></p><p>  if(db ==1) //接收到的上一個字節(jié)為0xdb</p><p><b>  {</b></p><p>  swithc(tmp)</p><p><b> ?。?lt;/b><

105、/p><p>  case 0xdd: </p><p>  data_buf[i] = 0xdb; //0xdbdd 表示0xdb</p><p>  ecc = ecc^0xdb;</p><p><b>  db = 0;</b></p><p><b>  break;</b&

106、gt;</p><p>  case 0xdc:</p><p>  data_buf[i] = 0xc0; //0xdbdc 表示0xc0</p><p><b>  ecc = 0;</b></p><p><b>  db = 0;</b></p><p><b

107、>  break;</b></p><p><b>  default: </b></p><p>  return 0 ; // 幀錯誤,返回 </p><p><b> ?。?lt;/b></p><p><b>  i++;</b></p>

108、<p><b>  }</b></p><p>  switch(tmp) //正常 情況下</p><p><b>  {</b></p><p>  case 0xc0: //幀結(jié)束</p><p><b>  c0 = 1;</b></p>

109、<p><b>  break;</b></p><p>  case 0xdb:// 檢測到轉(zhuǎn)義字符</p><p><b>  db = 1;</b></p><p><b>  break;</b></p><p>  default : // 普通數(shù)

110、據(jù)</p><p>  data_buf[i] = tmp ; //保存數(shù)據(jù)</p><p>  ecc = ecc^tmp; // 計算校驗字節(jié)</p><p><b>  i ++;</b></p><p><b>  }</b></p><p>  if(i ==_

111、ERRLEN) //幀超長,錯誤,返回</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  /*判斷幀是否錯誤*/</p><p>  if(i<4) //幀過短,錯誤,返回</p><p><

112、b>  return 0;</b></p><p>  if(ecc!=0) //校驗錯誤,返回</p><p><b>  return 0;</b></p><p>  if(data_buf[i!= dev)//非訪問本機命令,錯誤,返回</p><p><b>  return

113、0;</b></p><p>  *type = data_buf[1]; //獲得命令字</p><p>  return 1; //函數(shù)成功返回</p><p><b>  }</b></p><p>  /*該函數(shù)發(fā)送一數(shù)據(jù)幀,參數(shù)type為命令字,len為數(shù)據(jù)長度,buf 為要發(fā)送的數(shù)據(jù)內(nèi)容*/&

114、lt;/p><p>  void send_data(uchar type,uchar len,uchar *buf)</p><p><b>  {</b></p><p><b>  uchar i ;</b></p><p>  uchar ecc = 0;</p><p>

115、;  M_DE = 1 ;// 置發(fā)送允許,接收禁止</p><p><b>  M_RE = 1;</b></p><p>  send_byte(dev); //發(fā)送本機地址</p><p>  ecc = dev; </p><p>  send_byte(type); //發(fā)送命令字</p>&

116、lt;p>  ecc = ecc^type;</p><p>  send_byte(len); // 發(fā)送長度</p><p>  ecc = ecc^len;</p><p>  for(i =0;i<len;i++)</p><p><b>  { </b></p><p>

117、  send_byte(*buf);</p><p>  ecc = ecc^(*buf);</p><p><b>  buff++;</b></p><p><b>  }</b></p><p>  send_byte(ecc); // 發(fā)送校驗字節(jié)</p><p>

118、  TI = 0; //發(fā)送幀結(jié)束標(biāo)志</p><p>  SBUF = 0xc0;</p><p>  while(!TI);</p><p><b>  TI = 0;</b></p><p><b>  }</b></p><p>  /*該函數(shù)發(fā)送一個數(shù)據(jù)字節(jié),若該

119、字節(jié)為0xdb,則發(fā)送0xdbdd,若該字節(jié)為0xc0,則發(fā)送0xdbdc*/</p><p>  void send_byte(uchar da)</p><p><b>  {</b></p><p>  switch(da)</p><p><b>  {</b></p><

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論