基于GP32溫度測試系統(tǒng)的設(shè)計_第1頁
基于GP32溫度測試系統(tǒng)的設(shè)計_第2頁
基于GP32溫度測試系統(tǒng)的設(shè)計_第3頁
基于GP32溫度測試系統(tǒng)的設(shè)計_第4頁
基于GP32溫度測試系統(tǒng)的設(shè)計_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄第一章 前 言 21.1 mcu與嵌入式系統(tǒng)21.2 傳感器簡介31.3 熱敏電阻溫度傳感器4第二章 硬件測試 52.1 單片機系統(tǒng)52.2 單片機的選擇52.2.1 mc68hc908gp32單片機的特點52.2.2 mc68hc908gp32內(nèi)部結(jié)構(gòu)62.2.3 gp32mcu的引腳功能82.3 測溫系統(tǒng)的原理框圖92.3.1 溫度傳感器電路102.3.2 信號放大電路102.3.3 a/d轉(zhuǎn)換模塊112.3.4 溫度顯示系統(tǒng)11第三章 軟件設(shè)計 123.1 mcu方程序123.1.1 main函數(shù)123.1.2 a/d轉(zhuǎn)換模塊的基本編程方法133.1.3 串行口初始化子程序173.

2、1.4 串口通行模塊183.1.5 wlldef.c程序223.2 pc機方(vb編程)22第四章 測試與總結(jié) 274.1 測試274.1.1 連接硬件電路274.1.2 08c語言程序調(diào)試274.2 總結(jié)284.3 參考文獻30基于gp32溫度測試系統(tǒng)的設(shè)計第一章 前 言1.1 mcu與嵌入式系統(tǒng)mcu的基本含義:在一塊芯片上集成了中央處理器單元(cpu)、存儲器(ram/rom)、定時器/計數(shù)器及多種輸入/輸出(i/o)接口的比較完整的數(shù)字處理系統(tǒng)。mcu從體系結(jié)構(gòu)到指令系統(tǒng)都是按照嵌入式系統(tǒng)的應(yīng)用特點專門設(shè)計,能很好地滿足應(yīng)用系統(tǒng)的嵌入,面向測控對象和現(xiàn)場可靠運行等方面的要求。因此由mc

3、u構(gòu)成的系統(tǒng)是發(fā)展最快、品種最多、數(shù)量最大、應(yīng)用最廣的嵌入式系統(tǒng)。由于mcu有嵌入式應(yīng)用的專用體系結(jié)構(gòu)與指令系統(tǒng),而且具有體積小、可靠性高等特點,同時具有各種各樣的型號,可以滿足不同的需求,實際應(yīng)用時,開發(fā)者可根據(jù)具體要求選用最佳型號的mcu嵌入到所需的應(yīng)用系統(tǒng)中2。一個以mcu為核心,比較復(fù)雜的嵌入式產(chǎn)品或?qū)嶋H嵌入式應(yīng)用系統(tǒng),包含模擬量的輸入、模擬量的輸出,開關(guān)量的輸入、開關(guān)量的輸出以及數(shù)據(jù)通信部分。如圖1為一個典型的嵌入式應(yīng)用系統(tǒng)框圖。mcu工作支撐電路保障mcu能夠正常運行,如電源提供、晶振電路及必要的濾波電路等。實際模擬信號一般來自相應(yīng)的傳感器。但是,一般傳感器將實際模擬信號轉(zhuǎn)成的電信

4、號都比較弱,mcu無法直接獲得該信號,需要將起放大,然后經(jīng)過模/數(shù)(a/d)轉(zhuǎn)換變?yōu)閿?shù)字信號,進行處理。目前許多mcu內(nèi)部包含a/d轉(zhuǎn)換模塊,實際應(yīng)用時也可根據(jù)需要外接a/d轉(zhuǎn)換芯片。常見的模擬量有:溫度、濕度、壓力、質(zhì)量、氣體濃度、液體濃度、流量等。對mcu來說,模擬信號通過a/d轉(zhuǎn)換變成相應(yīng)的數(shù)字序列進行處理。 實際開關(guān)信號一般也來自相應(yīng)的開關(guān)類傳感器。如光電、電磁開關(guān)、干簧管、聲控、紅外開關(guān)等,在一些兒童電子玩具就有一些類似的開關(guān)。手動開關(guān)也可以作為開關(guān)信號送到mcu中。對mcu來說,開關(guān)信號就是只有“0”和“1”兩種可能值的數(shù)字信號。其他輸入信號通過通信方式與mcu溝通。常用的通信方式

