




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、天津理工大學(xué)聾人工學(xué)院2021-10-261第第4 4章章 80C5180C51的匯編及的匯編及C C語言程序設(shè)計(jì)語言程序設(shè)計(jì)單片機(jī)單片機(jī)匯編、匯編、C語言概述語言概述4.1C51的的數(shù)據(jù)類型數(shù)據(jù)類型與運(yùn)算與運(yùn)算4.2C51流程流程控制語句控制語句4.3C51的的指針類型指針類型4.4C51的的函數(shù)函數(shù)4.5C51編程編程實(shí)例實(shí)例4.6天津理工大學(xué)聾人工學(xué)院2021-10-262v 單片機(jī)應(yīng)用系統(tǒng)由單片機(jī)應(yīng)用系統(tǒng)由硬件系統(tǒng)硬件系統(tǒng)和和應(yīng)用程序應(yīng)用程序構(gòu)成構(gòu)成v 匯編語言匯編語言v 高級(jí)語言高級(jí)語言v 應(yīng)用程序設(shè)計(jì)方法應(yīng)用程序設(shè)計(jì)方法 匯編語言匯編語言,生成的目標(biāo)程序占內(nèi)存空間少、,生成的目標(biāo)程
2、序占內(nèi)存空間少、運(yùn)行速度快,具有效率高、實(shí)時(shí)性強(qiáng)。運(yùn)行速度快,具有效率高、實(shí)時(shí)性強(qiáng)。 高級(jí)語言高級(jí)語言,對(duì)系統(tǒng)的功能描述與實(shí)現(xiàn)簡單,對(duì)系統(tǒng)的功能描述與實(shí)現(xiàn)簡單,程序閱讀、修改和移植方便,適合于編寫復(fù)程序閱讀、修改和移植方便,適合于編寫復(fù)雜的程序。如雜的程序。如C51C51 4.1 單片機(jī)匯編及單片機(jī)匯編及C語言概述語言概述 天津理工大學(xué)聾人工學(xué)院2021-10-263匯編語言的語句格式匯編語言的語句格式v 非數(shù)字字符開頭,后跟字母、數(shù)字、非數(shù)字字符開頭,后跟字母、數(shù)字、“- -”、“?”等等v 不能用已定義的保留字(指令助記符、偽指令等)不能用已定義的保留字(指令助記符、偽指令等)v 后跟英文
3、冒號(hào)后跟英文冒號(hào)“: :”KeilKeil的匯編器的匯編器A51A51可以識(shí)別的語句形式為:可以識(shí)別的語句形式為:v 標(biāo)號(hào)(即符號(hào)地址)標(biāo)號(hào)(即符號(hào)地址)標(biāo)號(hào): 指令助記符指令助記符 操作數(shù)1, 操作數(shù)2, 操作數(shù)3, ;注釋v 指令助記符指令助記符是指令功能的英文縮寫。是指令功能的英文縮寫。4.1 單片機(jī)匯編語言概述單片機(jī)匯編語言概述 80C5180C51的匯編語言程序設(shè)計(jì)的匯編語言程序設(shè)計(jì)- -自學(xué)自學(xué)天津理工大學(xué)聾人工學(xué)院2021-10-2644.1 單片機(jī)單片機(jī)C語言概述語言概述 4.1.1 C514.1.1 C51程序開發(fā)過程程序開發(fā)過程 v 編譯器能自動(dòng)完成變量的存儲(chǔ)單元的分配編譯
4、器能自動(dòng)完成變量的存儲(chǔ)單元的分配v 對(duì)常用功能模塊和算法編制相應(yīng)的函數(shù),方便移植對(duì)常用功能模塊和算法編制相應(yīng)的函數(shù),方便移植v 采用采用C51C51的優(yōu)點(diǎn)的優(yōu)點(diǎn) C C語言具有良好的可讀性、可移植性和基本的硬件操作能力語言具有良好的可讀性、可移植性和基本的硬件操作能力 。 v C51C51程序開發(fā)過程程序開發(fā)過程 v 編寫源程序編寫源程序v 建立工程,加入源程序建立工程,加入源程序v 編譯生產(chǎn)目標(biāo)程序編譯生產(chǎn)目標(biāo)程序v 仿真調(diào)試、寫存儲(chǔ)器仿真調(diào)試、寫存儲(chǔ)器天津理工大學(xué)聾人工學(xué)院2021-10-265天津理工大學(xué)聾人工學(xué)院2021-10-2664.1.2 C514.1.2 C51程序結(jié)構(gòu)程序結(jié)構(gòu)
5、#include #include #include #include void void delaymsdelayms(unsigned)(unsigned);void main(void)void main(void) unsigned char i unsigned char i; P1=0 x01P1=0 x01; dodo for (i=0for (i=0;i=7i=7;i+)i+) delaymsdelayms(5000)(5000); P1=P11P1=P11; if(P1=0 x0)P1=0 x01if(P1=0 x0)P1=0 x01; while(1) while(1);
6、void void delaymsdelayms(unsigned x)(unsigned x) unsigned char j unsigned char j; while(x-)while(x-) for(j=0 for(j=0;j123j123;j+)j+); 天津理工大學(xué)聾人工學(xué)院2021-10-2674.2.1 C514.2.1 C51的數(shù)據(jù)類型的數(shù)據(jù)類型4.2 C51的數(shù)據(jù)類型與運(yùn)算的數(shù)據(jù)類型與運(yùn)算 數(shù)據(jù)類型決定其數(shù)據(jù)類型決定其取值范圍取值范圍、占用、占用存儲(chǔ)器的大小存儲(chǔ)器的大小及可參與及可參與哪種運(yùn)算。哪種運(yùn)算。 數(shù)據(jù)類型數(shù)據(jù)類型長度長度(位位)取值范圍取值范圍字符型字符型sig
7、ned char8-128127unsigned char80255整整 型型signed int16-3276832767unsigned int16065535長整型長整型signed long32-2147488364821474883647unsigned long3204294967295浮點(diǎn)型浮點(diǎn)型float321.75494E-383.402823E+38位位 型型bit10,1sbit10,1訪問訪問SFRsfr80255sfr1616065535天津理工大學(xué)聾人工學(xué)院2021-10-268v 盡可能采用無符號(hào)格式盡可能采用無符號(hào)格式v bitbit用于定義位變量的名字,編譯器
8、會(huì)對(duì)其分用于定義位變量的名字,編譯器會(huì)對(duì)其分配地址(配地址(RAMRAM的的20H20H2FH 2FH 區(qū)域區(qū)域)v sbitsbit用于定義位變量的名字和地址,地址是確用于定義位變量的名字和地址,地址是確定的且不用編譯器分配(定的且不用編譯器分配(SFRSFR及及RAMRAM的的20H20H2FH 2FH 區(qū)區(qū)域域)v C51C51編譯器在編譯時(shí)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換編譯器在編譯時(shí)會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換 幾點(diǎn)說明:幾點(diǎn)說明:天津理工大學(xué)聾人工學(xué)院2021-10-2694.2.2 C514.2.2 C51數(shù)據(jù)的存儲(chǔ)類型數(shù)據(jù)的存儲(chǔ)類型vC51C51的存儲(chǔ)的存儲(chǔ)器器類型類型存儲(chǔ)器類型存儲(chǔ)器類型長度(位)長
9、度(位)對(duì)應(yīng)單片機(jī)存儲(chǔ)器對(duì)應(yīng)單片機(jī)存儲(chǔ)器bdata1片內(nèi)片內(nèi)RAM位尋址區(qū),共位尋址區(qū),共128位。(亦能字節(jié)訪問)位。(亦能字節(jié)訪問)data8直接尋址,共直接尋址,共128字節(jié)。字節(jié)。idata8間接尋址,共間接尋址,共256字節(jié)。字節(jié)。pdata8片外片外 RAM分頁間址,共分頁間址,共256字節(jié)。(字節(jié)。(MOVX Ri)xdata16間接尋址,共間接尋址,共64k字節(jié)。(字節(jié)。(MOVX DPTR)code16ROM間接尋址,共間接尋址,共64k字節(jié)。(字節(jié)。(MOVC A,A+DPTR)天津理工大學(xué)聾人工學(xué)院2021-10-2610v 經(jīng)常使用的變量應(yīng)該置于片內(nèi)經(jīng)常使用的變量應(yīng)該置
10、于片內(nèi)RAMRAM中,要用中,要用bdatabdata、datadata、idataidata來定義來定義v 不經(jīng)常使用的變量或規(guī)模較大的變量應(yīng)該置于片外不經(jīng)常使用的變量或規(guī)模較大的變量應(yīng)該置于片外RAMRAM中,中,要用要用pdatapdata、xdataxdata來定義來定義v 默認(rèn)存儲(chǔ)器類型由編譯控制命令的存儲(chǔ)模式指令限制默認(rèn)存儲(chǔ)器類型由編譯控制命令的存儲(chǔ)模式指令限制 存儲(chǔ)模式存儲(chǔ)模式默認(rèn)默認(rèn)存儲(chǔ)類型存儲(chǔ)類型特特 點(diǎn)點(diǎn)SMALL data小模式。小模式。 變量默認(rèn)在片內(nèi)變量默認(rèn)在片內(nèi)RAM。空間小,速度塊??臻g小,速度塊。COMPACTpdata緊湊模式。變量默認(rèn)在片外緊湊模式。變量默認(rèn)
11、在片外RAM的頁(的頁(256字節(jié),頁號(hào)由字節(jié),頁號(hào)由P2口決定)??跊Q定)。LARGExdata大模式。大模式。 變量默認(rèn)在片外變量默認(rèn)在片外RAM的的64KB范圍??臻g大,速度慢。范圍??臻g大,速度慢。天津理工大學(xué)聾人工學(xué)院2021-10-26114.2.3 80C514.2.3 80C51硬件結(jié)構(gòu)的硬件結(jié)構(gòu)的C51C51定義定義v特殊功能寄存器的聲明特殊功能寄存器的聲明 sfrsfr 特殊功能寄存器名特殊功能寄存器名 = = 地址常數(shù);地址常數(shù);格式:格式:例如:例如:sfr SCON = 0 x90sfr SCON = 0 x90;sfr P0 = 0 x80sfr P0 = 0 x8
12、0; 天津理工大學(xué)聾人工學(xué)院2021-10-2612v特殊功能寄存器中特殊功能寄存器中特定位特定位的聲明的聲明 v sbit sbit 位變量名位變量名= =特殊功能寄存器名特殊功能寄存器名 位的位置(位的位置(0 07 7) 例如:例如: sfr PSW=0 xD0sfr PSW=0 xD0; sbit OV=PSW2 sbit OV=PSW2; v sbit sbit 位變量名位變量名 = = 字節(jié)地址字節(jié)地址 位的位置(位的位置(0 07 7) 例如:例如: sbit OV=0 xD02sbit OV=0 xD02; sbit CY=0 xD07 sbit CY=0 xD07; v sb
13、it sbit 位變量名位變量名 = = 位地址位地址 例如:例如: sbit OV=0 xD2sbit OV=0 xD2; sbit CY=0 xD7 sbit CY=0 xD7; 天津理工大學(xué)聾人工學(xué)院2021-10-2613v內(nèi)部內(nèi)部RAMRAM中可位尋址對(duì)象的定義中可位尋址對(duì)象的定義 v 先先定義變量的數(shù)據(jù)類型和存儲(chǔ)類型定義變量的數(shù)據(jù)類型和存儲(chǔ)類型 例如:例如: int bdata ibaseint bdata ibase; char bdata array4 char bdata array4; v 再再利用利用sbitsbit進(jìn)行聲明進(jìn)行聲明 例如:例如: sbit mybit0
14、= ibase0sbit mybit0 = ibase0; sbit mybit15 = ibase15 sbit mybit15 = ibase15; sbit ary07 = array07sbit ary07 = array07; 訪問示例:訪問示例:ibase = -1ibase = -1;array2 = array2 = a a; 天津理工大學(xué)聾人工學(xué)院2021-10-2614v算術(shù)運(yùn)算符和算術(shù)表達(dá)式算術(shù)運(yùn)算符和算術(shù)表達(dá)式 4.2.4 C514.2.4 C51的運(yùn)算符和表達(dá)式的運(yùn)算符和表達(dá)式 v 基本算術(shù)運(yùn)算符基本算術(shù)運(yùn)算符 例如:例如: + + 加法運(yùn)算符;加法運(yùn)算符; - -
15、減法(取負(fù))運(yùn)算符;減法(取負(fù))運(yùn)算符; * * 乘法運(yùn)算符;乘法運(yùn)算符; / / 除法運(yùn)算符;除法運(yùn)算符; % % 取余數(shù)運(yùn)算符取余數(shù)運(yùn)算符。 示例:示例:25.0/20.0=1.25 25.0/20.0=1.25 25/20=125/20=125%20=5 25%20=5 取負(fù)運(yùn)算優(yōu)先級(jí)最高。取負(fù)運(yùn)算優(yōu)先級(jí)最高。 天津理工大學(xué)聾人工學(xué)院2021-10-2615v 自增、自減運(yùn)算符(自增、自減運(yùn)算符(僅能用于變量僅能用于變量) 例如:例如: + + 自增運(yùn)算符;自增運(yùn)算符; - - 自減運(yùn)算符;自減運(yùn)算符;v 類型轉(zhuǎn)換運(yùn)算符類型轉(zhuǎn)換運(yùn)算符 自動(dòng)轉(zhuǎn)換,順序:自動(dòng)轉(zhuǎn)換,順序:bitcharint
16、longfloatbitcharintlongfloat 強(qiáng)制類型轉(zhuǎn)換,如:(強(qiáng)制類型轉(zhuǎn)換,如:(doubledouble)a a 天津理工大學(xué)聾人工學(xué)院2021-10-2616v關(guān)系運(yùn)算符關(guān)系運(yùn)算符和和關(guān)系表達(dá)式關(guān)系表達(dá)式 v 關(guān)系運(yùn)算符關(guān)系運(yùn)算符 小于;小于; = 大于;大于; = = 大于等于;大于等于; = = = = 等于;等于; != = 不等于。不等于。v 關(guān)系表達(dá)式關(guān)系表達(dá)式關(guān)系表達(dá)式的值為邏輯值:真(關(guān)系表達(dá)式的值為邏輯值:真(1 1)和假()和假(0 0)天津理工大學(xué)聾人工學(xué)院2021-10-2617v邏輯運(yùn)算符邏輯運(yùn)算符和和邏輯表達(dá)式邏輯表達(dá)式 v 邏輯運(yùn)算符邏輯運(yùn)算符
17、& & 邏輯與;邏輯與; | | 邏輯或;邏輯或; ! 邏輯非。邏輯非。 v 邏輯表達(dá)式邏輯表達(dá)式邏輯表達(dá)式的值為邏輯值:真(邏輯表達(dá)式的值為邏輯值:真(1 1)和假()和假(0 0)例:例:5| | 05| | 0結(jié)果為結(jié)果為1 1,2&02&0結(jié)果為結(jié)果為0 0 天津理工大學(xué)聾人工學(xué)院2021-10-2618v位運(yùn)算符位運(yùn)算符 & & 按位與;按位與; | | 按位或;按位或; 按位異或;按位異或; 按位取反;按位取反; 右移。右移。 例:例:P1=P11P1=P11表示對(duì)表示對(duì)P1P1口的所有位左移口的所有位左移1 1位位 天津理工大學(xué)聾人工學(xué)院2021-10-2619v賦值和復(fù)合賦值運(yùn)
18、算符賦值和復(fù)合賦值運(yùn)算符 v 復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符 += += 加法賦值;加法賦值; -= -= 減法賦值;減法賦值; * *= = 乘法賦值;乘法賦值; /= /= 除法賦值;除法賦值; %= %= 取模賦值;取模賦值; v 符號(hào)符號(hào)“= =”稱為賦值運(yùn)算稱為賦值運(yùn)算符符 = = = 右移位賦值;右移位賦值; &= &= 邏輯與賦值;邏輯與賦值; |= |= 邏輯或賦值;邏輯或賦值; = = 邏輯異或賦值;邏輯異或賦值; = = 邏輯非賦值邏輯非賦值 例:例:a a* *=5=5相當(dāng)于相當(dāng)于a=aa=a* *5 5;b&=0 x80b&=0 x80相當(dāng)于相當(dāng)于b=b&0 x80b=b
19、&0 x80。天津理工大學(xué)聾人工學(xué)院2021-10-26204.3 C51流程控制語句流程控制語句 4.3.1 C514.3.1 C51選擇語句選擇語句 v條件語句條件語句v ifif(條件表達(dá)式)語句(條件表達(dá)式)語句 例如:例如: if if(p1p1!= 0= 0) c=20 c=20; v ifif(條件表達(dá)式)語句(條件表達(dá)式)語句1 1 else else 語句語句2 2 例如:例如: if if(p1p1!= 0= 0) c=20 c=20; else c=0 else c=0; 天津理工大學(xué)聾人工學(xué)院2021-10-2621v ifif(條件表達(dá)式(條件表達(dá)式1 1)語句)語句
20、1 1 else if else if (條件表達(dá)式(條件表達(dá)式2 2)語句)語句2 2 else if else if (條件表達(dá)式(條件表達(dá)式3 3)語句)語句3 3 else if else if (條件表達(dá)式(條件表達(dá)式n n)語句)語句n n else else 語句語句n+1 n+1 天津理工大學(xué)聾人工學(xué)院2021-10-2622v開關(guān)語句開關(guān)語句switch switch (表達(dá)式)(表達(dá)式) case case 常量表達(dá)式常量表達(dá)式1 1:語句:語句1 1;breakbreak; case case 常量表達(dá)式常量表達(dá)式2 2:語句:語句2 2;breakbreak; case
21、 case 常量表達(dá)式常量表達(dá)式n n:語句:語句n n;breakbreak; default default :語句:語句n+1n+1; 天津理工大學(xué)聾人工學(xué)院2021-10-26234.3.2 C514.3.2 C51循環(huán)語句循環(huán)語句 vwhilewhile語句語句 v 一般形式為:一般形式為: whilewhile(條件表達(dá)式)語句;(條件表達(dá)式)語句;如果條件表達(dá)式的結(jié)果一開始就為假,則后面的語句一如果條件表達(dá)式的結(jié)果一開始就為假,則后面的語句一次也不能執(zhí)行。次也不能執(zhí)行。 vdo-whiledo-while語句語句 v 一般形式為:一般形式為: dodo語句語句 whilewhil
22、e(條件表達(dá)式);(條件表達(dá)式);任何條件下,循環(huán)體語句至少會(huì)被執(zhí)行一次。任何條件下,循環(huán)體語句至少會(huì)被執(zhí)行一次。 天津理工大學(xué)聾人工學(xué)院2021-10-2624vforfor語句語句v 一般形式為:一般形式為: forfor( 初值表達(dá)式初值表達(dá)式;條件表達(dá)式條件表達(dá)式;更新表達(dá)式更新表達(dá)式 )語)語句句vifif語句與語句與gotogoto語句結(jié)合語句結(jié)合 v 當(dāng)型循環(huán)當(dāng)型循環(huán) 形式為:形式為: looploop:ifif(表達(dá)式)(表達(dá)式) 語句語句 goto loopgoto loop; 天津理工大學(xué)聾人工學(xué)院2021-10-2625v 直到型循環(huán)直到型循環(huán) 形式為:形式為: loop
23、loop: 語句語句 ifif(表達(dá)式)(表達(dá)式) goto loopgoto loop; vcontinuecontinue是一種循環(huán)中斷語句,它并不跳出循環(huán)體;是一種循環(huán)中斷語句,它并不跳出循環(huán)體;vbreakbreak語句只能跳出它所處的那一層循環(huán);語句只能跳出它所處的那一層循環(huán);vgotogoto語句可以用于跳出多重循環(huán)(從內(nèi)層到外層)。語句可以用于跳出多重循環(huán)(從內(nèi)層到外層)。注意:注意:天津理工大學(xué)聾人工學(xué)院2021-10-26264.4 C51的指針類型的指針類型 v有一個(gè)變量有一個(gè)變量a a,利用,利用&a&a表示變量表示變量a a的地址的地址 。則語句。則語句 p=&a p=
24、&a; 把把a(bǔ) a的地址賦給了指針變量的地址賦給了指針變量p p,則,則“p p指向了變量指向了變量a a”。 v * *P P表示變量表示變量a a的內(nèi)容的內(nèi)容指針變量的定義指針變量的定義 char data char data * *p /p /* * 定義指針變量定義指針變量 * */ / p = 30H / p = 30H /* * 為指針變量賦值,為指針變量賦值,30H30H為片內(nèi)為片內(nèi)RAMRAM地址地址 * */ / x = x = * *p /p /* * 30H 30H單元的內(nèi)容送給變量單元的內(nèi)容送給變量x x * */ /天津理工大學(xué)聾人工學(xué)院2021-10-2627v 定
25、義時(shí)定義時(shí)未指定未指定它所指向的它所指向的對(duì)象的存儲(chǔ)器對(duì)象的存儲(chǔ)器類型類型 4.4.1 4.4.1 一般指針一般指針 v 一般指針占一般指針占3 3個(gè)字節(jié)個(gè)字節(jié)第一字節(jié)存放該指針的第一字節(jié)存放該指針的默認(rèn)默認(rèn)存儲(chǔ)器類型編碼(存儲(chǔ)器類型編碼(見表見表)第二字節(jié)存放該指針的第二字節(jié)存放該指針的高高位地址偏移量位地址偏移量第三字節(jié)存放該指針的第三字節(jié)存放該指針的低低位地址偏移量位地址偏移量 v 存儲(chǔ)器類型編碼存儲(chǔ)器類型編碼 存儲(chǔ)器類型存儲(chǔ)器類型bdata/ data / idataxdatapdatacode編碼編碼0 x000 x010 xfe0 xff天津理工大學(xué)聾人工學(xué)院2021-10-262
26、8一般指針定義示例:一般指針定義示例:charchar * *xdata strptrxdata strptr; / /* * 指針本身存于指針本身存于xdata xdata 空間,它指向空間,它指向charchar型數(shù)據(jù)型數(shù)據(jù) * */ /intint * *data numberdata number; / /* * 指針本身存于指針本身存于data data 空間,它指向空間,它指向intint型數(shù)據(jù)型數(shù)據(jù) * */ / 由于指向?qū)ο蟮拇鎯?chǔ)空間在編譯時(shí)無法確定(由于指向?qū)ο蟮拇鎯?chǔ)空間在編譯時(shí)無法確定(運(yùn)行時(shí)確運(yùn)行時(shí)確定定),因此必須生成一般代碼以保證對(duì)任意空間的對(duì)象進(jìn)),因此必須生成一般
27、代碼以保證對(duì)任意空間的對(duì)象進(jìn)行存取。所以行存取。所以一般指針?biāo)a(chǎn)生的代碼速度較慢一般指針?biāo)a(chǎn)生的代碼速度較慢。天津理工大學(xué)聾人工學(xué)院2021-10-26294.4.2 4.4.2 基于存儲(chǔ)器的指針基于存儲(chǔ)器的指針v 定義時(shí)就定義時(shí)就指定指定它所指向的它所指向的對(duì)象的存儲(chǔ)器對(duì)象的存儲(chǔ)器類型類型 v 指針占指針占1 1個(gè)字節(jié)(個(gè)字節(jié)(idata idata * *,data data * *,pdata pdata * *)或)或2 2個(gè)個(gè)字節(jié)(字節(jié)(code code * *,xdata xdata * *) 基于存儲(chǔ)器指針定義示例:基于存儲(chǔ)器指針定義示例:charchar data data
28、* *strstr; / /* * 指針指向的指針指向的charchar型數(shù)據(jù)存于型數(shù)據(jù)存于data data 空間空間 * */ /intint xdata xdata * *numnum; / /* * 指針指向的指針指向的intint型數(shù)據(jù)存于型數(shù)據(jù)存于xdata xdata 空間空間 * */ / 基于存儲(chǔ)器的指針長度比一般指針短,可以節(jié)省存儲(chǔ)基于存儲(chǔ)器的指針長度比一般指針短,可以節(jié)省存儲(chǔ)器空間,器空間,運(yùn)行速度快運(yùn)行速度快,但它所指對(duì)象具有確定的存儲(chǔ)器,但它所指對(duì)象具有確定的存儲(chǔ)器空間,空間,兼容性不好兼容性不好。天津理工大學(xué)聾人工學(xué)院2021-10-26304.5 C51的函數(shù)的函
29、數(shù) 4.5.1 C514.5.1 C51函數(shù)的定義函數(shù)的定義一般形式一般形式: :返回值類型返回值類型 函數(shù)名(形式參數(shù)列表)函數(shù)名(形式參數(shù)列表) 編譯模式編譯模式reentrantinterrupt nusing nreentrantinterrupt nusing n 函數(shù)體函數(shù)體 v 編譯模式為編譯模式為SMALLSMALL、COPACTCOPACT或或LARGELARGEv reentrantreentrant用于定義可重入函數(shù)用于定義可重入函數(shù)v interrupt n interrupt n 用于定義中斷函數(shù)用于定義中斷函數(shù),n,n為中斷號(hào)為中斷號(hào), ,可以為可以為0 03131
30、v using n using n 確定工作寄存器組,取值為確定工作寄存器組,取值為0 03 3 天津理工大學(xué)聾人工學(xué)院2021-10-26314.5.2 C514.5.2 C51函數(shù)的調(diào)用與參數(shù)傳遞函數(shù)的調(diào)用與參數(shù)傳遞 v 主調(diào)函數(shù)要向被調(diào)函數(shù)傳遞所需的參數(shù)主調(diào)函數(shù)要向被調(diào)函數(shù)傳遞所需的參數(shù)v 傳遞給被調(diào)函數(shù)的數(shù)據(jù)稱為實(shí)際參數(shù),即實(shí)參傳遞給被調(diào)函數(shù)的數(shù)據(jù)稱為實(shí)際參數(shù),即實(shí)參v 實(shí)參向形參的傳遞是單向的實(shí)參向形參的傳遞是單向的v 參數(shù)傳遞可以參數(shù)傳遞可以采用寄存器采用寄存器、固定存儲(chǔ)器位置方式、固定存儲(chǔ)器位置方式 v參數(shù)傳遞參數(shù)傳遞v寄存器參數(shù)傳遞寄存器參數(shù)傳遞傳遞的參數(shù)傳遞的參數(shù)char、1
31、字節(jié)指針字節(jié)指針int、2字節(jié)指針字節(jié)指針long、float一般指針一般指針參數(shù)參數(shù)1R7R6、R7R4R7R1、R2、R3參數(shù)參數(shù)2R5R4、R5R4R7R1、R2、R3參數(shù)參數(shù)3R3R2、R3R1、R2、R3天津理工大學(xué)聾人工學(xué)院2021-10-2632vSMALLSMALL模式下,在內(nèi)部模式下,在內(nèi)部RAMRAM中完成中完成 vCOMPACTCOMPACT模式下,在外部模式下,在外部RAMRAM中完成中完成vLARGERLARGER模式下,在外部模式下,在外部RAMRAM中完成中完成v固定存儲(chǔ)器位置參數(shù)傳遞固定存儲(chǔ)器位置參數(shù)傳遞 80C51單片機(jī)不采用堆棧傳遞參數(shù)。但C51提供一種模擬
32、堆棧,從而支持可重入函數(shù)的遞歸調(diào)用。 4.5.3 C514.5.3 C51的庫函數(shù)的庫函數(shù)常用的C51庫函數(shù)參見附錄B.2 天津理工大學(xué)聾人工學(xué)院2021-10-26334.6 C51編程實(shí)例編程實(shí)例 4.6.1 80C514.6.1 80C51內(nèi)部資源的編程內(nèi)部資源的編程 v 中斷服務(wù)函數(shù)示例中斷服務(wù)函數(shù)示例中斷函數(shù)的定義形式中斷函數(shù)的定義形式void void 函數(shù)名(函數(shù)名(voidvoid)interrupt interrupt n n using m using m 函數(shù)體函數(shù)體 中斷源中斷源外中斷外中斷0定時(shí)器定時(shí)器0外中斷外中斷1定時(shí)器定時(shí)器1串行口串行口中斷號(hào)中斷號(hào)01234天
33、津理工大學(xué)聾人工學(xué)院2021-10-2634【例例10-110-1】單片機(jī)應(yīng)用系統(tǒng)中,外中斷單片機(jī)應(yīng)用系統(tǒng)中,外中斷0 0引腳接一個(gè)開關(guān),并引腳接一個(gè)開關(guān),并行口線行口線P1.0P1.0接一個(gè)發(fā)光二級(jí)管。要求:開關(guān)閉合一次,發(fā)光二接一個(gè)發(fā)光二級(jí)管。要求:開關(guān)閉合一次,發(fā)光二極管的狀態(tài)改變一次。試編寫程序極管的狀態(tài)改變一次。試編寫程序 #include “reg51.h”#include “intrins.h” sbit P10=P10; void delay(void)int a = 5000; while(a - - )_nop_( );void int_srv(void)interrupt
34、 0 delay( ); if(INT0 = =0)P10 = ! P10;while(INT0 = =0); void mainvoid main()() P10 = 0 P10 = 0; EA = 1EA = 1; EX0 = 1EX0 = 1;whilewhile(1 1);); 天津理工大學(xué)聾人工學(xué)院2021-10-2635v定時(shí)計(jì)數(shù)器編程示例定時(shí)計(jì)數(shù)器編程示例【例例10-210-2】 利用定時(shí)利用定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器T0T0的方式的方式1 1,產(chǎn)生,產(chǎn)生10ms10ms的定時(shí),的定時(shí),并使并使P1.0P1.0引腳上輸出周期為引腳上輸出周期為20ms20ms的方波,采用中斷方式,設(shè)系
35、的方波,采用中斷方式,設(shè)系統(tǒng)時(shí)鐘頻率為統(tǒng)時(shí)鐘頻率為12 MHz12 MHz。1 1、計(jì)算計(jì)數(shù)初值、計(jì)算計(jì)數(shù)初值X X: N Nt/ Tcy t/ Tcy 101010-3/110-3/110-610-61000010000計(jì)數(shù)器初值應(yīng)為計(jì)數(shù)器初值應(yīng)為-10000-10000。即應(yīng)將。即應(yīng)將 - -(10000/25610000/256)送入)送入TH0TH0中,中,- -(10000%25610000%256)送入)送入TL0TL0中。中。 2 2、求、求T0T0的方式控制字的方式控制字TMODTMOD:M1M0=01M1M0=01,GATE=0GATE=0,C/T=0C/T=0,可取方式控制
36、字為,可取方式控制字為01H01H 3 3、程序清單(見下頁)、程序清單(見下頁) 天津理工大學(xué)聾人工學(xué)院2021-10-2636#include #include “reg51.hreg51.h”sbit P10 = P10sbit P10 = P10;void timer0(void)interrupt void timer0(void)interrupt 1 1 P10 = ! P10 P10 = ! P10; TH0 = -TH0 = -(10000/25610000/256);); TL0 = -TL0 = -(10000%25610000%256);); void mainvoid
37、 main(voidvoid) TMOD = 0 x01TMOD = 0 x01;P10 = 0P10 = 0;TH0 = -TH0 = -(10000/25610000/256););TL0 = -TL0 = -(10000%25610000%256););EA = 1EA = 1;ET0 = 1ET0 = 1;TR0 = 1TR0 = 1;whilewhile(1 1);); 天津理工大學(xué)聾人工學(xué)院2021-10-26374.6.2 80C514.6.2 80C51擴(kuò)展資源的編程擴(kuò)展資源的編程 v 通用并行口編程示例通用并行口編程示例 【例例10-310-3】用用81C5581C55作為微
38、型打印機(jī)與單片機(jī)間的接口電路。作為微型打印機(jī)與單片機(jī)間的接口電路。 天津理工大學(xué)聾人工學(xué)院2021-10-2638#include #include “reg51.hreg51.h”#include #include “absacc.habsacc.h” / /* *含有對(duì)含有對(duì)XBYTEXBYTE等絕對(duì)地址訪問宏的定義等絕對(duì)地址訪問宏的定義* */ /#define uchar unsigned char#define uchar unsigned char#define COMD8155 XBYTE0 x7f00#define COMD8155 XBYTE0 x7f00#define PA
39、8155 XBYTE0 x7f01#define PA8155 XBYTE0 x7f01#define PB8155 XBYTE0 x7f02#define PB8155 XBYTE0 x7f02#define PC8155 XBYTE0 x7f03#define PC8155 XBYTE0 x7f03sbit BUSY = P33sbit BUSY = P33; 天津理工大學(xué)聾人工學(xué)院2021-10-2639uchar code tab17 = 0 xb80 xb8,0 xdf0 xdf,0 xbd0 xbd,0 xcc0 xcc,0 x200 x20, 0 xb30 xb3,0 xf60
40、xf6,0 xb00 xb0,0 xe60 xe6,0 xc90 xc9,0 xe70 xe7,0 x200 x20, 0 x320 x32,0 x300 x30,0 x300 x30,0 x380 x38,0 x0a0 x0a ;/ /* *高教高教 出版社出版社 20082008* */ / uchar t1 = 17;void ptrvoid ptr(uchar duchar d) / /* *打印字符函數(shù)打印字符函數(shù)* */ / PA8155 = d PA8155 = d; PC8155 = 0 x00PC8155 = 0 x00; / /* *產(chǎn)生選通脈沖產(chǎn)生選通脈沖* */ / PC8155 = 0 x01 PC8155 = 0 x01; whilewhile(BUSYBUSY);); 天津理工大學(xué)聾人工學(xué)院2021-10-2640void mai
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 第15課《我們不亂扔》教學(xué)設(shè)計(jì)-2024-2025學(xué)年一年級(jí)道德與法治上冊(cè)統(tǒng)編版
- 展覽館裝修合同
- 2025年度建筑企業(yè)農(nóng)民工勞動(dòng)合同創(chuàng)新模式試點(diǎn)方案
- 2025年度五星級(jí)酒店與VIP客人個(gè)性化服務(wù)協(xié)議
- 2025年度房產(chǎn)贈(zèng)與與可持續(xù)發(fā)展合同
- 2025年度冷鏈物流貨運(yùn)損壞賠償協(xié)議書
- 二零二五年度人工智能教育平臺(tái)合作協(xié)議中的支付及費(fèi)用分?jǐn)偧?xì)則
- 2025年度帶寵物友好房屋出租協(xié)議電子版
- 2025年度廣告代理合同解除通知期限與費(fèi)用結(jié)算規(guī)范
- 2025年度報(bào)廢車買賣及報(bào)廢車輛拆解與環(huán)保設(shè)施投資合同
- 韓國語入門教學(xué)資料
- 《大學(xué)生職業(yè)能力訓(xùn)練》
- 人民警察忠誠品質(zhì)
- 冠狀動(dòng)脈搭橋手術(shù)后的健康生活促進(jìn)
- 《英國飲食文化》課件
- 《SolidWorks建模實(shí)例教程》第4章 綜合應(yīng)用實(shí)例
- JCT2110-2012 室內(nèi)空氣離子濃度測試方法
- 視頻號(hào)運(yùn)營規(guī)則
- 文印服務(wù)投標(biāo)方案(技術(shù)方案)
- 初三語文總復(fù)習(xí)全程計(jì)劃表
- 九年級(jí)初中語文閱讀理解專題訓(xùn)練及答案
評(píng)論
0/150
提交評(píng)論