版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第七章
C51對(duì)標(biāo)準(zhǔn)C語(yǔ)言的擴(kuò)展7.1C程序的流程控制1.C語(yǔ)言簡(jiǎn)介C語(yǔ)言的優(yōu)點(diǎn):語(yǔ)言簡(jiǎn)潔,使用靈活方便;可移植性好;表達(dá)能力強(qiáng);表達(dá)方式靈活;適用結(jié)構(gòu)化設(shè)計(jì);可直接操作計(jì)算機(jī)硬件;生成的目標(biāo)代碼質(zhì)量高。缺點(diǎn):不能自動(dòng)檢查數(shù)組邊界,運(yùn)算符級(jí)別多等。 7.1C程序的流程控制2.簡(jiǎn)單C程序舉例Voidmain(){
inta=1; b=a+1;}說(shuō)明:C語(yǔ)言從main開(kāi)始執(zhí)行程序,void表示無(wú)值返回;C程序中用到的變量一定要先定義變量的數(shù)據(jù)類型,只有定義了數(shù)據(jù)類型后,變量才會(huì)在內(nèi)存中按其數(shù)據(jù)類型長(zhǎng)度給其分配空間。 7.1C程序的流程控制變量用來(lái)存放數(shù)據(jù),運(yùn)算符用來(lái)處理數(shù)據(jù)。運(yùn)算符分:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、賦值運(yùn)算符、逗號(hào)運(yùn)算符、條件運(yùn)算符、位運(yùn)算符、指針運(yùn)算符等。7.1C程序的流程控制在邏輯運(yùn)算中,凡是結(jié)果為非“0”的數(shù)值即為真,等于“0”即為假。當(dāng)一個(gè)表達(dá)式中出現(xiàn)各種運(yùn)算符時(shí),要考慮運(yùn)算符的優(yōu)先級(jí)及結(jié)合性。
3.C程序的流程控制(1)#define#define宏名字符串以一個(gè)宏名稱來(lái)代表一個(gè)字符串,即當(dāng)程序任何地方使用到宏名稱時(shí),則將以代表的字符串來(lái)替換。宏的定義可以是一個(gè)常數(shù)、表達(dá)式或含有參數(shù)的表達(dá)式。范例:#defineuchar
unsignedchar//用uchar代替unsignedchar#defineuint
unsignedint//用uint代替unsignedint3.C程序的流程控制(2)if語(yǔ)句①if(條件表達(dá)式)
{
動(dòng)作 }如果條件表達(dá)式的值為真,則執(zhí)行{}內(nèi)的動(dòng)作;否則,則略過(guò)該動(dòng)作而繼續(xù)往下執(zhí)行。
3.C程序的流程控制(2)if語(yǔ)句②if(條件表達(dá)式) {動(dòng)作1}else {動(dòng)作2}如果條件表達(dá)式為真,則執(zhí)行動(dòng)作1,略過(guò)else的部分,接著往下執(zhí)行;否則,則略過(guò)動(dòng)作1而執(zhí)行動(dòng)作2,然后再往下執(zhí)行。
3.C程序的流程控制(2)if語(yǔ)句③if(條件表達(dá)式1) if(條件表達(dá)式2) if(條件表達(dá)式3) {動(dòng)作A}else {動(dòng)作B} else {動(dòng)作C}else {動(dòng)作D}動(dòng)作A
:是條件1、2、3都成立時(shí)才會(huì)執(zhí)行。動(dòng)作B
:是條件1、2成立,3不成立時(shí)才會(huì)執(zhí)行。動(dòng)作C
:是條件1成立,2不成立時(shí)才會(huì)執(zhí)行。動(dòng)作D:是條件1不成立時(shí)才會(huì)執(zhí)行。
3.C程序的流程控制(2)if語(yǔ)句④if(條件表達(dá)式1) {動(dòng)作A} elseif(條件表達(dá)式2) {動(dòng)作B} elseif(條件表達(dá)式3) {動(dòng)作C}else {動(dòng)作D}動(dòng)作A
:是條件1成立時(shí)才會(huì)執(zhí)行。動(dòng)作B
:是條件1不成立,2成立時(shí)才會(huì)執(zhí)行。動(dòng)作C
:是條件1、2不成立,3成立時(shí)才會(huì)執(zhí)行。動(dòng)作D:是條件1、2、3都不成立時(shí)才會(huì)執(zhí)行。
3.C程序的流程控制(3)switch-case語(yǔ)句switch(條件表達(dá)式){ case條件值1:
動(dòng)作1 break; case條件值2:
動(dòng)作2 break;
case條件值3:
動(dòng)作3 break; default:
動(dòng)作4 break;} 3.C程序的流程控制(3)switch-case語(yǔ)句switch內(nèi)的條件表達(dá)式必須為整數(shù)或字符。Switch用條件表達(dá)式的值來(lái)與各case的條件值對(duì)比,如果符合,則執(zhí)行該case的動(dòng)作,之后一定要寫break退出循環(huán)。如果所有的條件值都不符合,則執(zhí)行default的動(dòng)作。每個(gè)動(dòng)作之后一定要寫break,否則會(huì)繼續(xù)執(zhí)行。另外,case之后的條件值一定是數(shù)據(jù)常數(shù),不能為變量,而且不可以重復(fù)。
3.C程序的流程控制(4)while循環(huán)語(yǔ)句while(條件表達(dá)式) {動(dòng)作}先測(cè)試條件表達(dá)式是否成立。當(dāng)表達(dá)式為真時(shí),則執(zhí)行循環(huán)內(nèi)動(dòng)作,做完后又繼續(xù)跳回條件表達(dá)式再做測(cè)試;如此反復(fù)直到條件表達(dá)式為假,退出循環(huán)。3.C程序的流程控制(5)do-while循環(huán)語(yǔ)句 do{動(dòng)作} while(條件表達(dá)式);
先執(zhí)行動(dòng)作,再測(cè)試條件表達(dá)式是否成立。當(dāng)表達(dá)式為真時(shí),則繼續(xù)回到前面動(dòng)作;如此反復(fù)直到直到條件表達(dá)式為假為止。不論條件表達(dá)式的結(jié)果為何,至少會(huì)做一次動(dòng)作。3.C程序的流程控制(6)for循環(huán)語(yǔ)句 for(表達(dá)式1;表達(dá)式2;表達(dá)式3){動(dòng)作}表達(dá)式1:通常是設(shè)定起始值。表達(dá)式2:通常是條件判斷式。如果條件為真時(shí),則執(zhí)行動(dòng)作;否則終止循環(huán)。表達(dá)式3:通常是步長(zhǎng)表達(dá)式。執(zhí)行動(dòng)作完畢后,必須再回到這里做運(yùn)算,然后再到表達(dá)式2做判斷。
3.C程序的流程控制(7)函數(shù)(FUNCTION)①數(shù)據(jù)類型
函數(shù)名稱(數(shù)據(jù)類型參數(shù)1,數(shù)據(jù)類型參數(shù)2)函數(shù)即子程序。使用函數(shù)的注意事項(xiàng):函數(shù)定義時(shí)要同時(shí)聲明其類型;調(diào)用函數(shù)前要先聲明該函數(shù);傳給函數(shù)的參數(shù)值,其類型要與函數(shù)原定義一致;接受函數(shù)返回值的變量,其類型也要與函數(shù)一致。
3.C程序的流程控制(7)函數(shù)(FUNCTION)②函數(shù)的聲明voidfunction1(void)此函數(shù)無(wú)返回值,也不傳遞參數(shù)。
voidfunction2(unsignedchari,intj)此函數(shù)無(wú)返回值,但需要傳遞參數(shù)。unsignedcharfunction3(unsignedchari)此函數(shù)有unsignedchar類型的返回值給原調(diào)用程序。3.C程序的流程控制(7)函數(shù)(FUNCTION)③函數(shù)的返回值return是用來(lái)使函數(shù)結(jié)束并返回原調(diào)用程序的指令,而且可以把函數(shù)內(nèi)的最后結(jié)果數(shù)據(jù)傳回給原調(diào)用程序。7.2單片機(jī)匯編語(yǔ)言與C語(yǔ)言7.2.1單片機(jī)匯編語(yǔ)言與C語(yǔ)言程序設(shè)計(jì)對(duì)照范例例:編程將外部存儲(chǔ)器2050H和2060H單元的內(nèi)容互換。匯編程序:
ORG0000H LJMPMAIN ORG0100HMAIN:MOVDPTR,#2050H MOVXA,@DPTR MOVB,A MOVDPTR,#2060H MOVXA,@DPTR XCHA,B MOVX@DPTR,A MOVA,B MOVDPTR,#2050h MOVX@DPTR,A SJMP$ END7.2單片機(jī)匯編語(yǔ)言與C語(yǔ)言7.2.1單片機(jī)匯編語(yǔ)言與C語(yǔ)言程序設(shè)計(jì)對(duì)照范例C語(yǔ)言對(duì)地址的指示方法可以采用指針變量,也可以引用頭文件absacc.h作為絕對(duì)地址訪問(wèn)。 看#include<absacc.h>頭函數(shù):
#defineCBYTE((unsignedcharvolatilecode*)0) #defineDBYTE((unsignedcharvolatiledata*)0)#definePBYTE((unsignedcharvolatilepdata*)0) #defineXBYTE((unsignedcharvolatilexdata*)0)使用XBYTE指向不數(shù)據(jù)存儲(chǔ)器的首地址:如:XBYTE(2050),即用來(lái)指向外部數(shù)據(jù)存儲(chǔ)器的2050H地址。在程序中,使用#include<absacc.h>即可使用其中聲明的宏來(lái)訪問(wèn)絕對(duì)地址。7.2單片機(jī)匯編語(yǔ)言與C語(yǔ)言7.2.1單片機(jī)匯編語(yǔ)言與C語(yǔ)言程序設(shè)計(jì)對(duì)照范例例:編程將外部存儲(chǔ)器2050H和2060H單元的內(nèi)容互換。C程序:#include<absacc.h>voidmain(void){ charc;
c=XBYTE[2050H]; XBYTE[2050H]=XBYTE[2060H];
XBYTE[2060H]=c;while(1);}7.3C51語(yǔ)言對(duì)標(biāo)準(zhǔn)C語(yǔ)言的擴(kuò)展C51語(yǔ)言的特色:C51雖然繼承了標(biāo)準(zhǔn)C語(yǔ)言的絕大部分特性,而且基本語(yǔ)法相同;但其本身又在特定的硬件結(jié)構(gòu)上有所發(fā)展,如關(guān)鍵字sbit、data、idata、pdata、xdata、code等。應(yīng)用C51個(gè)更要注重對(duì)系統(tǒng)資源的理解。因?yàn)閱纹瑱C(jī)的資源相對(duì)PC機(jī)來(lái)說(shuō)很貧乏,對(duì)于RAM、ROM中的每一個(gè)字節(jié)都要充分利用。程序上引用的各種算法要精簡(jiǎn),不要對(duì)系統(tǒng)構(gòu)成過(guò)重的負(fù)擔(dān)。盡量少用浮點(diǎn)運(yùn)算,可以用無(wú)符號(hào)型數(shù)據(jù)的就不要用用符號(hào)型數(shù)據(jù);盡量避免多字節(jié)的乘除運(yùn)算,多使用移位運(yùn)算等。7.3C51語(yǔ)言對(duì)標(biāo)準(zhǔn)C語(yǔ)言的擴(kuò)展7.3.1數(shù)據(jù)類型C51具有標(biāo)準(zhǔn)C語(yǔ)言的所有標(biāo)準(zhǔn)數(shù)據(jù)類型。除此之外,為了更加有效地利用8051結(jié)構(gòu),還加入了以下特殊的數(shù)據(jù)類型: bit:位變量,值為0或1;
sbit:特殊功能位變量,值為0或1;
sfr:特殊功能寄存器,sfr字節(jié)地址為0~255;
sfr16:16位的特殊功能寄存器,sfr16字節(jié)地址為0-65535。
7.3C51語(yǔ)言對(duì)標(biāo)準(zhǔn)C語(yǔ)言的擴(kuò)展7.3.1數(shù)據(jù)類型
數(shù)據(jù)類型位數(shù)字節(jié)數(shù)數(shù)值范圍bit10~1char81-128~+127unsignedchar810~255enum162-32768~+32767short162-32768~+32767unsignedshort1620~65535int162-32768~+32767unsignedint1620~65535long324-2147483648~+2147483647unsignedlong3240~4294976295float324±1.175494E-38~±3.402823E+38sbit10~1sfr810~255sfr161620~655357.3C51語(yǔ)言對(duì)標(biāo)準(zhǔn)C語(yǔ)言的擴(kuò)展7.3.2存儲(chǔ)類型及存儲(chǔ)區(qū)1.存儲(chǔ)類型及存儲(chǔ)區(qū)描述
存儲(chǔ)區(qū)描述dataRAM的低128B,可在一個(gè)機(jī)器周期內(nèi)直接尋址bdatadata區(qū)是字節(jié)、位混合尋址的的16B區(qū)idataRAM的高128B,必須采用間接尋址xdata外部存儲(chǔ)區(qū),使用DPTR間接尋址pdata外部存儲(chǔ)區(qū)的256Bcode程序存儲(chǔ)區(qū)2.存儲(chǔ)類型及存儲(chǔ)區(qū)使用舉例1)DATA區(qū):DATA區(qū)聲明中的存儲(chǔ)類型標(biāo)示符為data。例如:
unsignedchardatasystem
status=0;//定義無(wú)符號(hào)字符型變量system
status初始值為0,//使其存儲(chǔ)在低128B
unsignedintdatauint_id[2];//定義無(wú)符號(hào)整型數(shù)組uint_id,存儲(chǔ)在低128B中2.存儲(chǔ)類型及存儲(chǔ)區(qū)使用舉例2)BDATA區(qū):BDATA區(qū)聲明中的存儲(chǔ)類型標(biāo)示符為bdata(20H-2FH)。例如:
unsignedchar
bdata
status_byte;//定義無(wú)符號(hào)字符型變量status_byte,使其存儲(chǔ)在//20H-2FH區(qū),可進(jìn)行位尋址
unsignedint
bdata
status_word;//定義無(wú)符號(hào)整型變量status_word,使其存儲(chǔ)在//20H-2FH區(qū)2.存儲(chǔ)類型及存儲(chǔ)區(qū)使用舉例3)IDATA區(qū):IDATA區(qū)聲明中的存儲(chǔ)類型標(biāo)示符為idata,指內(nèi)部的256B的存儲(chǔ)區(qū);但是只能間接尋址,速度比直接尋址慢。例如:
unsignedchar
idata
system_status;
unsignedint
idatauint_id[2];
2.存儲(chǔ)類型及存儲(chǔ)區(qū)使用舉例4)PDATA區(qū)和XDATA區(qū):均屬于外部存儲(chǔ)區(qū)。
PDATA區(qū)和XDATA區(qū)聲明中的標(biāo)識(shí)符分別為pdata和xdata。Xdata存儲(chǔ)類型標(biāo)識(shí)符可以指定外部數(shù)據(jù)存儲(chǔ)區(qū)64KB內(nèi)的任何地址,而pdata僅指定256B的外部數(shù)據(jù)區(qū)。
5)程序存儲(chǔ)區(qū)CODE。
CODE區(qū)聲明中的標(biāo)識(shí)符為code。7.3.3函數(shù)的使用1.函數(shù)聲明
keilC51編譯器擴(kuò)展了標(biāo)準(zhǔn)C函數(shù)聲明,這些擴(kuò)展有:(1)指定一個(gè)函數(shù)作為一個(gè)中斷函數(shù);(2)選擇所用的寄存器組;(3)選擇存儲(chǔ)模式;(4)指定重入。在函數(shù)聲明中可以包含這些擴(kuò)展或?qū)傩?。聲明C51函數(shù)的標(biāo)準(zhǔn)格式如下:
[return_type]funcname([args])[{smallcompactlarge}][reentrant][interruptn][usingn]
7.3.3函數(shù)的使用1.函數(shù)聲明標(biāo)準(zhǔn)格式如下:
[return_type]funcname([args])[{smallcompactlarge}][reentrant][interruptn][usingn]return_type:函數(shù)返回值的類型,如果不指定缺省是int。funcname:函數(shù)名。args:函數(shù)的參數(shù)列表。small、compact或large:函數(shù)的存儲(chǔ)模式。reentrant:表示函數(shù)是遞歸的或可重入的。interrupt:表示是一個(gè)中斷函數(shù)。using:指定函數(shù)所用的寄存器組。7.3.3函數(shù)的使用2.中斷函數(shù)中斷函數(shù)聲明如下:返回值函數(shù)名interruptnusingninterruptn中的n對(duì)應(yīng)中斷源的編號(hào),n的取值0~4。中斷編號(hào)告訴編譯器中斷程序的入口地址。usingn的n對(duì)應(yīng)四組通用寄存器中的一組。n的取值0~3。2.中斷函數(shù)8051單片機(jī)的中斷源以及中斷編號(hào):
中斷編號(hào)中斷源入口地址0外部中斷00003H1定時(shí)器/計(jì)數(shù)器0000BH2外部中斷10013H3定時(shí)器/計(jì)數(shù)器1001BH4串行口中斷0023H2.中斷函數(shù)在51系列單片機(jī)中,有的單片機(jī)多達(dá)32個(gè)中斷源,所以中斷編號(hào)是0~31。中斷函數(shù)的完整語(yǔ)法如下:返回值函數(shù)名([參數(shù)][模式][重入])interruptn[usingn]
例:voidtimer()(void)interrupt1using2{ ……}3.重入函數(shù)由于51單片機(jī)內(nèi)部堆棧空間有限,C51采用一種壓縮棧的方法,即為每個(gè)函數(shù)設(shè)定一個(gè)空間用于存放局部
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025青海省建筑安全員《A證》考試題庫(kù)
- 貴陽(yáng)人文科技學(xué)院《工科大學(xué)化學(xué)-有機(jī)化學(xué)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州中醫(yī)藥大學(xué)《物流信息系統(tǒng)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025陜西建筑安全員C證考試題庫(kù)
- 2025云南省建筑安全員《A證》考試題庫(kù)
- 廣州應(yīng)用科技學(xué)院《鋼筋混凝土原理》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025山西省建筑安全員C證(專職安全員)考試題庫(kù)
- 2025安徽省安全員C證(專職安全員)考試題庫(kù)
- 2025吉林建筑安全員B證考試題庫(kù)附答案
- 2025黑龍江省建筑安全員《A證》考試題庫(kù)
- 廣東省汕尾市2023-2024學(xué)年高一上學(xué)期期末教學(xué)質(zhì)量監(jiān)測(cè)化學(xué)試卷(含答案解析)
- 《熱電阻溫度傳感器》課件
- 抖音酒店直播可行性方案
- 信訪業(yè)務(wù)培訓(xùn)班課件
- 物資清運(yùn)方案及
- 熱穩(wěn)定校驗(yàn)計(jì)算書
- 北京市房山區(qū)2023-2024學(xué)年三年級(jí)上學(xué)期期末數(shù)學(xué)試卷
- 婦產(chǎn)科課件-子宮內(nèi)膜息肉臨床診療路徑(2022版)解讀
- 人教版六年級(jí)數(shù)學(xué)上冊(cè)典型例題系列之第三單元分?jǐn)?shù)除法應(yīng)用題部分拓展篇(原卷版)
- 課本含注音的注釋匯總 統(tǒng)編版語(yǔ)文八年級(jí)上冊(cè)
- 蜘蛛人的應(yīng)急預(yù)案
評(píng)論
0/150
提交評(píng)論