5、有:異步串行(sci)通信方式、串行外設(shè)接口(spi)通信方式、并行通信方式、usb通信方式、網(wǎng)絡(luò)通信方式等。在執(zhí)行機構(gòu)中,有開關(guān)量執(zhí)行機構(gòu),也有模擬量執(zhí)行機構(gòu)。開關(guān)量執(zhí)行機構(gòu)只有“開”、“關(guān)”兩種狀態(tài)。模擬量執(zhí)行機構(gòu)需要連續(xù)變換的模擬量控制。mcu一般不能直接控制這些執(zhí)行機構(gòu),需要通過相應(yīng)的驅(qū)動電路實現(xiàn)。還有一些執(zhí)行機構(gòu),即不是通常的開關(guān)量控制,也不是通常的d/a轉(zhuǎn)換量控制,而是“脈沖”量控制,如控制空調(diào)電動機,mcu則通過軟件對其控制。mcu放大器:將微弱電信號放 大 成mcu可接受的電信號傳感器:將實際物理信號轉(zhuǎn)換為微弱電信號模擬量驅(qū)動機構(gòu):將mcu送出的信號放大模擬量執(zhí)行機構(gòu)將實際開關(guān)

6、信號轉(zhuǎn)換成mcu可接受的電信號mcu與嵌入式系統(tǒng)開關(guān)量驅(qū)動機構(gòu):將mcu送出的信號放大開關(guān)量執(zhí)行機構(gòu)其他輸入信號其他輸出信號mcu工作支撐電路其他通信設(shè)備通信信號匹配電路a/d轉(zhuǎn)換接口d/a轉(zhuǎn)換接口i/o接口通信接口實際模擬信號實際開關(guān)信號圖1 一個典型的嵌入式應(yīng)用系統(tǒng)框圖1.2 傳感器簡介傳感器是一種把物理量或化學量轉(zhuǎn)變成便于利用的電信號的器件,其實質(zhì)是一種功能塊,其作用是將來自外界的各種信號轉(zhuǎn)變?yōu)殡娦盘枴K菍崿F(xiàn)測試與自動控制系統(tǒng)的首要環(huán)節(jié)。如電子計價秤中所安裝的稱重傳感器,它是電子計價秤的重要部件,它擔負著將重量轉(zhuǎn)換成電信號的任務(wù),它所輸出的電信號被放大器放大并經(jīng)a/d轉(zhuǎn)換后由相關(guān)電路顯

7、示出稱重信息。如果沒有傳感器對原始參數(shù)進行精確可靠的測量,哪么無論是信號轉(zhuǎn)換或信息處理,或者最佳數(shù)據(jù)的顯示和控制都將無法實現(xiàn)。在現(xiàn)代電子信息系統(tǒng)中,信息采集傳感器技術(shù)、信息傳感痛惜技術(shù)、信息處理微處理器技術(shù)是現(xiàn)在電子信息技術(shù)的3大核心技術(shù)。傳感器的種類可分為力、熱、濕、氣,磁、光、電等。室溫傳感器用于測量室內(nèi)和室外的環(huán)境溫度,管溫傳感器用于測量蒸發(fā)器和冷凝器的管壁溫度。室溫傳感器和管溫傳感器的形狀不同,但溫度特性基本一致。按溫度特性劃分,目前美的使用的室溫管溫傳感器有二種類型:1、常數(shù)b值為4100k3%,基準電阻為25對應(yīng)電阻10k3%。溫度越高,阻值越?。粶囟仍降?,阻值越大。離25越遠,對

