![單片機(jī)[CH05]單片機(jī)C語(yǔ)言程序設(shè)計(jì)_第1頁(yè)](http://file4.renrendoc.com/view/50e0ba7ee28b46d10683166650837e35/50e0ba7ee28b46d10683166650837e351.gif)
![單片機(jī)[CH05]單片機(jī)C語(yǔ)言程序設(shè)計(jì)_第2頁(yè)](http://file4.renrendoc.com/view/50e0ba7ee28b46d10683166650837e35/50e0ba7ee28b46d10683166650837e352.gif)
![單片機(jī)[CH05]單片機(jī)C語(yǔ)言程序設(shè)計(jì)_第3頁(yè)](http://file4.renrendoc.com/view/50e0ba7ee28b46d10683166650837e35/50e0ba7ee28b46d10683166650837e353.gif)
![單片機(jī)[CH05]單片機(jī)C語(yǔ)言程序設(shè)計(jì)_第4頁(yè)](http://file4.renrendoc.com/view/50e0ba7ee28b46d10683166650837e35/50e0ba7ee28b46d10683166650837e354.gif)
![單片機(jī)[CH05]單片機(jī)C語(yǔ)言程序設(shè)計(jì)_第5頁(yè)](http://file4.renrendoc.com/view/50e0ba7ee28b46d10683166650837e35/50e0ba7ee28b46d10683166650837e355.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第五章 單片機(jī)C語(yǔ)言程序設(shè)計(jì)概述7/18/20221為什么要使用C語(yǔ)言進(jìn)行程序開(kāi)發(fā)C 語(yǔ)言有很好的結(jié)構(gòu)性,便于模塊化,更容易閱讀和維護(hù),程序有很好的可移植性,能夠很方便的從一個(gè)工程移植到另一個(gè)工程,從而減少開(kāi)發(fā)時(shí)間;用C編寫(xiě)程序比匯編更符合人們的思考習(xí)慣,開(kāi)發(fā)者可以更專(zhuān)心的考慮解決問(wèn)題的算法,而不是考慮一些使用匯編語(yǔ)言上的細(xì)節(jié)問(wèn)題,這樣可從總體上減少開(kāi)發(fā)和調(diào)試的時(shí)間。7/18/20222為什么要使用C語(yǔ)言進(jìn)行程序開(kāi)發(fā)C語(yǔ)言對(duì)使用者盡可能地隱藏了處理器底層的操作,使得代碼可以在不同的目標(biāo)系統(tǒng)(CPU)之間方便地移植。目前幾乎所有微處理器都有配套的C編譯器;即使如此,匯編語(yǔ)言仍不可替代。首先,掌握
2、匯編語(yǔ)言有利于寫(xiě)出高質(zhì)量的C語(yǔ)言代碼;其次,在一些時(shí)間/速度敏感的操作(如中斷處理)中,使用匯編語(yǔ)言往往是唯一的選擇。7/18/20223第五章 單片機(jī)C語(yǔ)言程序設(shè)計(jì)5.1 C51的數(shù)據(jù)類(lèi)型與根本運(yùn)算 7/18/202245.1.1 C51的數(shù)據(jù)類(lèi)型、變量及存儲(chǔ)模式1、C51的數(shù)據(jù)類(lèi)型 C51的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類(lèi)型的形式出現(xiàn)的,數(shù)據(jù)類(lèi)型可分為根本數(shù)據(jù)類(lèi)型和構(gòu)造(復(fù)雜)數(shù)據(jù)類(lèi)型,構(gòu)造數(shù)據(jù)類(lèi)型是由根本數(shù)據(jù)類(lèi)型構(gòu)造而成;C51支持的數(shù)據(jù)類(lèi)型如下表所示: 7/18/202255.1.1 C51的數(shù)據(jù)類(lèi)型、變量及存儲(chǔ)模式數(shù)據(jù)類(lèi)型長(zhǎng)度(bit/Byte)取值范圍bit10,1unsigned char8
3、(1B)0255signed char8 (1B)-128127unsigned int16 (2B)065535signed int16 (2B)-3276832767unsigned long32 (4B)04294967295(即232-1)signed long32 (4B)-21474836482147483647float32 (4B)1.175494E-383.402823E+38通用指針24 (3B)可尋址存儲(chǔ)空間范圍065535具體指針8/16 (1/2B)可尋址存儲(chǔ)空間范圍0255 / 0655357/18/202265.1.1 C51的數(shù)據(jù)類(lèi)型、變量及存儲(chǔ)模式為了更加有利
4、地利用8051的存儲(chǔ)結(jié)構(gòu),C51引入了一種特殊的位數(shù)據(jù)類(lèi)型(bit)。位數(shù)據(jù)存儲(chǔ)在CPU內(nèi)部的位尋址區(qū)中,可像操作其它變量一樣對(duì)其操作,但是位變量不能進(jìn)行指針操作。7/18/202275.1.1 C51的數(shù)據(jù)類(lèi)型、變量及存儲(chǔ)模式特殊功能存放器特殊功能存放器用sfr 來(lái)定義,而sfr16 用來(lái)定義16 位的特殊功能存放器如DPTR;可以通過(guò)名字或地址來(lái)引用特殊功能存放器。 可位尋址的特殊功能存放器如SCON的位變量定義用關(guān)鍵字sbit 。這些定義是用引入頭文件*.H實(shí)現(xiàn)的;Keil為目前大多數(shù)51內(nèi)核的單片機(jī)配備了相應(yīng)的頭文件,這些頭文件包含了該種單片機(jī)所有的特殊功能存放器以及控制位的定義,通過(guò)
5、包含這些頭文件可以很容易的進(jìn)行新的擴(kuò)展。7/18/202285.1.1 C51的數(shù)據(jù)類(lèi)型、變量及存儲(chǔ)模式SFR在頭文件中的定義sfrSCON=0 x98; / 定義SCONsbitSM0=0 x9F; / 定義SCON 的各位sbitSM1=0 x9E;sbitSM2=0 x9D;sbitREN=0 x9C;sbitTB8=0 x9B;sbitRB8=0X9A;sbitTI=0 x99;sbitRI=0 x98;7/18/202295.1.2 C51運(yùn)算符、表達(dá)式及其規(guī)那么(1) 賦值運(yùn)算符在C語(yǔ)言中,符號(hào)“=被稱(chēng)為賦值運(yùn)算符。賦值運(yùn)算符的作用是將一個(gè)數(shù)據(jù)的值賦給一個(gè)變量。利用賦值運(yùn)算符將一個(gè)
6、變量與一個(gè)表達(dá)式連接起來(lái)的式子稱(chēng)為賦值表達(dá)式,在賦值表達(dá)式的后面加一個(gè)分號(hào)“;便構(gòu)成了賦值語(yǔ)句。一個(gè)賦值語(yǔ)句的格式如下:變量 = 表達(dá)式;例如:x = 9;7/18/2022105.1.2 C51運(yùn)算符、表達(dá)式及其規(guī)那么(2) 算術(shù)運(yùn)算符根本的算術(shù)運(yùn)算符有五種:+加或取正值運(yùn)算符-減或取負(fù)值運(yùn)算符*乘運(yùn)算符/除運(yùn)算符%取余運(yùn)算符運(yùn)算優(yōu)先級(jí):先乘除、取模,后加減,括號(hào)最優(yōu)先運(yùn)算時(shí)類(lèi)型轉(zhuǎn)換優(yōu)先級(jí)char int long double float7/18/2022115.1.2 C51運(yùn)算符、表達(dá)式及其規(guī)那么(3)自增量和自減量運(yùn)算符 根本的運(yùn)算符有兩種:+增量運(yùn)算符-減量運(yùn)算符作用:對(duì)運(yùn)算對(duì)象作
7、加l和減1運(yùn)算特點(diǎn):位置相關(guān),+i與i+加1操作執(zhí)行順序不同+/-只能用于變量,不能用于常數(shù)或表達(dá)式7/18/2022125.1.2 C51運(yùn)算符、表達(dá)式及其規(guī)那么(4)關(guān)系運(yùn)算符 根本的關(guān)系運(yùn)算符有六種:大于=大于等于=小于等于=等于!=不等于格式:表達(dá)式1 關(guān)系運(yùn)算符 表達(dá)式2特點(diǎn):用來(lái)判別某個(gè)條件是否滿(mǎn)足,當(dāng)所指定的條件滿(mǎn)足時(shí)結(jié)果為1,不滿(mǎn)足時(shí)結(jié)果為0。 優(yōu)先級(jí)相同(高)優(yōu)先級(jí)相同(低)7/18/2022135.1.2 C51運(yùn)算符、表達(dá)式及其規(guī)那么(5)邏輯運(yùn)算符 根本的邏輯運(yùn)算符有三種:|邏輯或&邏輯與!邏輯非使用邏輯運(yùn)算符求某個(gè)條件表達(dá)式的邏輯值,就是邏輯表達(dá)式,例如:x & y;
8、/ x,y都為真時(shí)返回真a | b;/ a,b任一為真時(shí)返回真!z;/ 對(duì)z取非7/18/2022145.1.2 C51運(yùn)算符、表達(dá)式及其規(guī)那么(6)位運(yùn)算符 根本的位運(yùn)算符有六種:按位取反右移&按位與按位異或|按位或按位對(duì)變量進(jìn)行運(yùn)算,但并不改變參與運(yùn)算的變量的值。位運(yùn)算的一般形式如下:x 2;/ 將變量x中的各位左移2位7/18/2022155.1.2 C51運(yùn)算符、表達(dá)式及其規(guī)那么(7)復(fù)合賦值運(yùn)算符 在賦值運(yùn)算符“=的前面加上其它運(yùn)算符,就構(gòu)成了復(fù)合賦值運(yùn)算符。 可以和“=構(gòu)成復(fù)合賦值運(yùn)算符的運(yùn)算符包括:+、-、*、/、%、&、|、 例如:x += 2;/ 將變量x加2后存回x中等價(jià)于
9、:x = x+2;7/18/2022165.1.2 C51運(yùn)算符、表達(dá)式及其規(guī)那么(8)條件運(yùn)算符 “?:是C語(yǔ)言中唯一的一個(gè)三目運(yùn)算符,將三個(gè)表達(dá)式連接起來(lái)構(gòu)成一個(gè)條件表達(dá)式,格式為:邏輯表達(dá)式 ? 表達(dá)式1 : 表達(dá)式2當(dāng)邏輯表達(dá)式為真時(shí),返回表達(dá)式1的值,否那么返回表達(dá)式2的值。例如:max = ab ? a : b;/ 取a和b中的大值等價(jià)于:if(ab) max = a;else max = b;7/18/2022175.1.2 C51運(yùn)算符、表達(dá)式及其規(guī)那么(9)指針和地址運(yùn)算符 對(duì)于指針和地址,C語(yǔ)言提供了兩種運(yùn)算符:*指針,取指向的內(nèi)容&地址,取變量的地址取內(nèi)容和取地址運(yùn)算的一
10、般形式分別為: 變量 = *指針變量;指針變量 = &目標(biāo)變量;7/18/2022185.1.2 C51運(yùn)算符、表達(dá)式及其規(guī)那么(9)指針和地址運(yùn)算符 例如:int i,j,*ptr;i = 100;/ 將100賦值給iptr = &i;/ 此時(shí)ptr指向變量i,即ptr中/ 存放的是變量i的存儲(chǔ)地址j = *ptr; / 將ptr指向的存儲(chǔ)地址單元中的/ 值賦給j,即執(zhí)行后j也為1007/18/2022195.1.2 C51運(yùn)算符、表達(dá)式及其規(guī)那么(10) 類(lèi)型轉(zhuǎn)換C語(yǔ)言中可以進(jìn)行兩種類(lèi)型轉(zhuǎn)換:隱式類(lèi)型轉(zhuǎn)換強(qiáng)制類(lèi)型轉(zhuǎn)換當(dāng)程序中兩種不同類(lèi)型的變量互相賦值或進(jìn)行運(yùn)算時(shí),編譯器會(huì)自動(dòng)進(jìn)行隱式類(lèi)型轉(zhuǎn)
11、換,將低優(yōu)先級(jí)的數(shù)據(jù)類(lèi)型轉(zhuǎn)換為高優(yōu)先級(jí)的數(shù)據(jù)。轉(zhuǎn)換優(yōu)先級(jí)從低到高為:char int long double float7/18/2022205.1.2 C51運(yùn)算符、表達(dá)式及其規(guī)那么(10) 強(qiáng)制類(lèi)型轉(zhuǎn)換C語(yǔ)言中還可以用括號(hào)進(jìn)行強(qiáng)制的類(lèi)型轉(zhuǎn)換,方法為:(類(lèi)型名) 變量名;或:(類(lèi)型名) 表達(dá)式;例如:int var1;unsigned char var2;var1 = (int) var2;/ var2轉(zhuǎn)換為整型var2 = (unsigned char) var1;/ var1轉(zhuǎn)換為字符型7/18/2022215.1.2 C51運(yùn)算符、表達(dá)式及其規(guī)那么(11) sizeof運(yùn)算符C語(yǔ)言中提
12、供了一種用于求取數(shù)據(jù)類(lèi)型、變量以及表達(dá)式在存儲(chǔ)器中占用的字節(jié)數(shù)的運(yùn)算符:sizeof,該運(yùn)算符的一般使用形式為: sizeof(表達(dá)式);或sizeof(數(shù)據(jù)類(lèi)型);例如:sizeof(char);sizeof(int);注意sizeof是一個(gè)表達(dá)式而不是一個(gè)函數(shù),這個(gè)表達(dá)式的值在編譯時(shí)就已經(jīng)由編譯器計(jì)算出來(lái)了,而不是在程序執(zhí)行的過(guò)程中計(jì)算的。 7/18/2022225.1.3 C51的存儲(chǔ)模式C51編譯器完全支持MCS-51型單片機(jī)的存儲(chǔ)結(jié)構(gòu)。該編譯器引入了存儲(chǔ)模式關(guān)鍵字,通過(guò)將變量、常量定義成不同的存儲(chǔ)模式(類(lèi)型)的方法,將它們定位在不同的存儲(chǔ)空間中。在C51中對(duì)變量進(jìn)行定義的格式如下:存
13、儲(chǔ)種類(lèi) 數(shù)據(jù)類(lèi)型 存儲(chǔ)器類(lèi)型 變量名表;存儲(chǔ)種類(lèi)和存儲(chǔ)器類(lèi)型是可選項(xiàng)。變量的存儲(chǔ)種類(lèi)有自動(dòng)(auto)、外部(extern)、靜態(tài)(static)和存放器(register)共四種。如果定義變量時(shí)省略了存儲(chǔ)種類(lèi),那么該變量缺省為自動(dòng)(auto)變量。 7/18/2022235.1.3 C51的存儲(chǔ)模式C51還允許程序指定變量的存儲(chǔ)器類(lèi)型。C51編譯器支持的存儲(chǔ)器類(lèi)型及存儲(chǔ)空間以及訪問(wèn)方式為:存儲(chǔ)區(qū)變量存儲(chǔ)位置及訪問(wèn)方式data變量存儲(chǔ)于內(nèi)部RAM 的低128字節(jié),可在一個(gè)機(jī)器周期內(nèi)直接尋址bdata變量存儲(chǔ)于內(nèi)部RAM 20H2FH共16個(gè)字節(jié)的可位尋址區(qū)idata變量存儲(chǔ)于內(nèi)部RAM的高12
14、8個(gè)字節(jié),采用間接尋址方式訪問(wèn)pdata變量存儲(chǔ)于外部RAM區(qū)的低256字節(jié),使用MOVX Ri指令通過(guò)P0 口輸出8位地址對(duì)其進(jìn)行間接尋址,需要兩個(gè)機(jī)器周期xdata變量存放于整個(gè)外部RAM區(qū),使用DPTR間接尋址的方式訪問(wèn),可訪問(wèn)空間范圍為64KBcode變量存放于程序存儲(chǔ)器區(qū),使用DPTR或PC尋址,尋址范圍64KB7/18/2022245.1.3 C51的存儲(chǔ)模式1、data存儲(chǔ)模式由于編譯器會(huì)把聲明為data的變量存放在單片機(jī)內(nèi)部RAM的低128字節(jié),并通過(guò)直接尋址的方式訪問(wèn),因此對(duì)data區(qū)的尋址是最快的,所以應(yīng)該把使用頻率高的變量放在data區(qū)。但要注意的是聲明為data類(lèi)的存儲(chǔ)
15、區(qū)除了包含程序變量外,還包含了堆棧和存放器組。使用時(shí)要加以注意。data存儲(chǔ)模式的聲明如下:7/18/2022255.1.3 C51的存儲(chǔ)模式1、data存儲(chǔ)模式data存儲(chǔ)模式的聲明如下:unsigned char data system_status=0;unsigned int data unit_id2;data char input_string16;float data output_value;mytype data new_var;注意:如果某變量聲明未指定類(lèi)型,那么編譯器會(huì)將其放在當(dāng)前存儲(chǔ)模式的缺省數(shù)據(jù)區(qū)。7/18/2022265.1.3 C51的存儲(chǔ)模式1、data存儲(chǔ)模式
16、只要不超過(guò)內(nèi)部data區(qū)的范圍,系統(tǒng)變量和用戶(hù)變量均可存放在其中。使用時(shí)要考慮到C51使用存放器組傳遞函數(shù)的參數(shù)(因此data區(qū)至少被占用8字節(jié)),此外還要留出足夠的堆??臻g(大小和中斷源數(shù)、函數(shù)調(diào)用嵌套層數(shù)相關(guān),編譯器會(huì)自動(dòng)處理,用戶(hù)根本不用考慮此問(wèn)題。這一點(diǎn)也是高級(jí)語(yǔ)言比匯編更方便的原因之一)。7/18/2022275.1.3 C51的存儲(chǔ)模式2、bdata存儲(chǔ)模式定義為bdata存儲(chǔ)類(lèi)型的變量,可以進(jìn)行位尋址,可聲明位變量。這對(duì)于一些需要單獨(dú)操作字節(jié)中某些位的應(yīng)用場(chǎng)合非常適用;但是要注意,bdata存儲(chǔ)區(qū)只能存儲(chǔ)字符型及整型變量,編譯器不允許在bdata存儲(chǔ)區(qū)中定義float、doubl
17、e類(lèi)型的變量。7/18/2022285.1.3 C51的存儲(chǔ)模式3、idata存儲(chǔ)模式idata存儲(chǔ)區(qū)對(duì)應(yīng)MCS-52系列單片機(jī)內(nèi)部RAM的高128字節(jié)的存儲(chǔ)空間,也可存放使用比較頻繁的變量。這些變量使用MOV R0和MOV R1存放器間接尋址方式進(jìn)行尋址。和外部存儲(chǔ)器尋址比較,它的指令執(zhí)行周期和代碼長(zhǎng)度都比較短。例如:unsigned char idata system_status=0;unsigned int idata unit_id2;idata char input_string16;idata float output_value;7/18/2022295.1.3 C51的存儲(chǔ)模
18、式4、pdata和xdata存儲(chǔ)模式pdata存儲(chǔ)區(qū)對(duì)應(yīng)外部RAM最低256字節(jié)的存儲(chǔ)空間,通過(guò)MOVX R0/R1間址方式尋址。xdata區(qū)那么對(duì)應(yīng)全部外部RAM的64K尋址空間,通過(guò)MOVX DPTR方式尋址。由于pdata區(qū)的地址為8位而xdata區(qū)為16位,因此pdata區(qū)的尋址比xdata區(qū)的尋址快。unsigned char xdata system_status=0;unsigned int pdata unit_id2;xdata char input_string16;pdata float output_value;7/18/2022305.1.3 C51的存儲(chǔ)模式4、pd
19、ata和xdata存儲(chǔ)模式外部RAM地址除了訪問(wèn)物理存儲(chǔ)器的地址外,還包含I/O器件的譯碼選通地址。對(duì)外部器件尋址可通過(guò)指針或C51提供的宏來(lái)完成,可讀性更好。宏定義看上去像char或int類(lèi)型的數(shù)組:inp_byte = XBYTE0 x8500;/ 從XRAM地址8500H讀一個(gè)字節(jié)inp_word = XWORD0 x4000;/ 從XRAM地址4000H讀兩個(gè)字節(jié)XBYTE0 x7500=out_val;/ 寫(xiě)一個(gè)字節(jié)到XRAM的7500H可對(duì)外部RAM中除bdata存儲(chǔ)區(qū)之外的其它數(shù)據(jù)段采用以上方法尋址。使用絕對(duì)地址訪問(wèn)的宏需要包含頭文件 absacc.h7/18/2022315.1
20、.3 C51的存儲(chǔ)模式5、code存儲(chǔ)模式MCS-51的代碼區(qū)為只讀存儲(chǔ)器,不可重寫(xiě)。一般代碼區(qū)中除了程序代碼外,還可存放數(shù)據(jù)表。數(shù)據(jù)表在源程序中定義,在編譯過(guò)程中初始化。unsigned int code unit_id = 1234;unsigned char code Table = 0 x00, 0 x01, 0 x02, 0 x03, 0 x04, 0 x05;7/18/2022325.1.4 C51的指針指針的本質(zhì)是一個(gè)與地址相關(guān)的復(fù)合類(lèi)型,它的值是數(shù)據(jù)存放的位置(地址)。C51提供一個(gè)3字節(jié)的通用存儲(chǔ)器指針,通用指針的第一個(gè)字節(jié)說(shuō)明指針?biāo)赶虻淖兞康拇鎯?chǔ)空間,另外兩個(gè)字節(jié)存儲(chǔ)16
21、位偏移量。對(duì)明確聲明為data、idata和pdata類(lèi)型的指針只需要8位偏移量。7/18/2022335.1.4 C51的指針Keil允許使用者規(guī)定指針指向的存儲(chǔ)區(qū)。這種指針叫具體指針。使用具體指針的好處是節(jié)省了存儲(chǔ)空間,編譯器不用根據(jù)指針類(lèi)型選擇存儲(chǔ)空間、確定尋址方式,這樣就使代碼更加簡(jiǎn)短。char *str1;/ 未指明存儲(chǔ)空間,通用指針char data *str2;/ 指明存儲(chǔ)空間,具體指針由于具體指針操作比通用指針的操作快得多,因此在一般情況下,不推薦使用通用指針。7/18/2022345.1.4 C51的指針使用指針時(shí)必須注意1、指針不能越界;這種錯(cuò)誤編譯器無(wú)法發(fā)現(xiàn),且調(diào)試中不易
22、發(fā)現(xiàn);2、不同類(lèi)型的指針之間如果需要賦值,必須經(jīng)過(guò)顯式強(qiáng)制類(lèi)型轉(zhuǎn)換。指針類(lèi)型存儲(chǔ)空間通用指針3字節(jié)xdata指針2字節(jié)code指針2字節(jié)pdata指針1字節(jié)data指針1字節(jié)idata指針1字節(jié)7/18/2022355.1.5 C51的中斷效勞程序在C51中可以用C來(lái)聲明中斷和編寫(xiě)中斷效勞程序。中斷過(guò)程通過(guò)使用interrupt關(guān)鍵字和中斷號(hào)(031)來(lái)實(shí)現(xiàn)。編譯器根據(jù)中斷號(hào)計(jì)算中斷效勞程序的入口地址。中斷號(hào)和MCS-51中斷源之間的關(guān)系如下:中斷號(hào)中斷源0外部中斷01定時(shí)器/計(jì)數(shù)器0溢出中斷2外部中斷13定時(shí)器/計(jì)數(shù)器1溢出中斷4串行口中斷5定時(shí)器/計(jì)數(shù)器2溢出中斷7/18/2022365.
23、1.5 C51的中斷效勞程序編譯器在生成中斷效勞程序時(shí),會(huì)自動(dòng)在入口處保護(hù)所有將在ISR中使用的存放器、存儲(chǔ)單元(壓入堆棧),并在退出ISR之前恢復(fù)現(xiàn)場(chǎng)??梢酝ㄟ^(guò)using關(guān)鍵字指定某ISR使用的具體的存放器組:void Int0Isr(void) interrupt 0 using 3 7/18/2022375.1.5 C51的中斷效勞程序此時(shí)在ISR入口處將不再產(chǎn)生將當(dāng)前存放器組壓入堆棧的代碼,這樣有利于快速響應(yīng)中斷。但因?yàn)樵贑中所有函數(shù)參數(shù)傳遞、指針引用等都要用到存放器間接尋址的方式,因此,這種方法帶來(lái)的副作用是:所有ISR中調(diào)用的函數(shù)、使用的變量都必須基于同一個(gè)存放器組,否那么將出錯(cuò)。
24、7/18/2022385.1.6 高質(zhì)量的C51編程1、采用短變量一個(gè)提高代碼效率的最根本的方式就是減小變量的字長(zhǎng),提高速度。例如,使用傳統(tǒng)C編程時(shí)我們都習(xí)慣于對(duì)循環(huán)控制變量使用int類(lèi)型,如果循環(huán)次數(shù)在255次以下,完全可以采用unsigned char型變量作為循環(huán)控制變量。編程者應(yīng)該根據(jù)變量值可能的取值范圍選擇適宜的變量類(lèi)型(字長(zhǎng))。7/18/2022395.1.6 高質(zhì)量的C51編程2、盡量使用無(wú)符號(hào)類(lèi)型變量由于MCS-51并不支持符號(hào)運(yùn)算,符號(hào)運(yùn)算要通過(guò)庫(kù)函數(shù)等方式實(shí)現(xiàn),這會(huì)引起程序性能的下降。編程者應(yīng)根據(jù)應(yīng)用的具體情況,盡量不使用帶符號(hào)的變量。7/18/2022405.1.6 高質(zhì)
25、量的C51編程3、防止使用浮點(diǎn)數(shù)及浮點(diǎn)數(shù)指針在8位字長(zhǎng)的單片機(jī)系統(tǒng)上使用32位浮點(diǎn)數(shù)會(huì)引起程序體積的增大和程序效率的極大下降。在實(shí)際使用中,可以通過(guò)提高數(shù)值數(shù)量級(jí)和使用整型運(yùn)算來(lái)防止使用浮點(diǎn)數(shù)/指針運(yùn)算。7/18/2022415.1.6 高質(zhì)量的C51編程4、盡可能多使用位變量對(duì)于程序中使用的只有兩種取值的標(biāo)志位,應(yīng)盡可能使用位變量而不是char。這將提高操作效率,節(jié)省內(nèi)存。7/18/2022425.1.6 高質(zhì)量的C51編程5、用局部變量代替全局變量把變量定義成局部變量比全局變量更有效率。編譯器可通過(guò)覆蓋處理使內(nèi)存的使用效率更高,同時(shí)還可以防止多個(gè)程序調(diào)用公共變量時(shí)引起的同步問(wèn)題。7/18/
26、2022435.1.6 高質(zhì)量的C51編程6、盡量將變量分配在內(nèi)部存儲(chǔ)區(qū)這樣可以提高程序運(yùn)行的速度、減小代碼占用的空間。在保證足夠的堆棧空間的情況下,建議按以下順序定義變量:data idata pdata xdata對(duì)應(yīng)尋址方式:data:直接尋址。如 MOV A,30Hidata:R07間接尋址。如 MOV A,R7pdata:外部RAM R0,1間址。如 MOVX A,R0 xdata:外部RAM DPTR間址。MOVX A,DPTR7/18/2022445.1.6 高質(zhì)量的C51編程7、使用特定指針在定義指針時(shí)應(yīng)明確指定其所指向的存儲(chǔ)類(lèi)型,如data、xdata等,這樣編譯器會(huì)根據(jù)指針的存儲(chǔ)空間自動(dòng)生成適宜的指針代碼,這樣速度更快,代碼更緊湊。通用指針需占用3字節(jié)代碼空間,而xdata指針以及code指針為2字節(jié),data、idata、pdata指針只有1字節(jié)。7/18/2022455.1.6 高質(zhì)量的C51編程8、使用內(nèi)聯(lián)函數(shù)對(duì)于一些簡(jiǎn)單的操作如變量循環(huán)位移,編譯器提供了一些內(nèi)聯(lián)函數(shù)供用戶(hù)調(diào)用。多數(shù)內(nèi)聯(lián)函數(shù)直接對(duì)應(yīng)著匯編指令,因此可較大地提高
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程建設(shè)項(xiàng)目用工合同模板
- 紅木家具采購(gòu)合同樣本
- 國(guó)際牛肉市場(chǎng)分銷(xiāo)合同
- 外匯資金代操作理財(cái)合同協(xié)議
- Module 1 Wonders of the world Unit 2 Reading and vocabulary 教學(xué)設(shè)計(jì) -2024-2025學(xué)年外研版英語(yǔ)九年級(jí)上冊(cè)
- 2 土壤-動(dòng)植物的樂(lè)園 教學(xué)設(shè)計(jì) 2024-2025學(xué)年科學(xué)二年級(jí)上冊(cè)教科版
- 2023-2024學(xué)年人教版九年級(jí)化學(xué)下冊(cè)同步教學(xué)設(shè)計(jì)第九單元《溶液》
- 8《匆匆》(教學(xué)設(shè)計(jì))2023-2024學(xué)年統(tǒng)編版語(yǔ)文六年級(jí)下冊(cè)
- Module 10 The weather Unit 3 Language practice (1)教學(xué)設(shè)計(jì)2024-2025學(xué)年外研版英語(yǔ)八年級(jí)上冊(cè)
- 春節(jié)照看協(xié)議合同范本
- 家長(zhǎng)進(jìn)課堂--小學(xué)生食品安全知識(shí)
- 酒店預(yù)訂確認(rèn)單
- 會(huì)計(jì)人才培養(yǎng)方案調(diào)研報(bào)告書(shū)
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)(微課版第3版)課件 第1、2章 了解創(chuàng)業(yè)規(guī)劃你的職業(yè)生涯、創(chuàng)新與創(chuàng)新思維
- E時(shí)代大學(xué)英語(yǔ)-讀寫(xiě)教程2 第四單元
- 四年級(jí)語(yǔ)文上冊(cè)第一單元單元整體教學(xué)設(shè)計(jì)
- 玩具安全標(biāo)準(zhǔn)測(cè)試培訓(xùn)-(SGS)課件
- 員工工資條模板
- 病例報(bào)告表格模板CRF
- 綠色化學(xué)工藝-綠色技術(shù)教學(xué)課件
- 電梯安全年檢檢測(cè)規(guī)程
評(píng)論
0/150
提交評(píng)論