《C51基本語法》課件_第1頁
《C51基本語法》課件_第2頁
《C51基本語法》課件_第3頁
《C51基本語法》課件_第4頁
《C51基本語法》課件_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機接口技術(shù)(C51版)第一章C51基本語法1精選課件內(nèi)容概述 數(shù)據(jù)類型和運算符、表達(dá)式是是C51語言程序設(shè)計的最基礎(chǔ)知識,C51語言把數(shù)據(jù)分成了多種數(shù)據(jù)類型,并提供了豐富的運算對數(shù)據(jù)進行處理。本章對C51語言的基本數(shù)據(jù)類型、常量變量、運算符及表達(dá)式等進行詳細(xì)介紹。2精選課件教學(xué)目標(biāo)1.掌握數(shù)據(jù)類型的概念,了解C51語言能夠處理的數(shù)據(jù)類型。2.掌握常量的概念,掌握各種類型常量的特點及表示形式。3.掌握變量的概念,了解int、float、char型變量的特點,掌握這三種類型變量的定義、賦值和使用方法。理解C51中變量的存儲和編譯模式的關(guān)系,掌握單片機片內(nèi)資源的訪問方法。4.了解C51語言的基本運算符及其特點,掌握運算符的優(yōu)先級和結(jié)合性的概念。5.了解算術(shù)運算表達(dá)式、關(guān)系表達(dá)式及邏輯表達(dá)式的特點,熟練進行表達(dá)式計算,能熟練進行實際問題的表達(dá)式描述。6.熟悉自增、自減運算的特點,掌握賦值運算,了解逗號運算符和逗號表達(dá)式。7.掌握數(shù)據(jù)類型轉(zhuǎn)換的概念,能進行基本的數(shù)據(jù)類型轉(zhuǎn)換。3精選課件1.1C51基本數(shù)據(jù)類型具有一定格式的數(shù)字或數(shù)值叫做數(shù)據(jù),數(shù)據(jù)的不同格式叫作數(shù)據(jù)類型。任何程序設(shè)計都離不開數(shù)據(jù)的處理。

C5l的數(shù)據(jù)類型有位型(bit)、無符號字符(unsignedchar)、有符號字符(signedchar)、無符號整型(unsignedint)、有符號整型(signedint)、無符號長型(unsignedlong)、有符號長型(signedlong)、浮點(float)和指針類型等。其中short與long屬整型數(shù)據(jù)、float與double型屬浮點型數(shù)據(jù)。4精選課件數(shù)據(jù)類型長度值域范圍bit1bit0,1sbit1bit0,1unsignedchar1byte0~255signedchar1byte-128~127sfr1byte0~255unsignedint2byte0~65536signedint2byte-32768~32767sfr162byte0~65536*1~3byte對象的地址unsignedlong4byte0~4294967295signedlong4byte-2147483648~2147483647float4byte+1.175494E-38~+3.402823E+385精選課件當(dāng)程序中出現(xiàn)表達(dá)式或變量賦值運算時,若運算對象的數(shù)據(jù)類型不一致,數(shù)據(jù)類型可以自動進行轉(zhuǎn)換,轉(zhuǎn)換按以下優(yōu)先級別自動進行:bit→char→int→long→floatunsigned→signed6精選課件1.2常量與變量1.2.1常量在程序運行中其值不能改變的量稱為常量。1.整型常量??梢员硎緸槭M制如123,0,-8等。十六進制則以0x開頭如0x34。長整型就在數(shù)字后面加字母L,如10L,0xF340L等。2.浮點型常量。分為十進制和指數(shù)表示形式。十進制由數(shù)字和小數(shù)點組成,如0.888,3345.345,0.0等,整數(shù)或小數(shù)部分為0時可以省略0但必須有小數(shù)點。指數(shù)表示形式為:

[±]數(shù)字[.數(shù)字]e[±]數(shù)字 []中的內(nèi)容為可選項,其中內(nèi)容根據(jù)具體情況可有可無,但其余部分必須有,如123e3,5e6,-1.0e-3。而e3,5e4.0則是非法的表示形式。3.字符型常量是單引號內(nèi)的字符,如‘a(chǎn)’,‘d’等。4.字符串型常量由雙引號內(nèi)的字符組成,如"hello","english"等。當(dāng)引號內(nèi)的沒有字符時,為空字符串。7精選課件用標(biāo)識符代表的常量稱為符號常量。例如:在指令“#definePI3.1415926”后,符號常量PI即代表圓周率3.1415926。8精選課件1.2.2變量1.2.2.1變量類型在程序運行中,其值可以改變的量稱為變量一個變量主要由兩部分構(gòu)成:一個是變量名,一個是變量值。每個變量都有一個變量名,在內(nèi)存中占據(jù)一定的存儲單元(地址),并在該內(nèi)存單元中存放該變量的值。9精選課件C51支持的變量通常有如下類型:位變量(bit)——位變量的值可以是1(true)或0(false)。與805l硬件特性操作有關(guān)的位變量必須定位在8051CPU片內(nèi)存儲區(qū)(RAM)的可位尋址空間中。字符變量(char)——字符變量的長度為lbyte,即8位。C51編譯器默認(rèn)的字符型變量為無符號型(unsignedchar)。負(fù)數(shù)在計算機中存儲時一般用補碼表示。整型變量(int)——整型變量的長度為16位。8051系列CPU將整型變量的msb存放在低地址字節(jié)。有符號整型變量(signedint)也使用msb位作為標(biāo)志位,并使用二進制的補碼表示數(shù)值。長整型變量(1ongint)——長整型變量占用4個字節(jié)(byte),其它方面與整型變量(int)相似。浮點型變量(float)——浮點型變量占4個字節(jié)(byte),許多復(fù)雜的數(shù)學(xué)表達(dá)式都采用浮點變量數(shù)據(jù)類型。它用符號位表示數(shù)的符號,用階碼和尾數(shù)表示數(shù)的大小。用它們進行任何數(shù)學(xué)運算都需要使用由編譯器決定的各種不同效率等級的庫函數(shù)。(補充存儲格式)10精選課件在編程時,為了書寫方便,經(jīng)常使用簡化的縮寫形式來定義變量的數(shù)據(jù)類型。其方法是在源程序開頭使用#define語句。例如:#defineucharunsignedchar#defineuintunsignedint11精選課件1.2.2.2變量的存儲變量的存儲器類型是指該變量在8051單片機硬件系統(tǒng)中所使用的存儲區(qū)域,并在編譯時準(zhǔn)確的定位。8051系列單片機將程序存儲器(ROM)和數(shù)據(jù)存儲器(RAM)分開,并各有各自的尋址機構(gòu)和尋址方式。8051系列單片機在物理上有四個存儲空間:*片內(nèi)程序存儲器空間;*片外程序存儲器空間,*片內(nèi)數(shù)據(jù)存儲器空間;*片外數(shù)據(jù)存儲器空間12精選課件KEILuVision2所能支持的存儲器類型:存儲器類型說明data直接訪問內(nèi)部數(shù)據(jù)存儲器(128字節(jié)),訪問速度最快bdata可位尋址內(nèi)部數(shù)據(jù)存儲器(16字節(jié)),允許位與字節(jié)混合訪問idata間接訪問內(nèi)部數(shù)據(jù)存儲器(256字節(jié)),允許訪問全部256B地址pdata分頁訪問外部數(shù)據(jù)存儲器(256字節(jié)),用MOVX@Ri指令訪問xdata外部數(shù)據(jù)存儲器(64KB),用MOVX@DPTR指令訪問code程序存儲器(64KB),用MOVC@A+DPTR指令訪問13精選課件注意的是在AT89C51芯片中RAM只有低128位,位于80H到FFH的高128位則在52芯片中才有用,并和特殊寄存器地址重疊。14精選課件定義變量時如果省略存儲器類型,系統(tǒng)則會按編譯模式SMALL、COMPACT或LARGE所規(guī)定的默認(rèn)存儲器類型去指定變量的存儲區(qū)域。無論什么存儲模式都可以聲明變量在任何的8051存儲區(qū)范圍,然而把最常用的變量、命令放在內(nèi)部數(shù)據(jù)區(qū)可以顯著的提高系統(tǒng)性能。15精選課件C51支持的主要編譯模式存儲模式說明SMALL函數(shù)參數(shù)及局部變量放在片內(nèi)RAM(默認(rèn)變量類型為DATA,最大128字節(jié))。另外所有對象包括棧都優(yōu)先放置于片內(nèi)RAM,當(dāng)片內(nèi)RAM用滿,再向片外RAM放置。COMPACT參數(shù)及局部變量放在片外RAM(默認(rèn)的存儲類型是PDATA,最大256字節(jié));通過R0、R1間接尋址,棧位于8051片內(nèi)RAM。LARGE參數(shù)及局部變量直接放入片外RAM(默認(rèn)的存儲類型是XDATA,最大64KB);使用數(shù)據(jù)指針DPTR間接尋址。因此訪問效率較低且直接影響代碼長度.16精選課件1.2.38051片內(nèi)資源及位變量1.2.3.1特殊功能寄存器的C51定義8051單片機的內(nèi)部高128個字節(jié)為專用寄存器區(qū),其中51子系列有21個(52子系列有26個)特殊功能寄存器(SFR),它們離散的分布在這個區(qū)中,分別用于CPU并行口、串行口、中斷系統(tǒng)、定時/計數(shù)器等功能單元及控制和狀態(tài)寄存器。