8、應(yīng)電阻公差范圍越大;在0和55對應(yīng)電阻公差約為7%;而0以下及55以上,對于不同的供應(yīng)商,電阻公差會有一定的差別。1.3 熱敏電阻溫度傳感器溫度傳感器利用一些金屬、半導(dǎo)體等材料與溫度有關(guān)的特性而制成的,這些特性包括熱膨脹、電阻、電容、磁性、熱電勢、熱噪聲、彈性及光學特征。根據(jù)制造材料將其分為熱敏電阻傳感器、半導(dǎo)體熱電偶傳感器、pn結(jié)溫度傳感器和集成溫度傳感器等類型。熱敏電阻傳感器,其最基本電氣特性是隨著溫度的變化自身阻值也隨之變化。熱電阻材料熱電阻測溫是基于金屬導(dǎo)體的電阻值隨溫度的增加而增加這一特性。第二章 硬件測試2.1 單片機系統(tǒng)單片機選用的是freescale公司的mc908gp32,主

9、要完成對ad轉(zhuǎn)換電路的控制、對轉(zhuǎn)換后的數(shù)字量的處理以及對顯示模塊的控制,并且為adc0809提供工作時鐘2.2 單片機的選擇嵌入式系統(tǒng)的核心就是各種不同類型的mcu,選擇mcu時要考慮的因素有處理性能、功耗、價格、封裝形式、軟硬件開發(fā)工具、設(shè)計者的熟悉程度等。對于許多嵌入式系統(tǒng)設(shè)計來說,目標不在于挑選速度最快并且功能最強的mcu(這樣的mcu往往價格較高),而是選擇對于完成功能最合適的mcu。應(yīng)遵循的原則有:mcu的總i/o口個數(shù)應(yīng)略多于系統(tǒng)功能所需的個數(shù),以備功能擴展和調(diào)試時使用;對于使用到的外設(shè)功能模塊應(yīng)盡可能集成在mcu的內(nèi)部,以簡化硬件系統(tǒng),減少系統(tǒng)工作功耗,提高系統(tǒng)的可靠性;盡量選擇

10、設(shè)計者較為熟悉和開發(fā)工具完備的芯片型號,這樣可以減少開發(fā)周期,提高開發(fā)效率。基于上述選型原則,本設(shè)計采用了mc68hc908gp32(42引腳)單片機,它穩(wěn)定性高、開發(fā)周期短、成本低、兼容性好;按各種型號帶有不同大小的片內(nèi)閃速(flash)存儲器,具有非常高的性價比;增加了增強型的串行通訊接口sci和串行外圍接口spi。2.2.1 mc68hc908gp32單片機的特點mc68hc908gp32單片機的主要特點概述如下:1)512b片內(nèi)ram;32k片內(nèi)flash程序存儲器,具有在線編程能力和保密功能。 2)時鐘發(fā)生器模塊,具有32khz晶振pll電路,可產(chǎn)生各種工作頻率;8mhz 內(nèi)部總線頻

11、率。 3)增強的hc05 cpu結(jié)構(gòu);16種尋址方式(比hc05多8種);16位變址寄存器和堆棧指針;存儲器至存儲器數(shù)據(jù)傳送;快速88乘法指令;快速16/8除法指令;擴展的循環(huán)控制功能;bcd功能. 4)33根通用i/o腳,包括26根多功能i/o腳和5或7根專用i/o腳;pta、ptc和ptd的輸入口有可選擇的上拉電阻;ptc0ptc4有15ma吸流和放流能力,其他口有10ma吸流和放流能力 (總體驅(qū)動電流應(yīng)小于150ma);所有口有最高5ma輸入電流保護功能。 5)增強型串行通訊口sci;串行外圍接口spi;兩個16位雙通道定時器接口模塊(tim1和tim2),每個通道可選擇為輸入捕捉、輸出

12、比較和pwm,其時鐘可分別選為內(nèi)部時鐘的1、2、4、8、6、32和64的分頻值;帶時鐘預(yù)分頻的定時基模塊有8種周期性實時中斷(1、4、16、256、512、1024、2048和4096hz),可在stop方式時使用外部32khz晶振周期性喚醒cpu;8位鍵盤喚醒口。6)系統(tǒng)保護特性:計算機工作正常(cop)復(fù)位;低電壓檢測復(fù)位,可選為3v或5v操作;非法指令碼檢測復(fù)位;非法地址檢測復(fù)位。 7)具有pdip40、sdip42和qfp44封裝形式。 8)優(yōu)化用于控制應(yīng)用;優(yōu)化支持c語言。 2.2.2 mc68hc908gp32內(nèi)部結(jié)構(gòu)mc68hc908gp32 mcu(以下簡稱gp32 mcu)的

