簡(jiǎn)介:92C51的數(shù)據(jù)類型與運(yùn)算,91單片機(jī)的C語(yǔ)言,93C51流程控制語(yǔ)句,94C51的指針類型,95C51的函數(shù),96C51編程實(shí)例,第9章80C51的C語(yǔ)言程序設(shè)計(jì),本章內(nèi)容,911C51程序開(kāi)發(fā)概述,,一、采用C51的優(yōu)點(diǎn),編譯器自動(dòng)完成變量的存儲(chǔ)分配常用接口芯片編制通用驅(qū)動(dòng)函數(shù)常用功能模塊和算法編制相應(yīng)的函數(shù),方便地進(jìn)行算法和程序的移植。當(dāng)代碼長(zhǎng)度超過(guò)4KB以上時(shí),C51比匯編語(yǔ)言更具有明顯的優(yōu)勢(shì)。,91單片機(jī)的C語(yǔ)言,,,二、C51程序開(kāi)發(fā)過(guò)程,,912C51程序結(jié)構(gòu),,預(yù)處理命令全局變量說(shuō)明;函數(shù)1說(shuō)明;函數(shù)N說(shuō)明;MAIN(){局部變量說(shuō)明;執(zhí)行語(yǔ)句;函數(shù)調(diào)用(實(shí)參表);},函數(shù)1(形式參數(shù)說(shuō)明){局部變量說(shuō)明;執(zhí)行語(yǔ)句;函數(shù)調(diào)用(實(shí)際參數(shù)表);}函數(shù)N(形式參數(shù)說(shuō)明){局部變量說(shuō)明;執(zhí)行語(yǔ)句;函數(shù)調(diào)用(實(shí)際參數(shù)表);},,,,92C51的數(shù)據(jù)類型與運(yùn)算,921C51的數(shù)據(jù)類型,,,,922C51的數(shù)據(jù)的存儲(chǔ)器類型,變量和常量必須以一定的存儲(chǔ)器類型定位于單片機(jī)的存儲(chǔ)區(qū)域中。,經(jīng)常使用的變量應(yīng)置于片內(nèi)RAM中,即用BDATA、DATA、IDATA來(lái)定義;不經(jīng)常使用的變量或規(guī)模較大的變量應(yīng)該置于片外RAM中,即用PDATA、XDATA來(lái)定義。例如,,,,BITBDATAFLAGS;/位變量FLAGS定位在片內(nèi)RAM的位尋址區(qū)/CHARDATAVAR;/字符變量VAR定位在片內(nèi)RAM區(qū)/FLOATIDATAX,Y,Z;/實(shí)型變量X,Y,Z定位在片內(nèi)間址RAM區(qū)/SFRP10X90;/定義P1口地址為90H/,如果用戶不對(duì)變量的存儲(chǔ)器類型進(jìn)行定義,C51編譯器采用默認(rèn)的存儲(chǔ)器類型。由編譯控制命令中的存儲(chǔ)模式指令限制。例如CHARVAR;/在SMALL模式時(shí),VAR定位DATA存儲(chǔ)區(qū)//在COMPACT模式時(shí),VAR定位PDATA存儲(chǔ)區(qū)//在LARGE模式時(shí),VAR定位XDATA存儲(chǔ)區(qū)/,,,92380C51硬件結(jié)構(gòu)的C51定義,,,,一、特殊功能寄存器的定義21個(gè)SFR,為能直接訪問(wèn),C51用擴(kuò)充的關(guān)鍵字SFR和SFR16進(jìn)行定義。方法為SFR特殊功能寄存器名地址常數(shù);,例如SFRSCON0X98;SFRP00X80;SFR16T20XCC;,,,,,二、SFR特定位的定義SBIT定義可獨(dú)立尋址訪問(wèn)的位變量,如定義SFR中的一些特定位。方法為,1、SBIT位變量名SFR名位的位置(07),如SFRPSW0XD0;/定義PSW地址為0XD0/SBITOVPSW2;/定義OV位為PSW2/SBITCYPSW7;/定義CY位為PSW7/,,,,,2、SBIT位變量名字節(jié)地址位的位置(07),如SBITOV0XD02;/定義OV位地址為0XD2/SBITCY0XD07;/定義CY位地址為0XD7/注字節(jié)地址作基地址,必須在0X800XFF之間。,3、SBIT位變量名位地址,如SBITOV0XD2;/定義OV位地址為0XD2/SBITCY0XD7;/定義CY位地址為0XD7/注位地址必須位于0X800XFF之間。,三、內(nèi)部RAM中可位尋址對(duì)象的定義RAM的20H2FH單元可用BDATA存儲(chǔ)器類型訪問(wèn),帶有BDATA類型的變量可以進(jìn)行字或字節(jié)尋址,用SBIT指定BDATA變量的相應(yīng)位后就可以進(jìn)行位尋址。,,,,例如,先定義變量數(shù)據(jù)類型和存儲(chǔ)類型為INTBDATAIBASE;/定義整形變量IBASE/CHARBDATAARRAY4;/定義字符數(shù)組ARRAY4/,定義可獨(dú)立尋址訪問(wèn)的位SBITMYBIT0IBASE0;SBITMYBIT15IBASE15;SBITARY07ARRAY07;SBITARY37ARRAY37;,,,,訪問(wèn)示例IBASE1;/字尋址/ARRAY2‘A’;/字節(jié)尋址/ARY070;/位尋址/用BIT定義普通位變量時(shí)C51編譯器會(huì)自行安排該位變量于可位尋址的BDATA區(qū)。例如,BITMYBIT。應(yīng)注意的是,不能定義BIT類型指針,也不能定義BIT類型數(shù)組。,,,,,,,一、算術(shù)運(yùn)算符和算術(shù)表達(dá)式1、基本算術(shù)運(yùn)算符加法運(yùn)算符;減法(取負(fù))運(yùn)算符;乘法運(yùn)算符;/除法運(yùn)算符;取余(模)運(yùn)算符。,924C51的運(yùn)算符和表達(dá)式,,,加、減和乘法符合一般的算術(shù)運(yùn)算規(guī)則。除法時(shí),若是兩個(gè)整數(shù)相除,其結(jié)果為整數(shù),舍去小數(shù)部分;如果是兩個(gè)浮點(diǎn)數(shù)相除,其結(jié)果為浮點(diǎn)數(shù)。取余運(yùn)算,則要求運(yùn)算對(duì)象為整形。,求值要依運(yùn)算符的優(yōu)先級(jí)進(jìn)行。算術(shù)運(yùn)算符中取負(fù)運(yùn)算優(yōu)先級(jí)最高,其次為乘法、除法和取余。加法和減法優(yōu)先級(jí)最低??筛鶕?jù)需要采用括號(hào)來(lái)改變運(yùn)算符的優(yōu)先級(jí)。,2、自增、自減運(yùn)算符自增運(yùn)算符;自減運(yùn)算符。,,,和運(yùn)算符只能用于變量,不能用于常量和表達(dá)式。如,J表示先加1,再取值;J表示先取值,再加1。自減運(yùn)算類同。,3、類型轉(zhuǎn)換運(yùn)算符兩側(cè)的數(shù)據(jù)類型不同時(shí),要轉(zhuǎn)換成同種類型。方式有兩種,,,,,一是自動(dòng)轉(zhuǎn)換,是指編譯器在編譯時(shí)自動(dòng)進(jìn)行的類型轉(zhuǎn)換。順序?yàn)锽IT→CHAR→INT→LONG→FLOAT,SIGNED→UNSIGNED。二是強(qiáng)制類型轉(zhuǎn)換,如(DOUBLE)A,將A強(qiáng)制轉(zhuǎn)換為DOUBLE類型。,,,二、關(guān)系運(yùn)算符和關(guān)系表達(dá)式,1、關(guān)系運(yùn)算符大于;大于等于;,,等于;不等于。,,高優(yōu)先級(jí),低優(yōu)先級(jí),,,關(guān)系運(yùn)算優(yōu)先級(jí)低于算術(shù)運(yùn)算,高于賦值運(yùn)算。,2、關(guān)系表達(dá)式關(guān)系表達(dá)式的值為邏輯值真和假。C51中用0表示假,用1表示真。,三、邏輯運(yùn)算符和邏輯表達(dá)式,,,1、邏輯運(yùn)算符VOIDDELAY(VOID){INTA5000;WHILE(A)_NOP_;},VOIDMAIN(){P100;EA1;EX01;WHILE(1);},VOIDDELAY(VOID){INTA5000;WHILE(A)_NOP_;}VOIDINT_SRV(VOID)INTERRUPT0{DELAY;IF(INT00){P10P10;WHILE(INT00);}},二、定時(shí)計(jì)數(shù)器編程示例例用T0方式1,產(chǎn)生10MS的定時(shí),使P10引腳上輸出周期為20MS方波,采用中斷方式,設(shè)系統(tǒng)時(shí)鐘頻率為12MHZ。,解1、計(jì)算計(jì)數(shù)初值N=T/TCY=10103/1103=10000將(10000/256)送入TH0中,(100006)送入TL0。2、T0方式控制字M1M001,GATE0,C/T0,可取方式控制字為01H;3、程序清單如下,INCLUDE“REG51H”SBITP10P10;VOIDTIMER0(VOID)INTERRUPT1{P10P10;TH0(10000/256);TL0(100006);},VOIDMAIN(VOID){TMOD0X01;P100;TH0(10000/256);TL0(100006);EA1;ET01;TR01;WHILE(1);},96280C51擴(kuò)展資源的編程,例微型打印機(jī)接口電路如圖,一、通用并行口編程示例,,實(shí)現(xiàn)程序?yàn)镮NCLUDE“REG51H”INCLUDE“ABSACCH”DEFINEUCHARUNSIGNEDCHARDEFINECOMD8155XBYTE0X7F00DEFINEPA8155XBYTE0X7F01DEFINEPB8155XBYTE0X7F02DEFINEPC8155XBYTE0X7F03,SBITBUSYP33;UCHARCODETAB17{0XC7,0XE5,0XBB,0XAA,0X20,0XB3,0XF6,0XB0,0XE6,0XC9,0XE7,0X20,0X32,0X30,0X30,0X35,0X0A};/清華出版社2005/UCHART117;VOIDPTR(UCHARD)/打印字符函數(shù)/{PA8155D;PC81550X00;/產(chǎn)生選通脈沖/PC81550X01;WHILE(BUSY);},VOIDMAIN(VOID){COMD81550X0F;/送命令字/PRT(0X1C);/送中文打印方式命令字高字節(jié)/PRT(0X26);/送中文打印方式命令字低字節(jié)/EA1;EX11;WHILE(1);}VOIDINT1(VOID)INTERRUPT2USING1{UCHARI;EA0;FOR(I0;IT1;I)PRT(TABI);EA1;EX10;},二、A/D轉(zhuǎn)換接口編程示例,例ADC0809與單片機(jī)的接口電路如圖,,查詢方式采集數(shù)據(jù)的應(yīng)用程序?yàn)镮NCLUDE“REG51H”INCLUDE“ABSACCH”DEFINEUCHARUNSIGNEDCHARDEFINEIN0XBYTE0X7FF8SBITAD_BUSYP33;,VOIDMAIN(VOID){STATICUCHARIDATAAD10;AD0809(AD);},VOIDAD0809(UCHARIDATAX){UCHARI;UCHARXDATAAD_ADR;AD_ADRIN0;FOR(I0;I8;I){AD_ADR0;/啟動(dòng)轉(zhuǎn)換/II;/延時(shí)等待/II;WHILE(AD_BUSY0);XIAD_ADR;/存轉(zhuǎn)換結(jié)果/AD_ADR;/下一通道/}},,,,,,,,思考題及習(xí)題,1、C51應(yīng)用程序具有怎樣的結(jié)構(gòu)2、C51支持的數(shù)據(jù)類型有哪些3、C51支持的存儲(chǔ)器類型有哪些與單片機(jī)存儲(chǔ)器有何對(duì)應(yīng)關(guān)系4、C51有哪幾種編譯模式每種編譯模式的特點(diǎn)如何5、中斷函數(shù)是如何定義的各種選項(xiàng)的意義如何6、C51應(yīng)用程序的參數(shù)傳遞有哪些方式特點(diǎn)如何7、一般指針與基于存儲(chǔ)器的指針有何區(qū)別8、關(guān)鍵字BIT與SBIT的意義有何不同9、匯編程序與C51程序在應(yīng)用系統(tǒng)開(kāi)發(fā)上有何特點(diǎn),
下載積分: 4 賞幣
上傳時(shí)間:2024-01-06
頁(yè)數(shù): 58
大?。?0.76(MB)
子文件數(shù):