基于LPC2210和DS18B20設(shè)計(jì)網(wǎng)絡(luò)化的智能溫度傳感器
NET_RST為LPC2210輸出引腳,RTL8019AS中斷信號(hào)為中斷輸入信號(hào),且為外部中斷。RTL8019AS的SDO~SDl5串了一個(gè)470 Ω電阻連接到LPC2210的D0~D15。此外,該系統(tǒng)還加入了LCM接口,可以直接支持SMG240128A點(diǎn)陣圖形液晶模塊,便于通過(guò)液晶實(shí)時(shí)顯示傳感器所接收的溫度。本文引用地址:http://www.ex-cimer.com/article/162967.htm
3 系統(tǒng)軟件分析
3.1 總體設(shè)計(jì)
系統(tǒng)開發(fā)采用的是ARM公司的ADS1.2作為開發(fā)編譯環(huán)境。移植了μC/OS―II操作系統(tǒng),主要采用C語(yǔ)言編寫。將μC/OS―II移植到ARM處理器上,需要修改3個(gè)與ARM體系結(jié)構(gòu)相關(guān)的文件:OS_CPU.H、0S_CPU_A.ASM、OS_CPU_C.C。具體移植請(qǐng)參考相關(guān)書籍。
程序首先調(diào)用OSinit()初始化μC/OS―II,完成對(duì)操作系統(tǒng)內(nèi)部一些變量、數(shù)據(jù)結(jié)構(gòu)和宏定義的初始化。在開始多任務(wù)之前,還需建立一個(gè)名為Task0()的任務(wù),這一點(diǎn)是非常重要的,否則用戶的應(yīng)用程序就會(huì)崩潰。主任務(wù)中首先調(diào)用TargetInit()函數(shù)將目標(biāo)板初始化,模板中包含這個(gè)初始化函數(shù),它完成對(duì)板上硬件的一些初始化工作。之后啟動(dòng)多任務(wù)環(huán)境,創(chuàng)建3個(gè)任務(wù)來(lái)實(shí)現(xiàn)系統(tǒng)最終的目標(biāo)。這3個(gè)任務(wù)包括:傳感器對(duì)溫度的采集和處理;溫度比較與液晶顯示;建立Web服務(wù)器。下面對(duì)設(shè)計(jì)過(guò)程中比較關(guān)鍵問題進(jìn)行詳細(xì)的闡述。
3.2 軟件設(shè)計(jì)中的關(guān)鍵技術(shù)問題
3.2.1 傳感器的溫度采集
在對(duì)傳感器數(shù)據(jù)采集的軟件編程中,采用的是單線總線協(xié)議。通過(guò)單線總線訪問DSl8820的協(xié)議包括:初始化DSl8820、ROM操作命令、存儲(chǔ)器操作命令和讀數(shù)據(jù)/處理數(shù)據(jù)。
根據(jù)DSl8820的初始化時(shí)序、寫時(shí)序和讀時(shí)序,分別編寫3個(gè)子程序:Init_DSl8820為初始化子程序;WriteOneChar為寫(命令或數(shù)據(jù))子程序;ReadOneChar為讀數(shù)據(jù)子程序。所有的數(shù)據(jù)讀/寫均由最低位開始。
該系統(tǒng)的讀字節(jié)子程序的流程如圖4所示。
溫度傳感器采集的關(guān)鍵任務(wù)程序代碼如下:
3.2.2 Web服務(wù)器的建立
要在微處理器中建立Web服務(wù)器,主要需要實(shí)現(xiàn)TCP/IP協(xié)議棧的移植。設(shè)計(jì)中主要采用ZLG/IP軟件包,它是廣州周立功單片機(jī)發(fā)展有限公司開發(fā)的面向嵌入式系統(tǒng)開發(fā)的TCP/IP協(xié)議棧,是ZLG系列中間件的重要成員之一。ZLG/IP提供實(shí)現(xiàn)Internet網(wǎng)絡(luò)上IP接點(diǎn)的功能,是一種高性能的嵌入式TCP/IP協(xié)議棧軟件。它使用μC/OS―II實(shí)時(shí)操作系統(tǒng)的信號(hào)機(jī)制來(lái)實(shí)現(xiàn)一個(gè)多任務(wù)并行、可重入的協(xié)議棧,完全使用ANSI C編寫,可以像μC/OS―II那樣支持多種CPU。ZLG/IP還具有層次清晰、易于升級(jí)和修改等特點(diǎn)。該ZLG/IP軟件包具體可見參考文獻(xiàn)。
ZLG/IP采用模塊化層次結(jié)構(gòu)設(shè)計(jì),其結(jié)構(gòu)如圖5所示。
圖5中,TCP/IP應(yīng)用程序是用戶自己編寫的μC/OS―II任務(wù),是ZLG/IP的使用者,位于整個(gè)程序的最高層。TCP/IP應(yīng)用程序調(diào)用ZLG/IP提供的Socket API接口函數(shù)對(duì)網(wǎng)絡(luò)進(jìn)行相應(yīng)的操作。Socket API接口位于TCP/IP協(xié)議與應(yīng)用程序之間,是用戶操作協(xié)議棧程序的工具,在應(yīng)用程序中通過(guò)調(diào)用Socket API接口函數(shù)來(lái)對(duì)協(xié)議棧軟件進(jìn)行操作。TCP、UDP處理模塊是協(xié)議棧程序中處理傳輸層協(xié)議的模塊,負(fù)責(zé)對(duì)傳輸層的數(shù)據(jù)進(jìn)行封裝和解拆,保存?zhèn)鬏攲舆B接狀態(tài)。點(diǎn)劃線內(nèi)部就是接收處理,包括IP報(bào)、ARP報(bào)、ICMP報(bào)的處理,及以太網(wǎng)層的數(shù)據(jù)接收驅(qū)動(dòng)。接收驅(qū)動(dòng)模塊在接收到數(shù)據(jù)后先進(jìn)行分類,若是IP報(bào)就由IP處理模塊處理,若是ARP報(bào)就進(jìn)行ARP協(xié)議處理。ARP請(qǐng)求報(bào)調(diào)用以太網(wǎng)發(fā)送模塊發(fā)送ARP應(yīng)答報(bào)。IP處理模塊把數(shù)據(jù)分類,TCP或UDP報(bào)則轉(zhuǎn)由上層的傳輸層模塊處理,而ICMP協(xié)議處理模塊負(fù)責(zé)對(duì)IC―MP協(xié)議進(jìn)行處理。IP發(fā)送模塊負(fù)責(zé)封裝IP報(bào),并把封裝好的IP報(bào)傳送到下層發(fā)送模塊。IP發(fā)送模塊有4個(gè)上層模塊調(diào)用:分別是Socket API接口、UDP處理、TCP處理和ICMP處理。它們把相應(yīng)的參數(shù)傳送給IP發(fā)送模塊,由IP發(fā)送模塊來(lái)封裝。Ethernet發(fā)送驅(qū)動(dòng)模塊是屬于以太網(wǎng)層的處理模塊,負(fù)責(zé)封裝以太網(wǎng)報(bào)和數(shù)據(jù)的發(fā)送,調(diào)用它的模塊有ARP處理模塊和IP發(fā)送模塊。
評(píng)論