13、三種封裝形式只有引腳數(shù)量和形式有所區(qū)別,其他方面是一致的。圖4給出了gp32的 內(nèi)部結(jié)構(gòu)框圖。圖4中i/o接口是按44引腳的gp32給出的,對于42引腳的gp32 mcu則沒有ptc5、ptc6兩個引腳,對于40引腳的gp32 mcu則沒有ptc5、ptc6及ptd6/t2ch0、ptd7/t2h1四個引腳。從內(nèi)部結(jié)構(gòu)簡圖可以看出,gp32內(nèi)部有以下主要部分:m68hc08 cpu、存儲器、定時接口模塊、定時基模塊、看門狗模塊、并行i/o接口、串行通信接口sci、串行外設(shè)接口spi、斷點模塊、a/d轉(zhuǎn)換模塊、鍵盤中斷模塊、時鐘發(fā)生模塊及鎖相環(huán)電路、低電壓禁止模塊、復(fù)位與中斷模塊、鑒控模塊mon

14、、系統(tǒng)設(shè)置模塊。m68hc08 cpucpu寄存器算數(shù)邏輯單元 64b控制和狀態(tài)寄存器32kb片內(nèi)flash程序寄存器512b片內(nèi)ram307b監(jiān)控rom36b用戶flash矢量空間時鐘發(fā)生模塊32khz振蕩器鎖相環(huán)pll系統(tǒng)集成模塊sim矢量空間外中斷模塊irq8位a/d轉(zhuǎn)換模塊電源portaddraportcddrcportbddrbportdddrd監(jiān)視模式入口模塊加密模塊pta7/kbd7 pta0/kbd0定時器模塊tbm斷點模塊brk低電壓禁止模塊lvi鍵盤中斷控制模塊kbi定時器接口模塊tim1定時器接口模塊tim2內(nèi)存映像模塊串行通信接口模塊sci串行外設(shè)接口模塊spi監(jiān)控模塊

15、mon數(shù)據(jù)總線開關(guān)模塊系統(tǒng)操作正常監(jiān)視模塊cop配置寄存器模塊1配置寄存器模塊1上電復(fù)位模塊ptb7/ad7 ptb0/ad0ptc4 ptc0ptd7/t2ch1ptd6/t2ch0ptd5/t1ch1ptd4/tich0ptd3/spsckptd2/misoptd1/mosiptd0/ssvddvssvddavssavddad/vrefhvssad/vreflosc1osc2cgmxfcrstirq圖4 mc68hc908gp32結(jié)構(gòu)框圖2.2.3 gp32mcu的引腳功能 mc68hc908gp32的引腳圖 電源類引腳vdd 、vss(20引腳、19引腳):電源供給端。vddad/vre

16、fh、vssad/vrefl(31引腳、32引腳):內(nèi)部a/d轉(zhuǎn)換模塊的電源供給及參考電壓輸入端。vdda、vssa(1引腳、2引腳):時鐘發(fā)生器模塊(cgm)的電源供給端。 控制類引腳 (6引腳):外部低有效復(fù)位輸入或輸出引腳,有內(nèi)部上拉電阻。(14引腳):外部中斷輸入引腳,有內(nèi)部上拉電阻。 i/o類引腳pta7/kbd7-pta0/kbd0(42-35引腳):8位通用雙向i/o接口,每個可編程為鍵盤輸入引腳。ptb7/ad7-ptbo/ad0(32-25引腳):8位通用雙向i/o接口,也可作為8位a/d轉(zhuǎn)換輸入引腳。ptc4-ptc0(11-7引腳):5位通用雙向i/o接口。ptd7/t2

