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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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內部結構62.2.3 gp32mcu的引腳功能82.3 測溫系統(tǒng)的原理框圖92.3.1 溫度傳感器電路102.3.2 信號放大電路102.3.3 a/d轉換模塊112.3.4 溫度顯示系統(tǒng)11第三章 軟件設計 123.1 mcu方程序123.1.1 main函數123.1.2 a/d轉換模塊的基本編程方法133.1.3 串行口初始化子程序173.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

16、fh、vssad/vrefl(31引腳、32引腳):內部a/d轉換模塊的電源供給及參考電壓輸入端。vdda、vssa(1引腳、2引腳):時鐘發(fā)生器模塊(cgm)的電源供給端。 控制類引腳 (6引腳):外部低有效復位輸入或輸出引腳,有內部上拉電阻。(14引腳):外部中斷輸入引腳,有內部上拉電阻。 i/o類引腳pta7/kbd7-pta0/kbd0(42-35引腳):8位通用雙向i/o接口,每個可編程為鍵盤輸入引腳。ptb7/ad7-ptbo/ad0(32-25引腳):8位通用雙向i/o接口,也可作為8位a/d轉換輸入引腳。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引腳):芯片內振蕩器引腳。2.3 測溫系統(tǒng)的原理框圖溫度傳感器電路信號放大電路a/d轉換電路單片機系統(tǒng)溫度顯示系統(tǒng)圖1 測溫系統(tǒng)的原理框圖本測溫系統(tǒng)由溫度傳感器電路、信號放大電路、ad轉換電路、單片機系統(tǒng)、溫度

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

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

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

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

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

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

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

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

26、 接模擬量輸入端 /-*#include adc.h/adcinit:a/d轉換初始化-*/功能:設置a/d轉換時鐘頻率為1mhz /-*void adcinit(void) adclk = 0b00110000; /|_不用 /|_選擇內部總線時鐘 /|_分頻系數為2/adcave:1路a/d轉換函數(均值濾波)-*/功能:通道channel進行n次中值濾波,求和再作均值,得出均值濾波結果 /-*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轉換函數-*/功能:獲取通道channel的a/d轉換結果 /-*int8u adcvalue(int8u channel) int8u tmp; /1. 選取通道號adch4-adch0 = 00000-00111:ad0引腳 ad7引腳 channel &= 0b00011111; /取通道號變量的低五位(實際通道號) tmp = adscr & 0b11100000; /取adscr的高三位(取上電復位默認值000)

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

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

30、送緩沖區(qū)空標志位 #define resenddatar scdr /數據寄存器 /串行通信函數聲明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位數據,無校驗, 允許發(fā)送器,允許接收器.查詢方式收發(fā),波特率為9600(設

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

32、控制寄存器中設置通信格式、是否效驗、是否中斷等。sci數據寄存器既做接收數據寄存器,也可做發(fā)送數據寄存器,這并不沖突,因為發(fā)送與接收的實際工作是通過“發(fā)送移位寄存器”和“接收移位寄存器”完成。發(fā)送移位寄存器接收移位寄存器sci數據寄存器mcu內部總線(internal bus)sci比特率寄存器sci狀態(tài)寄存器sci控制寄存器圖20 sci 編程模型該模塊包括:單字節(jié)接收、多字節(jié)接收、單字節(jié)發(fā)送、多字節(jié)發(fā)送等子程序,結構圖如圖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é) *參 數:要發(fā)送的數據 *返 回:無 *-*/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ā)送數組中的n個字節(jié)數據 *參 數:待發(fā)送的數據字節(jié)數及其要存放的數組首地址 *返 回:無 *-*/void scisendn(unsigned char n,unsigned char ch) int i; for(i=0;in;i+) scisend1(chi); /*scire1:串行收一個字節(jié)數據-*功 能:從串行口接收1個字節(jié)的數據 * *參 數:標志指針p *返 回:接收到的數據(若接收失敗,返回0xff) * *說 明:參數*p帶回接收標志=0收到數據,=1未收到數據 * *-*/unsigned char scire1(unsigned c

35、har *p) unsigned int k; unsigned char i; /restatusr第retestbit位為1表示可接收數據for(k=0;k0xfbbb;k+) if (resendstatusr & (1=0xfbbb) i=0xff; *p=0x01; return i; /返回接收到的數據 /*sciren:hc08串行接收n個字節(jié)-*功 能:接收n個字節(jié)數據,并存放在ch數組中 *參 數:待接收的數據字節(jié)數及其存放的數組首地址 *返 回:接收標志=0收到數據,=1未收到數據 *-*/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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論