在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)C語(yǔ)言學(xué)習(xí)4

            51單片機(jī)C語(yǔ)言學(xué)習(xí)4

            作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
            第四課 數(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ì)象的名字的,這些對(duì)象可以是語(yǔ)句、數(shù)據(jù)類型、函數(shù)、變量、數(shù)組等等。C語(yǔ)言是大小字敏感的一種高級(jí)語(yǔ)言,如果我們要定義一個(gè)定時(shí)器1,可以寫做"Timer1",如果程序中有"TIMER1",那么這兩個(gè)是完全不同定義的標(biāo)識(shí)符。標(biāo)識(shí)符由字符串,數(shù)字和下劃線等組成,注意的是第一個(gè)字符必須是字母或下劃線,如"1Timer"是錯(cuò)誤的,編譯時(shí)便會(huì)有錯(cuò)誤提示。有些編譯系統(tǒng)專用的標(biāo)識(shí)符是以下劃線開頭,所以一般不要以下劃線開頭命名標(biāo)識(shí)符。標(biāo)識(shí)符在命名時(shí)應(yīng)當(dāng)簡(jiǎn)單,含義清晰,這樣有助于閱讀理解程序。在C51編譯器中,只支持標(biāo)識(shí)符的前32位為有效標(biāo)識(shí),一般情況下也足夠用了,除非你要寫天書:P。
              關(guān)鍵字則是編程語(yǔ)言保留的特殊標(biāo)識(shí)符,它們具有固定名稱和含義,在程序編寫中不允許標(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)鍵字。其實(shí)在KEIL uVision2的文本編輯器中編寫C程序,系統(tǒng)可以把保留字以不同顏色顯示,缺省顏色為天藍(lán)色。
              先看表4-1,表中列出了KEIL uVision2 C51編譯器所支持的數(shù)據(jù)類型。在標(biāo)準(zhǔn)C語(yǔ)言中基本的數(shù)據(jù)類型為char,int,short,long,float和double,而在C51編譯器中int和short相同,float和double相同,這里就不列出說(shuō)明了。下面來(lái)看看它們的具體定義:

            本文引用地址:http://www.biyoush.com/article/201611/320179.htm

            數(shù)據(jù)類型

            長(zhǎng) 度

            值 域

            unsigned char

            單字節(jié)

            0~255

            signed char

            單字節(jié)

            -128~+127

            unsigned int

            雙字節(jié)

            0~65535

            signed int

            雙字節(jié)

            -32768~+32767

            unsigned long

            四字節(jié)

            0~4294967295

            signed long

            四字節(jié)

            -2147483648~+2147483647

            float

            四字節(jié)

            ±1.175494E-38~±3.402823E+38

            *

            1~3字節(jié)

            對(duì)象的地址

            bit

            0或1

            sfr

            單字節(jié)

            0~255

            sfr16

            雙字節(jié)

            0~65535

            sbit

            0或1

            表4-1 KEIL uVision2 C51編譯器所支持的數(shù)據(jù)類型


            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ù)值范圍是0~255。signed char類型用字節(jié)中最高位字節(jié)表示數(shù)據(jù)的符號(hào),"0"表示正數(shù),"1"表示負(fù)數(shù),負(fù)數(shù)用補(bǔ)碼表示。所能表示的數(shù)值范圍是-128~+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ù)值范圍是0~65535。

            好了,先停一下吧,我們來(lái)寫個(gè)小程序看看unsigned char和unsigned int用于延時(shí)的不同效果,說(shuō)明它們的長(zhǎng)度是不同的,呵,盡管它并沒(méi)有實(shí)際的應(yīng)用意義,這里我們學(xué)習(xí)它們的用法就行。依舊用我們上一課的最小化系統(tǒng)做實(shí)驗(yàn),不過(guò)要加多一個(gè)電阻和LED,如圖4-1。實(shí)驗(yàn)中用D1的點(diǎn)亮表明正在用unsigned int數(shù)值延時(shí),用D2點(diǎn)亮表明正在用unsigned char數(shù)值延時(shí)。



            圖4-1 第4課實(shí)驗(yàn)用電路

            我們把這個(gè)項(xiàng)目稱為TwoLED,實(shí)驗(yàn)程序如下:
            #include //預(yù)處理命令

            void main(void) //主函數(shù)名
            {
            unsigned int a; //定義變量a為unsigned int類型
            unsigned char b; //定義變量b為unsigned char類型

            do
            { //do while組成循環(huán)
            for (a=0; a<65535; a++)
            P1_0 = 0; //65535次設(shè)P1.0口為低電平,點(diǎn)亮LED
            P1_0 = 1; //設(shè)P1.0口為高電平,熄滅LED

            for (a=0; a<30000; a++); //空循環(huán)

            for (b=0; b<255; b++)
            P1_1 = 0; //255次設(shè)P1.1口為低電平,點(diǎn)亮LED
            P1_1 = 1; //設(shè)P1.1口為高電平,熄滅LED


            for (a=0; a<30000; a++); //空循環(huán)
            }
            while(1);
            }

            同樣編譯燒寫,上電運(yùn)行您就可以看到結(jié)果了。很明顯D1點(diǎn)亮的時(shí)間長(zhǎng)于D2點(diǎn)亮的時(shí)間。程序中的循環(huán)延時(shí)時(shí)間并不是很好確定,并不太適合要求精確延時(shí)的場(chǎng)合,關(guān)于這方面我們以后也會(huì)做討論。這里必須要講的是,當(dāng)定義一個(gè)變量為特定的數(shù)據(jù)類型時(shí),在程序使用該變量不應(yīng)使它的值超過(guò)數(shù)據(jù)類型的值域。如本例中的變量b不能賦超出0~255的值,如for (b=0; b<255; b++)改為for (b=0; b<256; b++),編譯是可以通過(guò)的,但運(yùn)行時(shí)就會(huì)有問(wèn)題出現(xiàn),就是說(shuō)b的值永遠(yuǎn)都是小于256的,所以無(wú)法跳出循環(huán)執(zhí)行下一句P1_1 = 1,從而造成死循環(huán)。同理a的值不應(yīng)超出0~65535。大家可以燒片看看實(shí)驗(yàn)的運(yùn)行結(jié)果,同樣軟件仿真也是可以看到結(jié)果的。

            3. long長(zhǎng)整型
            long長(zhǎng)整型長(zhǎng)度為四個(gè)字節(jié),用于存放一個(gè)四字節(jié)數(shù)據(jù)。分有符號(hào)long長(zhǎng)整型signed long和無(wú)符號(hào)長(zhǎng)整型unsigned long,默認(rèn)值為signed long類型。signed int表示的數(shù)值范圍是-2147483648~+2147483647,字節(jié)中最高位表示數(shù)據(jù)的符號(hào),"0"表示正數(shù),"1"表示負(fù)數(shù)。unsigned long表示的數(shù)值范圍是0~4294967295。

            4. float浮點(diǎn)型
            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ù)雜在以后的章節(jié)中再做詳細(xì)的討論。 5.* 指針型
            指針型本身就是一個(gè)變量,在這個(gè)變量中存放的指向另一個(gè)數(shù)據(jù)的地址。這個(gè)指針變量要占據(jù)一定的內(nèi)存單元,對(duì)不同的處理器長(zhǎng)度也不盡相同,在C51中它的長(zhǎng)度一般為1~3個(gè)字節(jié)。指針變量也具有類型,在以后的課程中有專門一課做探討,這里就不多說(shuō)了。

            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)操作特殊功能寄存器。
            *AT89C51的特殊功能寄存器表請(qǐng)看附錄二

            8.sfr16 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 = P1^1; //P1_1為P1中的P1.1引腳
            //同樣我們可以用P1.1的地址去寫,如sbit P1_1 = 0x91;
            這樣我們?cè)谝院蟮某绦蛘Z(yǔ)句中就可以用P1_1來(lái)對(duì)P1.1引腳進(jìn)行讀寫操作了。通常這些可以直接使用系統(tǒng)提供的預(yù)處理文件,里面已定義好各特殊功能寄存器的簡(jiǎn)單名字,直接引用可以省去一點(diǎn)時(shí)間,我自己是一直用的。當(dāng)然您也可以自己寫自己的定義文件,用您認(rèn)為好記的名字。

              關(guān)于數(shù)據(jù)類型轉(zhuǎn)換等相關(guān)操作在后面的課程或程序?qū)嵗袑⒂兴峒?。大家可以用所講到的數(shù)據(jù)類型改寫一下這課的實(shí)例程序,加深對(duì)各類型的認(rèn)識(shí)。

            附 錄
            附錄一 C51中的關(guān)鍵字

            關(guān)鍵字

            用 途

            說(shuō) 明

            auto

            存儲(chǔ)種類說(shuō)明

            用以說(shuō)明局部變量,缺省值為此

            break

            程序語(yǔ)句

            退出最內(nèi)層循環(huán)

            case

            程序語(yǔ)句

            Switch語(yǔ)句中的選擇項(xiàng)

            char

            數(shù)據(jù)類型說(shuō)明

            單字節(jié)整型數(shù)或字符型數(shù)據(jù)

            const

            存儲(chǔ)類型說(shuō)明

            在程序執(zhí)行過(guò)程中不可更改的常量值

            continue

            程序語(yǔ)句

            轉(zhuǎn)向下一次循環(huán)

            default

            程序語(yǔ)句

            Switch語(yǔ)句中的失敗選擇項(xiàng)

            do

            程序語(yǔ)句

            構(gòu)成do..while循環(huán)結(jié)構(gòu)

            double

            數(shù)據(jù)類型說(shuō)明

            雙精度浮點(diǎn)數(shù)

            else

            程序語(yǔ)句

            構(gòu)成if..else選擇結(jié)構(gòu)

            enum

            數(shù)據(jù)類型說(shuō)明

            枚舉

            extern

            存儲(chǔ)種類說(shuō)明

            在其他程序模塊中說(shuō)明了的全局變量

            flost

            數(shù)據(jù)類型說(shuō)明

            單精度浮點(diǎn)數(shù)

            for

            程序語(yǔ)句

            構(gòu)成for循環(huán)結(jié)構(gòu)

            goto

            程序語(yǔ)句

            構(gòu)成goto轉(zhuǎn)移結(jié)構(gòu)

            if

            程序語(yǔ)句

            構(gòu)成if..else選擇結(jié)構(gòu)

            int

            數(shù)據(jù)類型說(shuō)明

            基本整型數(shù)

            long

            數(shù)據(jù)類型說(shuō)明

            長(zhǎng)整型數(shù)

            register

            存儲(chǔ)種類說(shuō)明

            使用CPU內(nèi)部寄存的變量

            return

            程序語(yǔ)句

            函數(shù)返回

            short

            數(shù)據(jù)類型說(shuō)明

            短整型數(shù)

            signed

            數(shù)據(jù)類型說(shuō)明

            有符號(hào)數(shù),二進(jìn)制數(shù)據(jù)的最高位為符號(hào)位

            sizeof

            運(yùn)算符

            計(jì)算表達(dá)式或數(shù)據(jù)類型的字節(jié)數(shù)

            static

            存儲(chǔ)種類說(shuō)明

            靜態(tài)變量

            struct

            數(shù)據(jù)類型說(shuō)明

            結(jié)構(gòu)類型數(shù)據(jù)

            swicth

            程序語(yǔ)句

            構(gòu)成switch選擇結(jié)構(gòu)

            typedef

            數(shù)據(jù)類型說(shuō)明

            重新進(jìn)行數(shù)據(jù)類型定義

            union

            數(shù)據(jù)類型說(shuō)明

            聯(lián)合類型數(shù)據(jù)

            unsigned

            數(shù)據(jù)類型說(shuō)明

            無(wú)符號(hào)數(shù)數(shù)據(jù)

            void

            數(shù)據(jù)類型說(shuō)明

            無(wú)類型數(shù)據(jù)

            volatile

            數(shù)據(jù)類型說(shuō)明

            該變量在程序執(zhí)行中可被隱含地改變

            while

            程序語(yǔ)句

            構(gòu)成while和do..while循環(huán)結(jié)構(gòu)

            附表1-1 ANSIC標(biāo)準(zhǔn)關(guān)鍵字

            關(guān)鍵字

            用 途

            說(shuō) 明

            bit

            位標(biāo)量聲明

            聲明一個(gè)位標(biāo)量或位類型的函數(shù)

            sbit

            位標(biāo)量聲明

            聲明一個(gè)可位尋址變量

            Sfr

            特殊功能寄存器聲明

            聲明一個(gè)特殊功能寄存器

            Sfr16

            特殊功能寄存器聲明

            聲明一個(gè)16位的特殊功能寄存器

            data

            存儲(chǔ)器類型說(shuō)明

            直接尋址的內(nèi)部數(shù)據(jù)存儲(chǔ)器

            bdata

            存儲(chǔ)器類型說(shuō)明

            可位尋址的內(nèi)部數(shù)據(jù)存儲(chǔ)器

            idata

            存儲(chǔ)器類型說(shuō)明

            間接尋址的內(nèi)部數(shù)據(jù)存儲(chǔ)器

            pdata

            存儲(chǔ)器類型說(shuō)明

            分頁(yè)尋址的外部數(shù)據(jù)存儲(chǔ)器

            xdata

            存儲(chǔ)器類型說(shuō)明

            外部數(shù)據(jù)存儲(chǔ)器

            code

            存儲(chǔ)器類型說(shuō)明

            程序存儲(chǔ)器

            interrupt

            中斷函數(shù)說(shuō)明

            定義一個(gè)中斷函數(shù)

            reentrant

            再入函數(shù)說(shuō)明

            定義一個(gè)再入函數(shù)

            using

            寄存器組定義

            定義芯片的工作寄存器

            附表1-2 C51編譯器的擴(kuò)展關(guān)鍵字

            附錄二 AT89C51特殊功能寄存器列表(適用于同一架構(gòu)的芯片)

            符 號(hào)

            地 址

            注 釋

            *ACC

            E0H

            累加器

            *B

            F0H

            乘法寄存器

            *PSW

            D0H

            程序狀態(tài)字

            SP

            81H

            堆棧指針

            DPL

            82H

            數(shù)據(jù)存儲(chǔ)器指針低8位

            DPH

            83H

            數(shù)據(jù)存儲(chǔ)器指針高8位

            *IE

            A8H

            中斷允許控制器

            *IP

            D8H

            中斷優(yōu)先控制器

            *P0

            80H

            端口0

            *P1

            90H

            端口1

            *P2

            A0H

            端口2

            *P3

            B0H

            端口3

            PCON

            87H

            電源控制及波特率選擇

            *SCON

            98H

            串行口控制器

            SBUF

            99H

            串行數(shù)據(jù)緩沖器

            *TCON

            88H

            定時(shí)器控制

            TMOD

            89H

            定時(shí)器方式選擇

            TL0

            8AH

            定時(shí)器0低8位

            TL1

            8BH

            定時(shí)器1低8位

            TH0

            8CH

            定時(shí)器0低8位

            TH1

            8DH

            定時(shí)器1高8位

            帶*號(hào)的特殊功能寄存器都是可以位尋址的寄存器




            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