17、ch1-ptd0/ss(24-21引腳、18-15引腳):8種特殊功能、雙向i/o接口,其中ptd4-ptd7用于定時器模塊(tim1和tim2)。spsck、mosi、miso、ss用語串行外圍接口(spi)。pte1/txd、pte0/rxd(12引腳、13引腳):2位雙向i/o接口或串行通信。 其他cgmxfc(3引腳):cgm的外部濾波電容連接引腳。osc1、osc2(5引腳、4引腳):芯片內(nèi)振蕩器引腳。2.3 測溫系統(tǒng)的原理框圖溫度傳感器電路信號放大電路a/d轉(zhuǎn)換電路單片機系統(tǒng)溫度顯示系統(tǒng)圖1 測溫系統(tǒng)的原理框圖本測溫系統(tǒng)由溫度傳感器電路、信號放大電路、ad轉(zhuǎn)換電路、單片機系統(tǒng)、溫度

18、顯示系統(tǒng)構(gòu)成,如圖1所示。其基本工作原理:溫度傳感器電路將測量到的溫度信號轉(zhuǎn)換成電壓信號輸出到信號放大電路,與溫度值對應(yīng)的電壓信號經(jīng)放大后輸出至ad轉(zhuǎn)換電路,把電壓信號轉(zhuǎn)換成數(shù)字量送給單片機系統(tǒng),單片機系統(tǒng)根據(jù)顯示需要對數(shù)字量進行處理,再送溫度顯示系統(tǒng)進行顯示。如圖2所示。 2.3.1 溫度傳感器電路溫度傳感器采用的是ns公司生產(chǎn)的lm35,它具有很高的工作精度和較寬的線性工作范圍,它的輸出電壓與攝氏溫度線性成比例,且無需外部校準或微調(diào),可以提供14的常用的室溫精度。lm35的輸出電壓與攝氏溫度的線形關(guān)系可用下面公式表示,0時輸出為0 v,每升高1,輸出電壓增加10 mv。其電源供應(yīng)模式有單電

19、源與正負雙電源兩種,其接法如圖3與圖4所示。正負雙電源的供電模式可提供負溫度的測量,單電源模式在25下電流約為50 ma,非常省電。本系統(tǒng)采用的是單電源模式。2.3.2 信號放大電路由于溫度傳感器lm35輸出的電壓范圍為00.99 v,雖然該電壓范圍在ad轉(zhuǎn)換器的輸入允許電壓范圍內(nèi),但該電壓信號較弱,如果不進行放大直接進行ad轉(zhuǎn)換則會導(dǎo)致轉(zhuǎn)換成的數(shù)字量太小、精度低。系統(tǒng)中選用通用型放大器a741對lm35輸出的電壓信號進行幅度放大,還可對其進行阻抗匹配、波形變換、噪聲抑制等處理。系統(tǒng)采取同相輸入,電壓放大倍數(shù)為5倍,電路圖如圖5所示。2.3.3 a/d轉(zhuǎn)換模塊a/d轉(zhuǎn)換模塊(analog to

20、 digital convert module),即模數(shù)轉(zhuǎn)換,是將電壓信號轉(zhuǎn)換為對應(yīng)的數(shù)字信號。進行a/d轉(zhuǎn)換的基本問題:1)采樣精度:數(shù)字量變化一個最小量時模擬信號的變化量,即采樣位數(shù)。 2)采樣速率:完成一次a/d采樣所要花費的時間。 3)濾波:對采樣的數(shù)據(jù)進行篩選去掉誤差較大的毛刺。 4)物理量回歸:把a/d采樣值與實際物理量對應(yīng)起來。a/d轉(zhuǎn)換數(shù)據(jù)寄存器adr:adr存放a/d轉(zhuǎn)換的8位結(jié)果,每次a/d轉(zhuǎn)換結(jié)束更新該寄存器。編程從該寄存器讀取a/d轉(zhuǎn)換結(jié)果。該寄存器地址為:$003d,為只讀寄存器,復(fù)位時為$00。2.3.4 溫度顯示系統(tǒng)該溫度顯示系統(tǒng)較為簡單,由可編程并行輸入輸出芯片

21、8255a的a,b,c端口外接3個8段led顯示器來實現(xiàn)。mc908gp32的p2.6為8255提供片選信號,74ls373的q7,q6接8255的a1,a0,可得到8255的a,b,c及控制口的地址為bf3fh,bf7fh,bfbfh,bfffh。mc908gp32處理好的溫度數(shù)據(jù)輸出至8255,并由mc908gp32對8255編程控制其a,b,c端口輸出高電平或低電平,以便從8段led顯示器顯示實際溫度。8段led顯示器選用共陽極,8255的a,b,c端口與8段led顯示器之間接限流電阻。第三章 軟件設(shè)計在mcu上的程序包括頭文件定義、溫度驅(qū)動子程序、系統(tǒng)初始化子程序、串口通信子程序等,通

