單片機(jī)C語(yǔ)言數(shù)據(jù)類型_第1頁(yè)
單片機(jī)C語(yǔ)言數(shù)據(jù)類型_第2頁(yè)
單片機(jī)C語(yǔ)言數(shù)據(jù)類型_第3頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上單片機(jī)C語(yǔ)言的數(shù)據(jù)類型在最小系統(tǒng)的介紹中,我們已經(jīng)大致了解了單片機(jī)的程序結(jié)構(gòu),下面我們來(lái)系統(tǒng)介紹一下。先來(lái)簡(jiǎn)單說(shuō)說(shuō)C語(yǔ)言的標(biāo)識(shí)符和關(guān)鍵字。標(biāo)識(shí)符是用來(lái)標(biāo)識(shí)源程序中某個(gè)對(duì)象的名字的,這些對(duì)象可以是語(yǔ)句、數(shù)據(jù)類型、函數(shù)、變量、數(shù)組等等。C語(yǔ)言是大小字敏感的一種高級(jí)語(yǔ)言,如果我們要定義一個(gè)定時(shí)器1,可以寫(xiě)做“Timer1”,如果程序中有“TIMER1”,那么這兩個(gè)是完全不同定義的標(biāo)識(shí)符。標(biāo)識(shí)符由字符串,數(shù)字和下劃線等組成,注意的是第一個(gè)字符必須是字母或下劃線,如“1Timer”是錯(cuò)誤的,編譯時(shí)便會(huì)有錯(cuò)誤提示。有些編譯系統(tǒng)專用的標(biāo)識(shí)符是以下劃線開(kāi)頭,所以一般不要以下劃線開(kāi)頭命

2、名標(biāo)識(shí)符。標(biāo)識(shí)符在命名時(shí)應(yīng)當(dāng)簡(jiǎn)單,含義清晰,這樣有助于閱讀理解程序。在C51編譯器中,只支持標(biāo)識(shí)符的前32位為有效標(biāo)識(shí),一般情況下也足夠用了。關(guān)鍵字則是編程語(yǔ)言保留的特殊標(biāo)識(shí)符,它們具有固定名稱和含義,在程序編寫(xiě)中不允許標(biāo)識(shí)符與關(guān)鍵字相同。在KEIL uVision2中的關(guān)鍵字除了有ANSI C標(biāo)準(zhǔn)的32個(gè)關(guān)鍵字外還根據(jù)51單片機(jī)的特點(diǎn)擴(kuò)展了相關(guān)的關(guān)鍵字(比如for,if,while等標(biāo)準(zhǔn)的還有sbit,code,interrupt等擴(kuò)展的,具體列表可以在網(wǎng)上查到)。其實(shí)在KEIL uVision2的文本編輯器中編寫(xiě)C程序,系統(tǒng)可以把保留字以不同顏色顯示,缺省顏色為天藍(lán)色。在標(biāo)準(zhǔn)C語(yǔ)言中基本的

3、數(shù)據(jù)類型為char,int,short,long,float 和double,而在C51編譯器中int和short相同,float和double相同,這里就不列出說(shuō)明了。1 char 字符類型char類型的長(zhǎng)度是一個(gè)字節(jié),通常用于定義處理字符數(shù)據(jù)的變量或常量。分無(wú)符號(hào)字符類型unsigned char和有符號(hào)字符類型signed char,默認(rèn)值為signed char類型。unsigned char類型用字節(jié)中所有的位來(lái)表示數(shù)值,所可以表達(dá)的數(shù)值范圍是0255。signed char類型用字節(jié)中最高位字節(jié)表示數(shù)據(jù)的符號(hào),“0”表示正數(shù),“1”表示負(fù)數(shù),負(fù)數(shù)用補(bǔ)碼表示。所能表示的數(shù)值范圍是-1

