張華林
[摘 要]隨著單片機(jī)所控制的對(duì)象逐漸增加,單片機(jī)本身的應(yīng)用系統(tǒng)也變得愈加復(fù)雜,傳統(tǒng)的編程方法已經(jīng)無(wú)法滿足設(shè)計(jì)以及使用的要求,因此需要采用簡(jiǎn)潔高效的模塊化設(shè)計(jì)方法進(jìn)行設(shè)計(jì)。模塊化編程不僅可以實(shí)現(xiàn)程序結(jié)構(gòu)以及編程設(shè)計(jì)的有效分工,同時(shí)能夠增加程序自身的可移植性以及設(shè)計(jì)的速度。
[關(guān)鍵詞]單片機(jī);模塊化編程;設(shè)計(jì)研究
一、模塊化編程的簡(jiǎn)述
為了形成規(guī)范化的應(yīng)用系統(tǒng)來(lái)實(shí)現(xiàn)一定的功能或控制,除了必要的硬件部分不能與相應(yīng)程序分離,程序的質(zhì)量將決定應(yīng)用系統(tǒng)的性能。實(shí)際上,大多數(shù)初學(xué)者編寫的程序只包含一個(gè)源文件,通常只有幾十或幾百行小程序是可接受的。但是,隨著單片機(jī)控制對(duì)象數(shù)量的增加,用C語(yǔ)言編寫的功能越來(lái)越多,程序代碼也越來(lái)越復(fù)雜,而所有的代碼都被寫在一起,導(dǎo)致調(diào)試起來(lái)異常煩瑣,一旦出現(xiàn)需要對(duì)程序進(jìn)行部分修改的問(wèn)題,就需要花費(fèi)程序員大量的時(shí)間與精力。因此在對(duì)復(fù)雜的單片機(jī)程序進(jìn)行設(shè)計(jì)時(shí)需要采用更加簡(jiǎn)便與高效的方法——模塊化編程。模塊化編程的優(yōu)勢(shì)在于便于分工,程序的實(shí)現(xiàn)更加簡(jiǎn)便和易于調(diào)試,有利于輕松地將程序結(jié)構(gòu)進(jìn)行劃分,增強(qiáng)程序的可讀性和可移植性,從而實(shí)現(xiàn)程序多樣化的可讀性和可移植性。
模塊化編程主要指的是一個(gè)完整的程序被分成幾個(gè)模塊,并通過(guò)一些語(yǔ)句將這些模塊組合成一個(gè)程序。在C語(yǔ)言中,模塊中只有一個(gè)C文件,模塊化設(shè)計(jì)是指程序中有多個(gè)模塊,即多個(gè)源文件和相應(yīng)的頭文件、存儲(chǔ)程序代碼的源文件、存儲(chǔ)函數(shù)的頭文件、變量聲明和引腳定義。
二、模塊化編程的方法
首先,需要新建一個(gè)文件夾并將其進(jìn)行重新命名,根據(jù)命名的文件在其下再新建三個(gè)名為mdk、obj和src的子文件夾。在mdk文件夾中存放工程文件,在obj文件夾中存放過(guò)程文件與Hex文件,在src文件夾中存放模塊程序源文件和主程序文件。
其次,需要打開(kāi)Keil軟件并且新建一個(gè)工程文件,按照一定的設(shè)計(jì)需要將工程文件進(jìn)行重新設(shè)置,將設(shè)置好的工程文件存放到mdk文件夾中。
再次,需要在keil軟件中新建main.c文件和模塊程序源文件,并且新建好的文件存放到src文件夾中,同時(shí)將所有的C文件依次添加到工程中。
最后,需要開(kāi)始對(duì)C文件進(jìn)行編譯工作。簡(jiǎn)單設(shè)置編譯輸出的選項(xiàng);在標(biāo)簽頁(yè)“Output”頁(yè)面中“CreateHex File”的選項(xiàng)前打鉤,并點(diǎn)擊頁(yè)面中的“Select Folder for Object”按鈕,將其存放到obj文件夾下;標(biāo)簽頁(yè)Listing頁(yè)面中同樣有“Select Folder for Object”按鈕,點(diǎn)擊后設(shè)置到obj文件夾下,通過(guò)這樣設(shè)置編譯生成的Hex文件和過(guò)程文件都會(huì)放在obj文件夾。接著對(duì)每個(gè)模塊的C文件進(jìn)行編譯,如果出現(xiàn)錯(cuò)誤,則按照相應(yīng)的提示進(jìn)行修改。在模塊編輯完成之后,需要對(duì)工程中所有的C文件進(jìn)行編譯處理。編譯完成之后會(huì)直接生成與工程同名的Hex文件。
最后兩步操作是整個(gè)模塊化編程的重點(diǎn),為了能夠加強(qiáng)理解,可以選取比較簡(jiǎn)單易懂的數(shù)碼管秒表為例進(jìn)行相應(yīng)步驟的講解。在沒(méi)有使用模塊化編程之前,程序結(jié)構(gòu)較為簡(jiǎn)單,所使用到的數(shù)碼管秒表語(yǔ)句也比較少,在使用模塊化編程之后,整個(gè)程序結(jié)構(gòu)變得非常清晰,也比較容易進(jìn)行修改與移植。
(一)對(duì)模塊進(jìn)行劃分
根據(jù)程序設(shè)計(jì)的要求以及所具備的功能,可以將整個(gè)工程劃分為四個(gè)模塊:主程序、延時(shí)模塊、定時(shí)器模塊和LED模塊。其中延時(shí)、定時(shí)器和LED模塊是由H文件和C文件組成,H 文件是該功能與外部的接口,而C文件則是負(fù)責(zé)實(shí)現(xiàn)具體的功能;在模塊中C文件上會(huì)寫明是程序代碼,在這個(gè)文件中包含了能實(shí)現(xiàn)功能的源代碼,編譯器從該文件編譯,并從中生成目標(biāo)文件。模塊中的H文件是頭文件,頭文件起到說(shuō)明書的作用。闡述了該模塊提供的接口函數(shù)、接口變量、一些重要的宏定義和結(jié)構(gòu)信息。頭文件必須以標(biāo)準(zhǔn)格式寫入,否則將出錯(cuò)。重要的是要注意,為了清楚地知道哪個(gè)頭文件對(duì)應(yīng)哪個(gè)源文件,頭文件和源文件的名稱應(yīng)該保持一致。
(二)對(duì)模塊進(jìn)行編寫
對(duì)于延時(shí)模塊而言,可以在原始的程序中將其進(jìn)行修改出來(lái),具體的操作步驟是:首先,編寫一個(gè)delay.h文件,用于聲明可以在外部調(diào)用的函數(shù),創(chuàng)建一個(gè)新文件,并保存名為delay.h;其次,寫一個(gè)延時(shí)delay.c文件,這是延遲模塊的具體操作。它可以直接復(fù)制和粘貼延遲功能在原程序中,文件開(kāi)頭必須#include“delay.h”。因?yàn)閡char用于H文件和C文件,所以必須添加#include“common.h”在文件中。Typedef方法通常用于定義常用的數(shù)據(jù)類型,以便形成名為common的頭文件,以便它可以直接在項(xiàng)目中的其他文件中調(diào)用。根據(jù)以上步驟,編寫了定時(shí)器和LED模塊,將H和C文件保存在src文件夾中。
(三)編寫主程序
將上文中所有編譯好的程度調(diào)用到一起,可以在對(duì)原始程序進(jìn)行修改時(shí)得出相應(yīng)的程序。需要注意模塊變量的使用,尤其是對(duì)全局變量而言,更需要注意。
(四)對(duì)每個(gè)模塊進(jìn)行編譯
編譯各模塊后四個(gè)模塊。在編譯每個(gè)模塊沒(méi)有錯(cuò)誤之后,所有文件都被編譯。在沒(méi)有錯(cuò)誤提示之后,軟件自動(dòng)生成十六進(jìn)制文件。將模塊化設(shè)計(jì)的數(shù)碼管式秒表與原來(lái)的數(shù)碼管式秒表相比,模塊化的主程序只有十幾句話,各功能模塊的語(yǔ)句功能簡(jiǎn)單易移植,整個(gè)工程程序的結(jié)構(gòu)簡(jiǎn)潔。
三、總結(jié)
上述項(xiàng)目的程序功能比較簡(jiǎn)單。通過(guò)對(duì)簡(jiǎn)單項(xiàng)目的模塊化程序設(shè)計(jì)改造,能快速地掌握單片機(jī)的模塊化程序設(shè)計(jì)方法。當(dāng)程序功能復(fù)雜、資源較多時(shí),必須采用編程模塊化進(jìn)行設(shè)計(jì)。
參考文獻(xiàn):
[1]蔡亞洲.單片機(jī)的應(yīng)用與開(kāi)發(fā)技巧[J].科技風(fēng),2009(19):205.
[2]李冰濤.單片機(jī)匯編語(yǔ)言的模塊化編程方法舉例[J].電子制作,2010(12):17-20.
[作者單位]
荊州職業(yè)技術(shù)學(xué)院
(編輯:栗國(guó)花)