22、過專用編譯器和寫入工具寫到mcu中。系統(tǒng)的軟件部分用c語言編程,采用模塊化結(jié)構(gòu),主要由ad轉(zhuǎn)換模塊、單片機內(nèi)部數(shù)據(jù)處理模塊、溫度顯示模塊等3部分構(gòu)成,便于修改和維護。系統(tǒng)的所有程序文件,見下表: 溫度測量系統(tǒng)工程文件文件類型文件名功能簡介頭文件gp32c. hgp32 mcu映像寄存名定義頭文件endisint.h開放或禁止mcu各模塊中斷頭文件type.h類型別名定義頭文件includes.h總頭文件ad.ha/d轉(zhuǎn)換頭文件sci.h串行通信頭文件c語言子函數(shù)文件setup.c芯片初始化文件sci.c串口通信文件ad.ca/d轉(zhuǎn)換文件c語言主函數(shù)main.c主函數(shù)文件3.1 mcu方程序該模

23、塊是系統(tǒng)的核心模塊3.1.1 main函數(shù)#include includes.h /總頭文件/主函數(shù)void main(void) disablemcuint(); /禁止總中斷 mcuinit(); /芯片初始化 /在此處添加用戶程序 sciinit(); adcinit(); while(1) scisend1(adcave(0,200); 3.1.2 a/d轉(zhuǎn)換模塊的基本編程方法根據(jù)測量系統(tǒng)要求不同以及單片機的忙閑程度,通??刹捎?種軟件編程方式:程序查詢方式,延時方式和中斷方式。本系統(tǒng)采用延時方式。延時程序?qū)嶋H上是無條件傳送io方式,當向ad轉(zhuǎn)換器發(fā)出啟動命令后,即進行軟件延時,延時時

24、間稍大于進行一次ad轉(zhuǎn)換所需要的時間,之后打開ad轉(zhuǎn)換器的輸出緩沖器讀數(shù)即為轉(zhuǎn)換好的數(shù)字量。ad轉(zhuǎn)換時間為64個時鐘周期,因為系統(tǒng)中adc0809的工作時鐘為500 khz,故ad轉(zhuǎn)換時間為128 s,延時時間可大致選擇160s。程序段如下:1)a/d轉(zhuǎn)換初始化 對adclk寫入控制字節(jié),決定時鐘輸入源是內(nèi)部總線還是外部晶振,決定分頻系數(shù)等。 2)啟動a/d轉(zhuǎn)換 對adscr寫入控制字節(jié),選取要轉(zhuǎn)換的通道、決定轉(zhuǎn)換結(jié)束數(shù)據(jù)獲取的方式、設(shè)置是連續(xù)轉(zhuǎn)換還是一次轉(zhuǎn)換等。 3)獲a/d轉(zhuǎn)換結(jié)果 若是中斷方式,在a/d中斷程序中取得,若是查詢方式,通過adscr的第7位(coco位)取得,當coco=1

25、時可從adr中取數(shù)。/adc.ha/d轉(zhuǎn)換頭文件-*#include gp32c.h /gp32 mcu映像寄存器名定義#include type.h /類型別名定義#define cocobit 7void adcinit(void); /a/d轉(zhuǎn)換初始化 int8u adcvalue(int8u channel); /1路a/d轉(zhuǎn)換函數(shù)int8u adcmid(int8u channel); /1路a/d轉(zhuǎn)換函數(shù)(中值濾波) int8u adcave(int8u channel, int8u n); /1路a/d轉(zhuǎn)換函數(shù)(均值濾波)/adc.ca/d轉(zhuǎn)換-*/硬件連接: /ptb0/ad0

