PIC單片機(jī)C語(yǔ)言程序設(shè)計(jì)(2)
五、C語(yǔ)言的標(biāo)識(shí)符和關(guān)鍵字
一個(gè)完整的PIC單片機(jī)C語(yǔ)言程序,通常由包含文件(即頭文件1,變量定義、變量說(shuō)明、函數(shù)定義、函數(shù)體和注釋等六部分等組成。
1.C語(yǔ)言的標(biāo)識(shí)符
所謂標(biāo)識(shí)符,實(shí)際上是一些由程序編寫(xiě)者自定義的名稱,類(lèi)似于PIC單片機(jī)匯編語(yǔ)言中給寄存器(RAM)的命名。C語(yǔ)言中所用到的變量名、函數(shù)名、數(shù)組名、文件名等都是由標(biāo)識(shí)符組成的。
標(biāo)識(shí)符是由一串字母(常指英語(yǔ)字母)、數(shù)字和下線符(或稱下劃線)組成的字符串。標(biāo)識(shí)符的第一個(gè)字符必須是字母或下線符。按照慣例,以下線符開(kāi)頭的標(biāo)識(shí)符是系統(tǒng)程序?qū)S玫?,程序員最好不用。程序員可將下線符作為分段符使用,如SUM_1。
同一字母的大小寫(xiě)被視為不同的標(biāo)識(shí)符。即同一字母的大小寫(xiě)是不同的標(biāo)識(shí)符。
不同的C編譯器對(duì)標(biāo)識(shí)符的長(zhǎng)度有不同的限制。為了避免所編寫(xiě)的源文件能被所有C編譯器認(rèn)可,可將標(biāo)識(shí)符的長(zhǎng)度限定在8個(gè)字符以內(nèi)(即1個(gè)字節(jié))。
標(biāo)識(shí)符的命名(即自定義),最好簡(jiǎn)捷、含意清晰、便于閱讀,如用deIay表示延時(shí);用sum表示求和;用loop表示循環(huán)等。
2.C語(yǔ)言的關(guān)鍵字
關(guān)鍵字,又稱保留字,是指那些已由系統(tǒng)作了特殊定義、具有特定含義的標(biāo)識(shí)符。,程序員編寫(xiě)C程序時(shí),可用關(guān)鍵字來(lái)對(duì)所用函數(shù)參數(shù)進(jìn)行說(shuō)明、定義一些物理量,它們是C語(yǔ)言語(yǔ)句的重要組成部分,有的還直接組成簡(jiǎn)單語(yǔ)句。因此,用戶是不能將此類(lèi)標(biāo)識(shí)符(關(guān)鍵字)作為自定義標(biāo)識(shí)符使用的。
C語(yǔ)言的關(guān)鍵字分為三類(lèi),即數(shù)據(jù)類(lèi)、程序控制類(lèi)和預(yù)處理類(lèi),如表1所示。
表1
表1中所列關(guān)鍵字,讀者在編寫(xiě)C程序時(shí),將逐步學(xué)會(huì)其使用。
六、C語(yǔ)言的數(shù)據(jù)類(lèi)型
在編寫(xiě)C語(yǔ)言程序時(shí),首先要涉及的是數(shù)據(jù)描述和功能描述。數(shù)據(jù)是實(shí)現(xiàn)功能的過(guò)程,功能是數(shù)據(jù)運(yùn)算(或處理)的結(jié)果,沒(méi)有數(shù)據(jù),C程序就無(wú)法實(shí)現(xiàn)單片機(jī)規(guī)定的功能,可見(jiàn)數(shù)據(jù)在C語(yǔ)言程序中的重要性。
C語(yǔ)言的數(shù)據(jù)類(lèi)型,有基本型、構(gòu)造型、指針型三類(lèi)。對(duì)此,筆者將在使用時(shí)逐一介紹。
1.標(biāo)準(zhǔn)型
標(biāo)準(zhǔn)型數(shù)據(jù)屬于基本型數(shù)據(jù),是由C語(yǔ)言本身提供的基本數(shù)據(jù)類(lèi)型,結(jié)構(gòu)簡(jiǎn)單、使用頻率高。下面以實(shí)例對(duì)C語(yǔ)言程序中的標(biāo)準(zhǔn)型數(shù)據(jù)予以說(shuō)明。
標(biāo)準(zhǔn)型數(shù)據(jù)又分為整型數(shù)據(jù)、實(shí)型數(shù)據(jù)和字符型數(shù)據(jù)三種,每種數(shù)據(jù)又有常量和變量之分。筆者將其分類(lèi)以表格形式列出,既可供初學(xué)者編寫(xiě)C語(yǔ)言程序時(shí)查找,亦可與本文中實(shí)例程序的注釋進(jìn)行對(duì)比學(xué)習(xí),以加深對(duì)標(biāo)準(zhǔn)型數(shù)據(jù)的理解。
(1)整型常量。
1.while語(yǔ)句
(1)格式:while(條件表達(dá)式)
(2)功能:程序運(yùn)行時(shí),先判斷條件表達(dá)式,當(dāng)條件表達(dá)式的值為非零(即為“真”)時(shí),執(zhí)行while語(yǔ)句中的內(nèi)嵌語(yǔ)句,即先判斷條件表達(dá)式,再執(zhí)行語(yǔ)句。當(dāng)條件表達(dá)式為零時(shí),退出循環(huán);若表達(dá)式一開(kāi)始就為0,其while語(yǔ)句一次也不執(zhí)行;若條件表達(dá)式恒為1,則程序在while體內(nèi)一直循環(huán)。
(3)程序?qū)嵗?
1)硬件電路和功能硬件電路同《PIC單片機(jī)C語(yǔ)言程序設(shè)計(jì)(1)》一文的圖1(見(jiàn)《電子制作》2009年第10期)。圖中的RA0口外接的微動(dòng)開(kāi)關(guān)KO,作為程序的起動(dòng)開(kāi)關(guān)。KO未按下時(shí)。單片機(jī)系統(tǒng)處于等待狀態(tài),按一次KO,系統(tǒng)依次進(jìn)行以下工作:RBO口外接的LEDO點(diǎn)亮→延時(shí)→LEDO熄滅→RB2外接的LED2點(diǎn)亮→延時(shí)→LED2滅→RB4外接LED4點(diǎn)亮→延時(shí)→LED4滅→執(zhí)行間斷語(yǔ)句break終止循環(huán)→點(diǎn)亮RB6外接的LED6→回到等待狀態(tài),直到RA0外接的微動(dòng)開(kāi)關(guān)KO再次按下,再重復(fù)上述過(guò)程。
2)源文件清單。
本實(shí)例2的程序清單如下(源文件名PIC02.C):
說(shuō)明:
① 上述程序中,關(guān)鍵字break、continue和return等組成的簡(jiǎn)單語(yǔ)句的使用是略有區(qū)別的。具體區(qū)別如下:
間斷語(yǔ)句break:程序運(yùn)行到此就終止循環(huán),跳出while(1)的循環(huán)體,執(zhí)行該循環(huán)體緊接在后面的語(yǔ)句:
· 繼續(xù)語(yǔ)句continue:如果把該程序中的break語(yǔ)句換成繼續(xù)語(yǔ)句continue。程序運(yùn)行到此便立即執(zhí)行由while(1)開(kāi)始功能的程序,即程序在該循環(huán)體內(nèi)不斷地運(yùn)行,等效于不用continue;語(yǔ)句;·return語(yǔ)句:當(dāng)把該程序中的break換成return語(yǔ)句時(shí),程序運(yùn)行到此就會(huì)立即返回主程序運(yùn)行。
讀者學(xué)習(xí)C語(yǔ)言時(shí),一定要將實(shí)例2源程序中的關(guān)鍵字“break”分別用“coutinue”和“return”代換并運(yùn)行程序,同時(shí)觀察使用三種不同的關(guān)鍵字時(shí)LED指示燈的不同狀態(tài),方能體會(huì)出三者的差異。
② 關(guān)于帶形式參數(shù)(簡(jiǎn)稱形參)的延時(shí)函數(shù)。
實(shí)例2所用的延時(shí)函數(shù)與實(shí)例1不同。實(shí)例1(見(jiàn)《電子制作》2009年第10期)用的是無(wú)參數(shù)函數(shù),功能簡(jiǎn)單,一個(gè)函數(shù)完成一定的延時(shí)。實(shí)例2用的是有參數(shù)延時(shí)函數(shù),一個(gè)函數(shù)可完成不同的延時(shí)(如上述實(shí)例2 中的延時(shí)1、延時(shí)2、延時(shí)3、延時(shí)4)。這是因?yàn)?,帶形參函?shù)(如實(shí)例2中的延時(shí)函數(shù)v0id delay(K))可以借助參數(shù)的傳遞功能來(lái)完成不同時(shí)間的設(shè)置,這是匯編語(yǔ)言所無(wú)法做到的。由此可見(jiàn),采用C語(yǔ)言可大大簡(jiǎn)化程序的編寫(xiě)工作。
鑒于形參對(duì)熟悉匯編語(yǔ)言的設(shè)計(jì)人員來(lái)說(shuō)是一個(gè)全新的概念,有關(guān)C語(yǔ)言的函數(shù)參數(shù)傳遞功能,我們?cè)诤罄m(xù)的文章中還將進(jìn)一步介紹,以加深大家對(duì)其的理解。
整型常量,是指在程序運(yùn)行過(guò)程中數(shù)值保持不變的量,在編寫(xiě)C程序時(shí),整型常量用關(guān)鍵字cONST進(jìn)行定義。表2給出了各種常量的類(lèi)型、表示方法及示例說(shuō)明。
表2
(2)整型變量。
整型變量。是指在程序運(yùn)行過(guò)程中數(shù)值會(huì)改變的量。整型(即整數(shù)類(lèi)型)變量的基本型是lnt。
Int可以保存一個(gè)整數(shù),并允許在_nl前加上基本型、短整型、長(zhǎng)整型,以及無(wú)符號(hào)型等四種整型類(lèi)型。下面分別加以說(shuō)明1)基本型:標(biāo)志是int。
2)短整型:標(biāo)志是short int。
3)長(zhǎng)整型:標(biāo)志是long int。
4)無(wú)符號(hào)型:存儲(chǔ)單元中,全部二進(jìn)制位均用來(lái)存放整數(shù)自身。而不包括符號(hào)位。無(wú)符號(hào)型又分為無(wú)符號(hào)整型、無(wú)符號(hào)短整型、無(wú)符號(hào)長(zhǎng)整型三種。
①無(wú)符號(hào)整型:標(biāo)志是unsigned int:
②無(wú)符號(hào)短整型:標(biāo)志是unsigned short int;
③無(wú)符號(hào)長(zhǎng)整型:標(biāo)志是unsigned Iong int。
以上C語(yǔ)言變量的要點(diǎn),是相關(guān)的關(guān)鍵字,以及每個(gè)整型變量的取值范圍,即長(zhǎng)度(二進(jìn)制位個(gè)數(shù))。
PlC單片機(jī)C語(yǔ)言的整型變量、數(shù)據(jù)名稱、取值范圍如表3所示。表中的內(nèi)容,在編寫(xiě)C程序時(shí)經(jīng)常使用,初學(xué)者應(yīng)熟練掌握。
表3
說(shuō)明:1.表3列出了整型變量的取值范圍。例如,從表3中可以看出,無(wú)符號(hào)長(zhǎng)整型變量unsigned long int的最大取值可達(dá)10位數(shù),將其用于延時(shí)函數(shù),僅用一條循環(huán)語(yǔ)句,延時(shí)便可達(dá)20小時(shí)以上(參看下文中的實(shí)例2)。2.對(duì)于表3中的字符型(char)、浮點(diǎn)型(float)和雙精度型doable等整型變量,將在本連載后續(xù)文章的程序使用到時(shí)進(jìn)行說(shuō)明。
七、C語(yǔ)言的控制循環(huán)語(yǔ)句
在C語(yǔ)言程序中,會(huì)用到多種功能語(yǔ)句??刂蒲h(huán)語(yǔ)句(下稱循環(huán)語(yǔ)句)便是其中之一。
C語(yǔ)言的循環(huán)語(yǔ)句有三種,即while語(yǔ)句、do while語(yǔ)句和for語(yǔ)句。循環(huán)語(yǔ)句一般由循環(huán)控制條件來(lái)控制循環(huán)的重復(fù)次數(shù)。如果控制條件沒(méi)有完成,要想終止循環(huán),可在循環(huán)體中用間斷語(yǔ)句break、返回語(yǔ)句retum,或者用繼續(xù)語(yǔ)句continue來(lái)終止當(dāng)前循環(huán)周期中的操作,使控制進(jìn)入其他程序段。下面逐一進(jìn)行介紹,并通過(guò)程序?qū)嵗齺?lái)說(shuō)明其應(yīng)用,以利大家加深理解。
標(biāo)簽: 程序設(shè)計(jì)