17精選課件對SFR的操作,只能采用直接尋址方式。為了能直接訪問這些特殊功能寄存器,KeilC51擴充了兩個關(guān)鍵字“sfr”、“sfr16”,可以直接對51單片機的特殊寄存器進行定義,這種定義方法與標(biāo)準(zhǔn)C51語言不兼容,只適用于對8051系列單片機C51編程。18精選課件定義方法如下:sfr特殊功能寄存器名=特殊功能寄存器地址常數(shù);sfr16特殊功能寄存器名=特殊功能寄存器地址常數(shù);對于8051片內(nèi)I/O口,定義方法如下:sfrP1=0x90;//定義P1口,地址90HsfrP2=0xA0;//定義P1口,地址A0Hsfr后面是一個要定義的名字,要符合標(biāo)識符的命名規(guī)則,名字最好有一定的含義等號后面必須是常數(shù),不允許有帶運算符的表達(dá)式,而且該常數(shù)必須在特殊功能寄存器的地址范圍之內(nèi)(80H-FFH)。sfr是定義8位的特殊功能寄存器,sfr16用來定義16位特殊功能寄存器,如8052的T2定時器,可以定義為:

19精選課件sfr16T2=0xCC;//這里定義8052定時器2,地址為T2L=CCH,T2H=CDH用sfr16定義16位特殊功能寄存器時,等號后面是它的低位地址,高位地址一定要位于物理低位地址之上。注意的是,sfr16不能用于定時器0和1的定義。對于需要單獨訪問SFR中的位,C51的擴充關(guān)鍵字‘sbit’可以訪問位尋址對象。20精選課件‘sbit’定義某些持殊位,并接受任何符號名,“=”號后將絕對地址賦給變量名這種地址分配,有三種方法:1)sbit位變量名=位地址sbitP1_1=Ox91;這樣是把位的絕對地址賦給位變量。同sfr一樣,sbit的位地址必須位于80H~FFH之間。2)Sbit位變量名=特殊功能寄存器名位位置sfrP3=0xB0;sbitP3_1=P3^1;//先定義一個特殊功能寄存器名,再指定位變量名所在的位置。當(dāng)可尋址位位于特殊功能寄存器中時可采用這種方法。3)sbit位變量名=字節(jié)地址^位位置 sbitP3_1=0xB0^1;21精選課件1.2.3.2位尋址區(qū)及位變量定義C51提供一個bdata的存儲器類型,用于訪問單片機的可位尋址區(qū)的數(shù)據(jù)

如:unsignedcharbdataage;//在位尋址區(qū)定義ucsignedchar類型的變量ageintbdatascore[2];//在可位尋址區(qū)定義數(shù)組score[2]sbitflag=age^7//用關(guān)鍵字sbit定義位變量來獨立訪問可尋址位對象的其中一位C51提供關(guān)鍵字“bit”實現(xiàn)位變量的定義及訪問。bitflag;//將flag定義為位變量bitvalve_state;//將valve_state定義為位變量通常C51編譯器會將位變量分配在位尋址區(qū)的某一位。22精選課件定義位變量時應(yīng)注意以下問題1)位變量不能定義成一個指針,如不能定義:bit*POINTER。2)不能定義位數(shù)組,如不能定義:bitarray[2]。3)bit與sbit的不同。bit不能指定位變量的絕對地址,當(dāng)需要指定位變量的絕對地址(范圍必須在0x80-0xff)時,需要使用sbit來定義。例:sbitflag=P1^0;23精選課件也可使用sbit訪問可位尋址對象的位。bdatacharjj;/*jj定義為bdata整型變量*/intbdatasum[2];/*在可位尋址區(qū)定義數(shù)組sum[2],也稱為可尋址位對象*/sbitmybit7=jj^7;/*mybit7定義為jj的第7位*/sbitscore12=sum[1]^12;/*score12定義為sum[1]的第12位*/24精選課件可位尋址對象也可以字節(jié)尋址。例:jj=0;/*jj賦值為0*/sbit定義要求基址對象的存儲類型為bdata,否則只有絕對的特殊位定義(sbit)是合法的。位置(‘^’操作符)后的最大值依賴于指定的訪問對象型,對于char、uchar而言是0-7,對于int、uint而言是0~15。sbit定義要求基址對象的存儲類型為bdata,否則只有絕對的特殊位定義(sbit)是合法的。位置(‘^’操作符)后的最大值依賴于指定的訪問對象型,對于char、uchar而言是0-7,對于int、uint而言是0~15。25精選課件1.3自定義變量類型typedef通常定義變量的數(shù)據(jù)類型時都是使用標(biāo)準(zhǔn)的關(guān)鍵字,方便別人閱讀程序。但使用typedef可以有方便程序的移植和簡化較長的數(shù)據(jù)類型定義例如:程序設(shè)計者對變量的定義習(xí)慣了DELPHI的關(guān)鍵字,如整型數(shù)據(jù)習(xí)慣用關(guān)鍵字integer來定義,在用C51時還想用integer的話,你可以這樣寫:typedefintinteger;integera,b;26精選課件1.4運算符與表達(dá)式1.4.1賦值運算利用賦值運算符將一個變量與一個表達(dá)式連接起來的式子為賦值表達(dá)式,在表達(dá)式后面加“;”便構(gòu)成了賦值語句。使用"="的賦值語句格式如下:

變量=表達(dá)式;例如:a=0x10;//將常數(shù)十六進制數(shù)10賦于變量ab=c=2;//同時將2賦值給變量b,cd=e;//將變量e的值賦于變量df=d-e;//將變量d-e的值賦于變量f賦值語句的意義就是先計算出"="右邊的表達(dá)式的值,然后將得到的值賦給左邊的變量。而且右邊的表達(dá)式可以是一個賦值表達(dá)式。27精選課件1.4.2算術(shù)運算1.4.2.1算術(shù)運算符及算術(shù)表達(dá)式C51中的算術(shù)運算符有如下幾個,其中只有取正值和取負(fù)值運算符是單目運算符,其它則都是雙目運算符:十(加法運算符,或正值符號)-(減法運算符,或負(fù)值符號)*(乘法運算符)/(除法運算將)%(模(求余)運算符。例如5%3結(jié)果是5除以3所得的余數(shù)2)

28精選課件用算術(shù)運算符和括號將運算對象連接起來的式子稱為算術(shù)表達(dá)式。運算對象包括常量、變量、函數(shù)、數(shù)組、結(jié)構(gòu)體等等。算術(shù)表達(dá)式的形式:表達(dá)式1算術(shù)運算符表達(dá)式2例如:a+b,(x+4)/(y-b),y-sin(x)/2

29精選課件1.4.2.2算術(shù)運算的優(yōu)先級與結(jié)合性算術(shù)運算符的優(yōu)先級規(guī)定為:先乘除模,后加減,括號最優(yōu)先。乘、除、模運算符的優(yōu)先級相同,并高于加減運算符。括號中的內(nèi)容優(yōu)先級最高。a+b*c;//乘號的優(yōu)先級高于加號,故先運算b*c,所得的結(jié)果再與a相加(a+b)*(c-d)-6;//括號的優(yōu)先級最高,*次之,減號優(yōu)先級最低.故先運算(a+b)和(c-d),//然后將二者的結(jié)果相乘,最后再與6相減算術(shù)運算的結(jié)合性規(guī)定為自左至右方向,稱為“左結(jié)合性”。即當(dāng)一個運算對象兩邊的算術(shù)運算符優(yōu)先級相同時,運算對象先與左面的運算符結(jié)合。

a+b-c;//b兩邊是“+”、“-”運算符優(yōu)先級相同,按左結(jié)合性優(yōu)先執(zhí)行a+b再減C

30精選課件1.4.2.3數(shù)據(jù)類型轉(zhuǎn)換運算當(dāng)運算符的兩側(cè)的數(shù)據(jù)類型不同時必須通過數(shù)據(jù)類型轉(zhuǎn)換將數(shù)據(jù)轉(zhuǎn)換成同種類型。轉(zhuǎn)換的方式有兩種:自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換。31精選課件自動類型轉(zhuǎn)換由C51編譯器編譯時自動進行。如圖1-4-1所示為自動數(shù)據(jù)類型轉(zhuǎn)換規(guī)則。char→int→long→float→doubleunsignedsigned低高圖1-4-1數(shù)據(jù)類型轉(zhuǎn)換規(guī)則

32精選課件強制類型轉(zhuǎn)換需要使用強制類型轉(zhuǎn)換運算符,其格式為:

(類型名)(表達(dá)式);例如:(double)xx//將xx強制轉(zhuǎn)換成double類型。(int)(a+b)//將a+b的值強制轉(zhuǎn)換成int類型。使用強制轉(zhuǎn)換類型運算符后,運算結(jié)果被強制轉(zhuǎn)換成規(guī)定的類型。例如:unsignedcharx,y;unsignedcharz;z=(unsignedchar)(x*y);33精選課件1.4.3關(guān)系運算1.4.3.1關(guān)系運算符<(小于)>(大于)<=(小于或等于)>=(大于或等于)==(等于)!=(不等于)關(guān)系運算符同樣有著優(yōu)先級別。前四個具有相同的優(yōu)先級,后兩個也具有相同的優(yōu)先級,但是前四個的優(yōu)先級要高于后兩個。關(guān)系運算符的結(jié)合性為左結(jié)合。34精選課件1.4.3.2關(guān)系表達(dá)式關(guān)系表達(dá)式就是用關(guān)系運算符連接起來兩個表達(dá)式。關(guān)系表達(dá)式通常是用來判別某個條件是否滿足。要注意的是用關(guān)系運算符的運算結(jié)果只有0和1兩種,也就是邏輯的真與假,當(dāng)指定的條件滿足時結(jié)果為1,不滿足時結(jié)果為0。關(guān)系表達(dá)式結(jié)構(gòu)如下:

表達(dá)式1關(guān)系運算符表達(dá)式235精選課件例如:a>b;//若a大于b,則表達(dá)式值為1(真)b+c<a;//若a=3,b=4,c=5,則表達(dá)式值為0(假)(a>b)==c;//若a=3,b=2,c=1,則表達(dá)式值為1(真)。因為a>b值為1,等于c值c==5>a>b;//若a=3,b=2,c=1,則表達(dá)式值為0(假)。36精選課件1.4.4邏輯運算關(guān)系運算符反映兩個表達(dá)式之間的大小等于關(guān)系,邏輯運算符則用于求條件式的邏輯值,用邏輯運算符將關(guān)系表達(dá)式或邏輯量連接起來就是邏輯表達(dá)式了。C51提供三種邏輯運算:邏輯與(&&)邏輯或(||)邏輯非(!)邏輯表達(dá)式的一般形式為:

邏輯與:條件式1&&條件式2

邏輯或:條件式1||條件式2

邏輯非:!條件式37精選課件邏輯表達(dá)式的結(jié)合性為自左向右。邏輯表達(dá)式的值應(yīng)該是一個邏輯值“真”或“假”,以0代表假,以1代表真。邏輯表達(dá)式:用邏輯運算符將關(guān)系表達(dá)式或邏輯量連接起來的式子稱為邏輯表達(dá)式。邏輯表達(dá)式的運算結(jié)果不是0就是1,不可能是其它值。38精選課件C51邏輯運算符與算術(shù)運算符、關(guān)系運算符、賦值運算符之間優(yōu)先級的次序如圖1-3-2所示。!(非)算術(shù)運算符關(guān)系運算符&&和||賦值運算符高低

優(yōu)先級圖1-3-2運算符的優(yōu)先級39精選課件1.4.5位運算C51語言直接面對8051單片機,對于8051單片機強大靈活的位處理能力也提供了位操作指令。C51中共有6種位運算符:&按位與|按位或^按位異或~按位取反<<位左移>>位右移40精選課件位運算符的作用是按位對變量進行運算,但是并不改變參與運算的變量的值。如果要求按位改變變量的值,則要利用相應(yīng)的賦值運算。應(yīng)當(dāng)注意的是位運算符不能對浮點型數(shù)據(jù)進行操作。41精選課件按位與、或、異或的真值表如表1-4-1所示。表1-4-1與、或、異或位操作真值表X Y X&Y X|Y X^Y 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 1 1 1 0 42精選課件位運算一般的表達(dá)形式如下:

變量1位運算符變量2位運算符也有優(yōu)先級。從高到低依次是:"|"(按位或)→"^"(按位異或)→"&"(按位與)→">>"(右移)→"<<"(左移)→"~"(按位取反)?!拔蝗》础边\算符“~”來對一個二進制數(shù)按位進行取反,即0變1,1變0。位左移運算符“〈〈”和位右移運算符用來將一個數(shù)的各二進制位全部左移或右移若干位,移位后,空白位補0,而溢出的位舍棄。移位運算并不能改變原變量本身43精選課件1.4.6自增減運算及復(fù)合運算1.4.6.1自增減運算C51提供自增運算“++”和自減運算“--”,使變量值自動加1或減1。自增運算和自減運算只能用于變量而不能用于常量表達(dá)式。應(yīng)當(dāng)注意的是,“++”和“--”的結(jié)合方向是“

溫馨提示

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

評論

0/150

提交評論