26、 接模擬量輸入端 /-*#include adc.h/adcinit:a/d轉(zhuǎn)換初始化-*/功能:設(shè)置a/d轉(zhuǎn)換時鐘頻率為1mhz /-*void adcinit(void) adclk = 0b00110000; /|_不用 /|_選擇內(nèi)部總線時鐘 /|_分頻系數(shù)為2/adcave:1路a/d轉(zhuǎn)換函數(shù)(均值濾波)-*/功能:通道channel進行n次中值濾波,求和再作均值,得出均值濾波結(jié)果 /-*int8u adcave(int8u channel, int8u n) int8u i; int16u j; j = 0; for (i = 0; i j) tmp = i; i = j; j =

27、 tmp; if (k i) if (k j) tmp = j; else tmp = k; else tmp = i; return tmp;/adcvalue:1路a/d轉(zhuǎn)換函數(shù)-*/功能:獲取通道channel的a/d轉(zhuǎn)換結(jié)果 /-*int8u adcvalue(int8u channel) int8u tmp; /1. 選取通道號adch4-adch0 = 00000-00111:ad0引腳 ad7引腳 channel &= 0b00011111; /取通道號變量的低五位(實際通道號) tmp = adscr & 0b11100000; /取adscr的高三位(取上電復(fù)位默認值000)

28、 adscr = tmp | channel; /合并上述8位 /2. 取a/d轉(zhuǎn)換結(jié)果 while (adscr & (1cocobit) = 0); return adr;/總頭文件#include includes.h/主程序void main(void) disablemcuint(); /禁止總中斷 /1. 芯片初始化 mcuinit(); /2. 模塊初始化 sciinit(); /(1) 串行口初始化 adcinit(); /(2) a/d轉(zhuǎn)換初始化 while (1) /在通道0做a/d轉(zhuǎn)換,200次中值濾波,串口發(fā)送均值濾波結(jié)果 scisend1(adcave(0, 200)

29、; 3.1.3 串行口初始化子程序該模塊是對串行通信接口(serial communication interface,sci)的比特率寄存器(scbr)、控制寄存器1(scc1)、控制寄存器2(scc2)進行設(shè)置。/sci.h串行通信頭文件/頭文件#include gp32c.h /gp32 mcu映像寄存器名定義#include type.h /類型別名定義/與sci模塊相關(guān)的mcu寄存器及有關(guān)標志位的宏定義#define resendstatusr scs1 /sci狀態(tài)寄存器 #define retestbit 5 /接收緩沖區(qū)滿標志位 #define sendtestbit 7 /發(fā)

30、送緩沖區(qū)空標志位 #define resenddatar scdr /數(shù)據(jù)寄存器 /串行通信函數(shù)聲明void sciinit(void); /串行口初始化void scisend1(int8u o); /發(fā)送1字節(jié)void scisendn(int8u n,int8u ch); /發(fā)送n字節(jié)int8u scire1(int8u *p); /接收1字節(jié)int8u sciren(int8u n,int8u ch); /接收n字節(jié)/sciinit:串行口初始化-*/功 能:對串行口進行初始化,默認為允許sci,正常碼輸出,8位數(shù)據(jù),無校驗, 允許發(fā)送器,允許接收器.查詢方式收發(fā),波特率為9600(設(shè)

31、fbus2.4576mhz) /參 數(shù):無/返 回:無/-*void sciinit(void) /1.總線頻率fbus2.4576mhz,定義波特率bt=9600 scbr=0b00000010; /2.設(shè)置允許sci,正常碼輸出、8位數(shù)據(jù)、無校驗 scc1=0b01000000; /3.設(shè)置允許發(fā)送、允許接收,查詢方式收發(fā) scc2=0b00001100; 3.1.4 串口通行模塊串口通信的主要功能是:接收時,把外部單線輸入的數(shù)據(jù)變成一個字節(jié)的并行數(shù)據(jù)送入mcu內(nèi)部;發(fā)送時,把需要發(fā)送的一個字節(jié)的并行數(shù)據(jù)轉(zhuǎn)為單線輸出。圖20給出了普遍意義上的sci的編程模型。在比特寄存器中可設(shè)置比特率,在

