單片機(jī)C語(yǔ)言-程序結(jié)構(gòu)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
先來(lái)簡(jiǎn)單說(shuō)說(shuō)C語(yǔ)言的標(biāo)識(shí)符和關(guān)鍵字。 標(biāo)識(shí)符是用來(lái)標(biāo)識(shí)源順序中某個(gè)對(duì)象的名字的, C語(yǔ)言是大小字敏感的一種高級(jí)語(yǔ)言, 假設(shè)我們要定義一個(gè)定時(shí)器1, 標(biāo)識(shí)符由字符串, 數(shù)字和下劃線等組成, 留意的是第一個(gè)字符必須是字母或下劃線, 如“1Timer”是錯(cuò)誤的, 編譯時(shí)便會(huì)有錯(cuò)誤提示。 所以普通不要以下劃線開(kāi)頭命名標(biāo)識(shí)符。 含義明晰, 這樣有助于閱讀理解順序。 在C51編譯器中, 只支持標(biāo)識(shí)符的前32位為有效標(biāo)識(shí), 普通情況下也足夠用了。 在順序編寫(xiě)中不允許標(biāo)識(shí)符與關(guān)鍵字相同。 在KEILuVision2中的關(guān)鍵字除了有ANSIC標(biāo)準(zhǔn)的32個(gè)關(guān)鍵字外還依據(jù)51單片機(jī)的特點(diǎn)擴(kuò)展了相關(guān)的關(guān)鍵字(比如for, while等標(biāo)準(zhǔn)的還有sbit, interrupt等擴(kuò)展的, 詳細(xì)列表可以在網(wǎng)上查到)。 其真實(shí)KEILuVision2的文本編輯器中編寫(xiě)C順序, 零碎可以把保留字以不同顏色顯示, 缺省顏色為天藍(lán)色。 分無(wú)符號(hào)字符類(lèi)型unsignedchar和有符號(hào)字符類(lèi)型signedchar, 所可以表達(dá)的數(shù)值范圍是0~255。 “0”表示負(fù)數(shù), “1”表示負(fù)數(shù), 負(fù)數(shù)用補(bǔ)碼表示。 所能表示的數(shù)值范圍是-128~+127。 ??菏?牟孤胗朐?胂嗤??負(fù)二進(jìn)制數(shù)的補(bǔ)碼等于它的相對(duì)值按位取反后加1。 用于寄存一個(gè)雙字節(jié)數(shù)據(jù)。 signedint表示的數(shù)值范圍是-32768~+32767, 字節(jié)中最高位表示數(shù)據(jù)的符號(hào), “0”表示負(fù)數(shù), “1”表示負(fù)數(shù)。 unsignedint表示的數(shù)值范圍是0~65535。 float浮點(diǎn)型在十進(jìn)制中具有7位有效數(shù)字, 是符合IEEE-754標(biāo)準(zhǔn)的單精度浮點(diǎn)型數(shù)據(jù), 占用四個(gè)字節(jié)。 因浮點(diǎn)數(shù)的結(jié)構(gòu)較復(fù)雜在以后再做詳細(xì)的討論。 在這個(gè)變量中寄存的指向另一個(gè)數(shù)據(jù)的地址。 對(duì)不同的處理器長(zhǎng)度也不盡相同, 指針變量也具有類(lèi)型, 在以后專(zhuān)門(mén)探討。 bit位標(biāo)量是C51編譯器的一種擴(kuò)充數(shù)據(jù)類(lèi)型, 但不能定義位指針, 也不能定義位數(shù)組。 不是0就是1, 類(lèi)似一些高級(jí)語(yǔ)言中的Boolean類(lèi)型中的True和False。 值域?yàn)?~255。 應(yīng)用它可以訪問(wèn)51單片機(jī)外部的一切特殊功能寄存器。 在后面的語(yǔ)句中我們用以用P1=255(對(duì)P1端口的一切引腳置高電平)之類(lèi)的語(yǔ)句來(lái)操作特殊功能寄存器。 sfr16占用兩個(gè)內(nèi)存單元, sfr16和sfr一樣用于操作特殊功能寄存器, 所不同的是它用于操作占兩個(gè)字節(jié)的寄存器, sbit是C51中的一種擴(kuò)充數(shù)據(jù)類(lèi)型, 應(yīng)用它可以訪問(wèn)芯片外部的RAM中的可尋址位或特殊功能寄存器中的可尋址位。 如先前我們定義了sfrP1=0x90;, 因P1端口的寄存器是可位尋址的, 所以我們可以定義sbitP1_1=P1^1;, 異樣我們可以用P1. 1的地址去寫(xiě), 通常這些可以直接運(yùn)用零碎提供的預(yù)處理文件(如reg51. h, h), 直接援用可以省去一點(diǎn)時(shí)間, #####include//預(yù)處理文件外面定義了特殊寄存器的稱(chēng)號(hào), 如P1口定義為P1 對(duì)應(yīng)硬件電路圖如下: 順序中的把戲數(shù)據(jù)可以自以去定義, 因這里我們的LED要AT89C51的P1引腳為低電平才會(huì)點(diǎn)亮, 所以我們要向P1口的各引腳寫(xiě)數(shù)據(jù)0, P1口的八個(gè)引腳剛好對(duì)應(yīng)P1口特殊寄存器的八個(gè)二進(jìn)位, 如向P1口定數(shù)據(jù)0xFE, 最C語(yǔ)言低位D0為0, 如此類(lèi)推, 大家不難算出自己想要做的效果了。 大家編譯燒寫(xiě)看看, 顯示的速度您可以依據(jù)需求調(diào)整延時(shí)a的值, 不要超過(guò)變量類(lèi)型的值域就行了。 也沒(méi)關(guān)系, 還記得Keil的I/O口仿真功能嗎?看看這里就知道該怎樣辦了。 所以P1可以直接運(yùn)用不會(huì)出錯(cuò)啦。 接上去順序直接跳轉(zhuǎn)到main函數(shù)執(zhí)行, do-while循環(huán)保證單片機(jī)不時(shí)循環(huán)工作。 下面我們把順序換一種方式寫(xiě), 以加深對(duì)寄存器的理解。