4、28+127。unsigned char常用于處理ASCII字符或用于處理小于或等于255的整型數(shù)。正數(shù)的補(bǔ)碼與原碼相同,負(fù)二進(jìn)制數(shù)的補(bǔ)碼等于它的絕對(duì)值按位取反后加1。2 int 整型int整型長(zhǎng)度為兩個(gè)字節(jié),用于存放一個(gè)雙字節(jié)數(shù)據(jù)。分有符號(hào)int整型數(shù)signed int和無(wú)符號(hào)整型數(shù)unsigned int,默認(rèn)值為signed int類型。signed int表示的數(shù)值范圍是-32768+32767,字節(jié)中最高位表示數(shù)據(jù)的符號(hào),“0”表示正數(shù),“1”表示負(fù)數(shù)。unsigned int表示的數(shù)值范圍是065535。3 long 長(zhǎng)整型long長(zhǎng)整型長(zhǎng)度為四個(gè)字節(jié),用于存放一個(gè)四字節(jié)數(shù)據(jù)。分

5、有符號(hào)long長(zhǎng)整型signed long和無(wú)符號(hào)長(zhǎng)整型unsigned long,默認(rèn)值為signed long類型。signed int表示的數(shù)值范圍是-+,字節(jié)中最高位表示數(shù)據(jù)的符號(hào),“0”表示正數(shù),“1”表示負(fù)數(shù)。unsigned long表示的數(shù)值范圍是0。4 float 浮點(diǎn)型float浮點(diǎn)型在十進(jìn)制中具有7位有效數(shù)字,是符合IEEE754標(biāo)準(zhǔn)的單精度浮點(diǎn)型數(shù)據(jù),占用四個(gè)字節(jié)。因浮點(diǎn)數(shù)的結(jié)構(gòu)較復(fù)雜在以后再做詳細(xì)的討論。5 * 指針型指針型本身就是一個(gè)變量,在這個(gè)變量中存放的指向另一個(gè)數(shù)據(jù)的地址。這個(gè)指針變量要占據(jù)一定的內(nèi)存單元,對(duì)不同的處理器長(zhǎng)度也不盡相同,在C51中它的長(zhǎng)度一般為

6、13個(gè)字節(jié)。指針變量也具有類型,在以后專門探討。6 bit 位標(biāo)量bit位標(biāo)量是C51編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可定義一個(gè)位標(biāo)量,但不能定義位指針,也不能定義位數(shù)組。它的值是一個(gè)二進(jìn)制位,不是0就是1,類似一些高級(jí)語(yǔ)言中的Boolean類型中的True和False。7 sfr 特殊功能寄存器sfr也是一種擴(kuò)充數(shù)據(jù)類型,點(diǎn)用一個(gè)內(nèi)存單元,值域?yàn)?255。利用它可以訪問(wèn)51單片機(jī)內(nèi)部的所有特殊功能寄存器。如用sfr P1 = 0x90 這一句定P1為P1端口在片內(nèi)的寄存器,在后面的語(yǔ)句中我們用以用P1 = 255(對(duì)P1端口的所有引腳置高電平)之類的語(yǔ)句來(lái)操作特殊功能寄存器。8 sfr16

7、16位特殊功能寄存器sfr16占用兩個(gè)內(nèi)存單元,值域?yàn)?65535。sfr16和sfr一樣用于操作特殊功能寄存器,所不同的是它用于操作占兩個(gè)字節(jié)的寄存器,如定時(shí)器T0和T1。9 sbit 可錄址位sbit是C51中的一種擴(kuò)充數(shù)據(jù)類型,利用它可以訪問(wèn)芯片內(nèi)部的RAM中的可尋址位或特殊功能寄存器中的可尋址位。如先前我們定義了sfr P1 = 0x90; ,因P1端口的寄存器是可位尋址的,所以我們可以定義sbit P1_1 = P11; ,意思是定義P1_1 為P1中的P1.1引腳。同樣我們可以用P1.1的地址去寫(xiě),如sbit P1_1 = 0x91; ,這樣我們?cè)谝院蟮某绦蛘Z(yǔ)句中就可以用P1_1來(lái)