32、控制寄存器中設(shè)置通信格式、是否效驗、是否中斷等。sci數(shù)據(jù)寄存器既做接收數(shù)據(jù)寄存器,也可做發(fā)送數(shù)據(jù)寄存器,這并不沖突,因為發(fā)送與接收的實際工作是通過“發(fā)送移位寄存器”和“接收移位寄存器”完成。發(fā)送移位寄存器接收移位寄存器sci數(shù)據(jù)寄存器mcu內(nèi)部總線(internal bus)sci比特率寄存器sci狀態(tài)寄存器sci控制寄存器圖20 sci 編程模型該模塊包括:單字節(jié)接收、多字節(jié)接收、單字節(jié)發(fā)送、多字節(jié)發(fā)送等子程序,結(jié)構(gòu)圖如圖21。串口通信模塊單字節(jié)接收單字節(jié)發(fā)送多字節(jié)接收多字節(jié)發(fā)送圖21 串口通信/*-*文件描述:本文件包含了串行通信的4子程序,分別為: * *(1)scisend1:串行發(fā)

33、送1字節(jié) *(2)scisendn:串行發(fā)送n字節(jié) *(3)scire1:串行接收1字節(jié) *(4)sciren:串行接收n字節(jié) *-*/以下為子程序源代碼/包含頭文件#include sci.h/*scisend1:串行發(fā)送1個字節(jié)-*功 能:串行發(fā)送1個字節(jié) *參 數(shù):要發(fā)送的數(shù)據(jù) *返 回:無 *-*/void scisend1(unsigned char o) /判斷restatusr的第sendtestbit位是否為1,是1可以發(fā)送 while(1) if (resendstatusr & (1sendtestbit) != 0) resenddatar=o;break; /*scis

34、endn:串行發(fā)送n個字節(jié)-*功 能:發(fā)送數(shù)組中的n個字節(jié)數(shù)據(jù) *參 數(shù):待發(fā)送的數(shù)據(jù)字節(jié)數(shù)及其要存放的數(shù)組首地址 *返 回:無 *-*/void scisendn(unsigned char n,unsigned char ch) int i; for(i=0;in;i+) scisend1(chi); /*scire1:串行收一個字節(jié)數(shù)據(jù)-*功 能:從串行口接收1個字節(jié)的數(shù)據(jù) * *參 數(shù):標志指針p *返 回:接收到的數(shù)據(jù)(若接收失敗,返回0xff) * *說 明:參數(shù)*p帶回接收標志=0收到數(shù)據(jù),=1未收到數(shù)據(jù) * *-*/unsigned char scire1(unsigned c

35、har *p) unsigned int k; unsigned char i; /restatusr第retestbit位為1表示可接收數(shù)據(jù)for(k=0;k0xfbbb;k+) if (resendstatusr & (1=0xfbbb) i=0xff; *p=0x01; return i; /返回接收到的數(shù)據(jù) /*sciren:hc08串行接收n個字節(jié)-*功 能:接收n個字節(jié)數(shù)據(jù),并存放在ch數(shù)組中 *參 數(shù):待接收的數(shù)據(jù)字節(jié)數(shù)及其存放的數(shù)組首地址 *返 回:接收標志=0收到數(shù)據(jù),=1未收到數(shù)據(jù) *-*/unsigned char sciren(unsigned char n,unsig

36、ned char ch) int m; unsigned char fp; m=0; while (m= 127 or recvdata(i) = 0) then stemp = chr$(1) else stemp = trim(chr$(recvdata(i) end if s1 = s1 & stemp & s2 = s2 & hex$(recvdata(i) & s3 = s3 & recvdata(i) & next i txtrecv.text = s1: txtrecvhex.text = s2: txtrecvoct.text = s3 if len(s1) = 160 the

37、n s1 = : s2 = : s3 = /讓文本框光標緊跟最后 txtrecv.selstart = len(txtrecv.text) txtrecvhex.selstart = len(txtrecvhex.text) txtrecvoct.selstart = len(txtrecvoct.text) mscomm1.rthreshold = 1 /開放串行中斷end subprivate sub cmdclr_click() /單擊清空按鈕 txtsend.text = txtrecv.text = : txtrecvhex.text = : txtrecvoct.text = end subprivate sub cmdexit_click() /單擊退出按鈕 if mscomm1.portopen = true then mscomm1.portopen = false endend subprivate sub msoption1_click() /改變串口號為1 mscomm1.portopen = false mscomm1.commport = 1 mscomm1.portopen

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論