當(dāng)前位置:歐亞貿(mào)易網(wǎng) > 技術(shù)中心 > 所有分類
智能電磁流量計(jì)系統(tǒng)智能化軟件設(shè)計(jì)
在本項(xiàng)目的設(shè)計(jì)中,我們采用C196作為單片機(jī)系統(tǒng)的開發(fā)語言149,52,s3】。使用c語言進(jìn)行流量計(jì)單片機(jī)系統(tǒng)的開發(fā),有著匯編語言編程所不可比擬的優(yōu)勢,介紹如下:
1.編程調(diào)試靈活方便
C語言編程靈活,同時(shí),當(dāng)前幾乎所有嵌入式系統(tǒng)都有相應(yīng)的C語言級別的仿真調(diào)試系統(tǒng),調(diào)試十分方便。
2.生成的代碼編譯效率高
當(dāng)前較好的c語言編譯系統(tǒng)編譯出來的代碼效率只比直接使用匯編低20% 左右,如果使用優(yōu)化編譯選項(xiàng)甚至可以更低。
3.模塊化開發(fā)
目前的軟硬件開發(fā)都向模塊化、可復(fù)用性的目標(biāo)集中。不管是硬件還是軟件, 都希望其有比較通用的接口,在以后的開發(fā)中如果需要實(shí)現(xiàn)相同或者相近的功能, 就可以直接使用以前開發(fā)過的模塊,盡量不做或者少做改動(dòng),以減少重復(fù)勞動(dòng)。如果使用C語言開發(fā),數(shù)據(jù)交換可方便地通過約定實(shí)現(xiàn),有利于多人協(xié)同進(jìn)行人項(xiàng)目的合作開發(fā)。同時(shí),C語言的模塊化開發(fā)方式使開發(fā)出來的程序模塊可不經(jīng)修改.直接被其他項(xiàng)目所用,這樣就可以很好地利用已有的大量C程序資源與豐富的庫函數(shù),從而地實(shí)現(xiàn)資源共享。
4.可移植性好
由于不同系列的嵌入式系統(tǒng)的c語言編譯工具都是以ANSI-C作為基礎(chǔ)進(jìn)行開發(fā)的,因此,一種C語言環(huán)境下所編寫的C語言程序,只需將部分與硬件相關(guān)的地方和編譯連接的參數(shù)進(jìn)行適當(dāng)修改,就可方便移植到另外一種系列上.
5.便于項(xiàng)目維護(hù)管理
用c語言開發(fā)的代碼便于開發(fā)小組計(jì)劃項(xiàng)目、靈活管理、分工合作以及后期維護(hù),基本上可以杜絕因開發(fā)人員變化而給項(xiàng)目進(jìn)度、后期維護(hù)或升級所帶來的影響。從而保證整個(gè)系統(tǒng)的品質(zhì)、可靠性以及可升級性。
4.1智能電磁流量計(jì)功能模塊的劃分
智能電磁流量計(jì)轉(zhuǎn)換器的工作過程,不僅要求CPU對來自傳感器的流量信號進(jìn)行采集、處理、運(yùn)算、顯示,完成流量、流速的檢測,同時(shí)還要控制產(chǎn)生低頻矩形波勵(lì)磁電流、輸出流量的積算總量值和輸出模擬電流、頻率以及數(shù)字通訊信等等,所以本系統(tǒng)智能電磁流量計(jì)的軟件部分設(shè)計(jì)是比較復(fù)雜的,根據(jù)上面提到的各個(gè)功能,主要功能可以劃分為:
1、單片機(jī)看門狗保護(hù):
3、鍵盤管理:
5、寄存器管理;
7、輸入信號數(shù)字預(yù)處理;
9、網(wǎng)絡(luò)通信。
11、報(bào)警;
2、數(shù)據(jù)采集部分控制;
4、LCD顯示控制;
6、勵(lì)磁控制;
8、流量計(jì)算;
10、正反向流量檢測;
在這里要說明的是,這些任務(wù)的操作并不總是順序執(zhí)行的,在很多時(shí)候需要并行地操作。如通信、鍵盤管理等在任何時(shí)候都有可能發(fā)生,流量計(jì)算可能消耗比較多的時(shí)間,數(shù)據(jù)采集需要定時(shí)進(jìn)行等等。當(dāng)然從指令層來看其程序仍是一條指令接一條指令順序執(zhí)行,但從宏觀上來說,這些任務(wù)的處理是并行的。
4.2系統(tǒng)主程序
系統(tǒng)的主程序主要由主循環(huán)和初試化程序構(gòu)成,其流程見圖4.1所示。裝置圖4.1主程序流程圖上電復(fù)位或手動(dòng)、硬件復(fù)位后,微處理器80C196Kc就要響應(yīng)復(fù)位信號,然后程序從地址0x2080開始執(zhí)行。程序入口的個(gè)模塊是程序初始化模塊,包括對相關(guān)硬件的初始化和相應(yīng)參數(shù)的初始化。硬件初始化主要是完成開關(guān)量輸出初始化, 顯示芯片初始化,微控制器的中斷,串行口、定時(shí)器等硬件資源的初始化,主要是對特殊寄存器的復(fù)制賦值;相應(yīng)參數(shù)的初始化包括對程序中各個(gè)變量的初始賦值,比如對鍵值的初始賦值等;而主程序框圖中的各個(gè)子程序的執(zhí)行,指的是對一些功能模塊的初始設(shè)置,這里主要指LCD顯示模塊的初始工作設(shè)置,在系統(tǒng)開始上電或復(fù)位工作以后,應(yīng)在LCD上顯示一些特殊意義的信息,如儀表型號、生產(chǎn)廠家名稱、商標(biāo)等文字圖案信息。還有其他的子程序初始化包括數(shù)據(jù)采集初始化子程序在系統(tǒng)開始工作之前,應(yīng)對采集所存儲(chǔ)的地址指針清零等工作。在程序的主循環(huán)中,我們采用了檢測標(biāo)志位的方法,運(yùn)用中斷服務(wù)程序產(chǎn)生各執(zhí)行的標(biāo)志位,通過對其標(biāo)志為的判定,來執(zhí)行相應(yīng)的子程序。
4.3看門狗程序
WATCHDOG(俗稱“看門狗”)是單片機(jī)抗干擾的軟件措施p”43,48】,它具有的特點(diǎn)是本身能獨(dú)立工作,基本不依賴于CPU,CPU只在一個(gè)固定的時(shí)間間隔內(nèi)與其打一次交道,表明整個(gè)系統(tǒng)“目前尚屬正常”;另一個(gè)一個(gè)特點(diǎn)是當(dāng)CPU 落入死循環(huán)后,能及時(shí)發(fā)現(xiàn)并使整個(gè)系統(tǒng)復(fù)位。我們這里采用的是WATCHDOG 硬件電路配合的措施,并不是純軟件的WATCHDOG系統(tǒng)。一般的。WATCHDOG 硬件電路為一獨(dú)立于CPU之外的單穩(wěn)部件,可用單穩(wěn)電路構(gòu)成,也可用自帶脈沖源的計(jì)數(shù)器構(gòu)成。CPU正常工作時(shí)每隔一段時(shí)間就輸出一個(gè)脈沖,將單穩(wěn)系統(tǒng)觸發(fā)到暫穩(wěn)態(tài)。當(dāng)CPU陷入死循環(huán)后,再也不去觸發(fā)單穩(wěn)系統(tǒng)了,單穩(wěn)系統(tǒng)就可順利返回穩(wěn)態(tài)。利用它返回穩(wěn)態(tài)時(shí)輸出的信號作為復(fù)位信號,就可以使CPU退出死循環(huán)。這其中對于“喂狗”時(shí)機(jī)的考慮,也就是指復(fù)位“看門狗”,一般安排在等待查詢的循環(huán)體內(nèi)部、耗時(shí)很大的函數(shù)體內(nèi)部或主程序任務(wù)隊(duì)列中,下面就是一個(gè)“喂狗”的程序: void ClrRst(void) { unsigned char temp; if(RelyConFlag一0x劬{ tcmp 2iaportl; tcmp---temp&Oxef ioportl=temp; } }