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