8、對(duì)P1.1引腳進(jìn)行讀寫(xiě)操作了。通常這些可以直接使用系統(tǒng)提供的預(yù)處理文件(如reg51.h,AT89X51.h),里面已定義好各特殊功能寄存器的簡(jiǎn)單名字,直接引用可以省去一點(diǎn)時(shí)間,當(dāng)然你也可以自己寫(xiě)自己的定義文件,用你認(rèn)為好記的名字。以上就是Keil 51中常用的數(shù)據(jù)類型,下面我們來(lái)看一個(gè)跑馬燈的程序,加深了解一下C51的程序結(jié)構(gòu)。#include <AT89X51.H> /預(yù)處理文件里面定義了特殊寄存器的名稱,如P1口定義為P1void main(void)/定義花樣數(shù)據(jù)const unsigned char design32=0xFF, 0xFE, 0xFD, 0xFB, 0xF

9、7, 0xEF, 0xDF, 0xBF, 0x7F, 0x7F, 0xBF, 0xDF, 0xEF, 0xF7, 0xFB, 0xFD, 0xFE, 0xFF, 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x0, 0xE7, 0xDB, 0xBD, 0x7E, 0xFF ;unsigned int a; /定義循環(huán)用的變量unsigned char b; /在C51編程中因內(nèi)存有限盡可能注意變量類型的使用盡可能使用少字節(jié)的類型,在大型的程序中很受用dofor (b=0; b<32; b+)for(a=0; a<30000; a+

10、); /延時(shí)一段時(shí)間P1 = designb; /讀已定義的花樣數(shù)據(jù)并寫(xiě)花樣數(shù)據(jù)到P1口while(1);對(duì)應(yīng)硬件電路圖如下:程序中的花樣數(shù)據(jù)可以自以去定義,因這里我們的LED要AT89C51的P1引腳為低電平才會(huì)點(diǎn)亮,所以我們要向P1口的各引腳寫(xiě)數(shù)據(jù)0,對(duì)應(yīng)連接的LED才會(huì)被點(diǎn)亮,P1口的八個(gè)引腳剛好對(duì)應(yīng)P1口特殊寄存器的八個(gè)二進(jìn)位,如向P1口定數(shù)據(jù)0xFE,轉(zhuǎn)成二進(jìn)制就是,最低位D0為0,這里P1.0引腳輸出低電平,LED1被點(diǎn)亮。如此類推,大家不難算出自己想要做的效果了。大家編譯燒寫(xiě)看看,效果就出來(lái),顯示的速度您可以根據(jù)需要調(diào)整延時(shí)a的值,不要超過(guò)變量類型的值域就行了。如果你還沒(méi)有開(kāi)發(fā)板

11、,或者連最小系統(tǒng)板也沒(méi)自己焊一塊,也沒(méi)關(guān)系,還記得Keil的I/O口仿真功能嗎?看看這里就知道該怎么辦了?;氐匠绦蛑衼?lái),第一句的#include跟C語(yǔ)言里面的引用是一樣的,這個(gè)頭文件包含了程序中沒(méi)有聲明的變量P1,所以P1可以直接使用不會(huì)出錯(cuò)啦。接下來(lái)程序直接跳轉(zhuǎn)到main函數(shù)執(zhí)行,do-while循環(huán)保證單片機(jī)一直循環(huán)工作。下面我們把程序換一種方式寫(xiě),以加深對(duì)寄存器的理解。sfr P1 = 0x90; /這里沒(méi)有使用預(yù)定義文件,而是自己定義特殊寄存器,之前我們使用的預(yù)定義文件其實(shí)就是這個(gè)作用sbit P1_0 = P10;sbit P1_7 = 0x907;sbit P1_1 = 0x91; /這里分別定義P1端口和P10,P11,P17引腳void main(void)unsigned int a;unsigned char b;dofor (a=0;a<50000;a+)P1_0 = 0; /點(diǎn)亮P1_0for (a=0;a<50000;a+)P1_7 = 0; /點(diǎn)亮P1_7for (b=0;b<255;b+)for (a=0;a<10000;a+)P1 = b; /用b的值來(lái)做跑馬燈的花樣P1 = 255; /熄滅P1上的LEDfor (

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論