摘 要:在PCI單片機(jī)的C語(yǔ)言程序設(shè)計(jì)上,如何快速掌握和利用C語(yǔ)言,對(duì)于PIC單片機(jī)的程序進(jìn)行編寫(xiě)的方法進(jìn)行透徹了解,從而實(shí)現(xiàn)在PIC單片機(jī)上進(jìn)行C語(yǔ)言程序設(shè)計(jì)的相關(guān)操作,成為從事本行業(yè)廣大人員共同關(guān)心的話(huà)題。文章以此作為著力點(diǎn),對(duì)于C語(yǔ)言在PIC單片機(jī)上的程序設(shè)計(jì)進(jìn)行一定程度上的分析,期待能夠?qū)τ谙嚓P(guān)從事人員有一定的幫助和啟示作用。
關(guān)鍵詞:PIC;單片機(jī);C語(yǔ)言;程序設(shè)計(jì)
前言
當(dāng)前對(duì)于單片機(jī)來(lái)說(shuō),其應(yīng)用越來(lái)越廣泛,生產(chǎn)半導(dǎo)體的廠家對(duì)于各類(lèi)低、中、高檔的單片機(jī)系列不斷推陳出新,從而適應(yīng)市場(chǎng)的大力需求。早期的單片機(jī)程序,一般都是以匯編語(yǔ)言來(lái)進(jìn)行編寫(xiě),因?yàn)槔脜R編語(yǔ)言編寫(xiě)的程序,更為簡(jiǎn)捷和直接,并且對(duì)于如存儲(chǔ)器和I/O設(shè)備口等硬件設(shè)備,能夠進(jìn)行非常有效的控制和訪問(wèn)。不過(guò)由于是面向機(jī)器的語(yǔ)言,匯編語(yǔ)言在不同廠家以及相同廠家不同系列的單片機(jī)類(lèi)型上,一般會(huì)出現(xiàn)不兼容的現(xiàn)象,于是就出現(xiàn)了對(duì)于PIC及其他單片機(jī),不能使用匯編語(yǔ)言進(jìn)行語(yǔ)言源程序編寫(xiě)的現(xiàn)象。另外,因?yàn)椴煌瑔纹瑱C(jī)程序難以移植、產(chǎn)品升級(jí)換代等原因,以及采用助記符的低級(jí)語(yǔ)言的匯編語(yǔ)言,具有非常差的可讀性,及時(shí)閱讀自己編寫(xiě)的程序也容易產(chǎn)生困難感,這些因素對(duì)于匯編語(yǔ)言在PIC單片機(jī)上的應(yīng)用,正是其發(fā)展瓶頸所在。
隨著C語(yǔ)言的開(kāi)發(fā)利用,在PIC單片機(jī)上利用C語(yǔ)言來(lái)進(jìn)行相應(yīng)的程序設(shè)計(jì),并且具有直觀的軟件調(diào)試、高效率的代碼、方便維護(hù)和升級(jí)、代碼重復(fù)利用率高以及非常方便的跨平臺(tái)代碼移植等諸多優(yōu)點(diǎn),C語(yǔ)言在單片機(jī)的程序設(shè)計(jì)中,得到了大量而廣泛的應(yīng)用。
1 C語(yǔ)言概況介紹分析
1.1 簡(jiǎn)潔的語(yǔ)言
由于是一類(lèi)小型語(yǔ)言,因而C語(yǔ)言只有32個(gè)關(guān)鍵字和9個(gè)控制語(yǔ)句,表示方法也相對(duì)簡(jiǎn)單,僅僅需要用比較規(guī)范的方式方法,就能夠?qū)τ诤軓?qiáng)的數(shù)據(jù)類(lèi)型、程序結(jié)構(gòu)和語(yǔ)句進(jìn)行相應(yīng)的構(gòu)造。
1.2 實(shí)用并且靈活的表達(dá)方式
提供多個(gè)表達(dá)式和運(yùn)算符的方法,是C語(yǔ)言又一大特征。這個(gè)特征就表明了,可以通過(guò)多類(lèi)途徑對(duì)于問(wèn)題進(jìn)行表達(dá),并且更加靈活而主動(dòng)的對(duì)于程序進(jìn)行設(shè)計(jì)。因?yàn)闆](méi)有嚴(yán)格的對(duì)于語(yǔ)法進(jìn)行限制,因而有著比較大的自由空間提供給程序設(shè)計(jì)。
1.3 非常強(qiáng)大的表達(dá)能力
具備非常豐富的運(yùn)算符和數(shù)據(jù)結(jié)構(gòu)的C語(yǔ)言,對(duì)于各種數(shù)據(jù)結(jié)構(gòu)都進(jìn)行了包含,從而對(duì)于各類(lèi)數(shù)據(jù)結(jié)構(gòu)能夠?qū)崿F(xiàn)和進(jìn)行相應(yīng)的運(yùn)算。C語(yǔ)言一共有34種運(yùn)算符,靈活和范圍廣泛都使得它能對(duì)于難度極大的運(yùn)算,非常理想的得以實(shí)現(xiàn)。對(duì)于硬件的物理地址來(lái)說(shuō),C語(yǔ)言能進(jìn)行直接的方位和位操作,因此具備了低級(jí)語(yǔ)言和高低語(yǔ)言兼有的更多優(yōu)勢(shì)特征。另外,C語(yǔ)言既能對(duì)于系統(tǒng)軟件進(jìn)行編寫(xiě),又能對(duì)于應(yīng)用軟件進(jìn)行開(kāi)發(fā),因而現(xiàn)在已經(jīng)成為業(yè)內(nèi)一個(gè)比較普遍且通用的程序設(shè)計(jì)語(yǔ)言。
1.4 程序設(shè)計(jì)結(jié)構(gòu)化
因?yàn)榻Y(jié)構(gòu)化語(yǔ)言是C語(yǔ)言的最大特征所在,因此對(duì)于程序結(jié)構(gòu)化所需要的控制流的結(jié)構(gòu)語(yǔ)句,能夠提供相應(yīng)的條件進(jìn)行編寫(xiě)。作為程序設(shè)計(jì)的基本單位,可以利用函數(shù)來(lái)對(duì)于程序的模塊化實(shí)現(xiàn)程序,并且還可以分割成多個(gè)源文件,從而編譯出各個(gè)源文件,最后生成可執(zhí)行的目標(biāo)碼文件。
1.5 高質(zhì)量的語(yǔ)言生成目標(biāo)代碼
由于具有小工作量、比較好的可讀性、非常方便且容易的修改、調(diào)試和移植,C語(yǔ)言比起匯編語(yǔ)言來(lái)描述問(wèn)題更為迅速,并且和匯編語(yǔ)言相比代碼質(zhì)量更是旗鼓相當(dāng)。
1.6 具有可移植性
C語(yǔ)言和匯編語(yǔ)言是不同的,體現(xiàn)在后者無(wú)法進(jìn)行移植,而C語(yǔ)言在不同機(jī)器上進(jìn)行C編譯程序,公共代碼占到85%以上,因而方便移植是C語(yǔ)言編譯程序的又一優(yōu)勢(shì)特征。一般不需要改動(dòng)或者稍微加以改動(dòng),就能夠?qū)τ贑語(yǔ)言在某個(gè)環(huán)境下編寫(xiě)的程序進(jìn)行移植,并且運(yùn)行在另外一個(gè)完全不同的環(huán)境中去。
2 簡(jiǎn)單的C語(yǔ)言程序概述
對(duì)于程序所要用到的C語(yǔ)言基本知識(shí),本文對(duì)此做些簡(jiǎn)單介紹:
2.1 主函數(shù)main()
一般情況下,C語(yǔ)言由若干個(gè)函數(shù)構(gòu)成。這里所說(shuō)的函數(shù),是指某個(gè)功能的算法程序段,同時(shí)也是構(gòu)成C語(yǔ)言的基本單位。一個(gè)程序的若干組成函數(shù),可以在一個(gè)甚至幾個(gè)源程序文件里進(jìn)行保存,并且以.C為基本擴(kuò)展名,而一般的匯編語(yǔ)言的擴(kuò)展名都是ASM。在一個(gè)程序中,一般有且只有一個(gè)main為名稱(chēng)的函數(shù),也就是主函數(shù)。一般運(yùn)行程序的時(shí)候,開(kāi)始執(zhí)行的都是主函數(shù)main()。
2.2 C語(yǔ)言函數(shù)概述
函數(shù)是C語(yǔ)言程序的基本單位。在一個(gè)C語(yǔ)言程序中,有且只有一個(gè)主函數(shù)并且名為main()。這個(gè)主函數(shù),可以對(duì)于其他函數(shù)進(jìn)行調(diào)用,其他的函數(shù)也可以在互相之間進(jìn)行調(diào)用。在被調(diào)用的函數(shù)中,既可以是程序設(shè)計(jì)者自行編寫(xiě)的函數(shù),也可以是系統(tǒng)提供的庫(kù)函數(shù)。函數(shù)頭和函數(shù)體,共同組成了一個(gè)函數(shù)的兩個(gè)部分,并且具有相同的函數(shù)形式。
2.2.1 由自定義名或者稱(chēng)之為函數(shù)名、一對(duì)圓括號(hào)的函數(shù)標(biāo)志、函數(shù)形式參數(shù)名(又稱(chēng)參數(shù)表)、定義形式參數(shù)類(lèi)型(參數(shù)說(shuō)明)這幾個(gè)部分共同組成。其中,函數(shù)名和函數(shù)標(biāo)志為必須,其他選項(xiàng)則是根據(jù)需要進(jìn)行確定。需要強(qiáng)調(diào)的是,包括了函數(shù)名字和函數(shù)類(lèi)型,才能共同組成函數(shù)名。
2.2.2 由一對(duì)花括號(hào){}括起來(lái)的部分,就是函數(shù)體部分。這個(gè)括號(hào)內(nèi)的內(nèi)容組成,一般是由若干語(yǔ)句。在這些語(yǔ)句中,一類(lèi)是執(zhí)行語(yǔ)句,也就是函數(shù)功能的執(zhí)行部分功能的內(nèi)容;一類(lèi)是說(shuō)明語(yǔ)句,也有稱(chēng)作變量定義,它能起到對(duì)于函數(shù)中用到的變量進(jìn)行定義的作用。
算法處理是對(duì)于一定的功能進(jìn)行并完成的過(guò)程。這里有一類(lèi)情況需要說(shuō)明,沒(méi)有變量定義部分,但是可能存在若干的執(zhí)行語(yǔ)句,有的函數(shù)就存在這樣的情況。如果在特定的情況和環(huán)境之下,則既沒(méi)有執(zhí)行部分,也沒(méi)有聲明部分。比如一個(gè)空函數(shù),即使什么也沒(méi)有表示和執(zhí)行,也依然是一個(gè)合法的函數(shù)。
另外,在數(shù)據(jù)定義和每個(gè)語(yǔ)句的最后,都要有一個(gè)分號(hào)來(lái)加以表示。在C語(yǔ)言環(huán)境中,最先接觸到的基本符號(hào),就是分號(hào)。
2.2.3 賦值運(yùn)算符中的賦值號(hào)“=”
在賦值運(yùn)算符中,有三個(gè)表達(dá)的方式,本文分析的是最簡(jiǎn)單的賦值運(yùn)算符:
對(duì)于表達(dá)式值進(jìn)行計(jì)算,對(duì)于這個(gè)值賦給出等式左邊的變量來(lái)。一般按照從左到右的順序,對(duì)于賦值運(yùn)算符進(jìn)行計(jì)算和作業(yè),可以通過(guò)變量=表達(dá)式的格式,對(duì)其進(jìn)行表示。
3 C語(yǔ)言程序編寫(xiě)
對(duì)于某單片機(jī)端口寄存器外接的幾個(gè)LED燈的亮和滅,本文通過(guò)編寫(xiě)C程序語(yǔ)言,來(lái)對(duì)于這些燈光進(jìn)行相應(yīng)的控制。
本文使用集成開(kāi)發(fā)環(huán)境和PICC的編譯器,生成了C語(yǔ)言源程序,也就是相應(yīng)的源文件。
對(duì)于硬件的標(biāo)志頭文件,也就是頭文件或者包含頭文件進(jìn)行定義,這是編寫(xiě)C源程序時(shí)所首先必須做的。一般而言,用戶(hù)經(jīng)常要用到的標(biāo)準(zhǔn)寄存器和其位地址,都在Pich的標(biāo)志頭文件里能夠被相對(duì)應(yīng)的進(jìn)行定義,并且通過(guò)C語(yǔ)言相關(guān)的編譯器,按照編譯源程序的語(yǔ)法規(guī)則進(jìn)行詳細(xì)的定義,并且使用#include語(yǔ)句來(lái)把這個(gè)頭文件,包含到相應(yīng)的源程序之中。這樣下來(lái),對(duì)于PIC里中級(jí)產(chǎn)品的單片機(jī),就能把相應(yīng)的內(nèi)容復(fù)制到對(duì)應(yīng)的源程序里,并且對(duì)于標(biāo)準(zhǔn)寄存器的位地址和端口地址進(jìn)行定義,源程序就能合法對(duì)于這些標(biāo)準(zhǔn)寄存器和對(duì)應(yīng)位進(jìn)行使用。
4 結(jié)束語(yǔ)
對(duì)于C語(yǔ)言來(lái)說(shuō),在PIC單片機(jī)上進(jìn)行的程序設(shè)計(jì),是為了實(shí)現(xiàn)相應(yīng)的程序目標(biāo)。具體的C語(yǔ)言程序設(shè)計(jì)的范疇和案例,本文由于篇幅有限,不能進(jìn)行詳細(xì)敘述,需要各位從事本行業(yè)的相關(guān)人員積極探索,開(kāi)拓創(chuàng)新出更多優(yōu)秀案例來(lái)。
參考文獻(xiàn)
[1]廖文江,等.以開(kāi)源軟件為平臺(tái)改進(jìn)C語(yǔ)言教學(xué)[J].計(jì)算機(jī)時(shí)代,2009,(10):61-62.
[2]何欽銘,顏暉.“C程序設(shè)計(jì)基礎(chǔ)及實(shí)驗(yàn)”國(guó)家精品課程的建設(shè)經(jīng)驗(yàn)[J].計(jì)算機(jī)教育,2008(19):28-31.
[3]譚浩強(qiáng).C程序設(shè)計(jì)(第三版)[M].北京:清華大學(xué)出版社,2005(7).