單片機語言基礎(chǔ)演示_第1頁
單片機語言基礎(chǔ)演示_第2頁
單片機語言基礎(chǔ)演示_第3頁
單片機語言基礎(chǔ)演示_第4頁
單片機語言基礎(chǔ)演示_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

(優(yōu)選)單片機語言基礎(chǔ)本文檔共44頁;當(dāng)前第1頁;編輯于星期一\13點35分C語言作為一種非常方便的語言而得到廣泛的支持,很多硬件開發(fā)都用C語言編程,如:各種單片機、DSP、ARM等.C語言程序本身不依賴于機器硬件系統(tǒng),基本上不作修改就可將程序從不同的單片機中移植過來。C提供了很多數(shù)學(xué)函數(shù)并支持浮點運算,開發(fā)效率高,故可縮短開發(fā)時間,增加程序可讀性和可維護性。

C-51的特點本文檔共44頁;當(dāng)前第2頁;編輯于星期一\13點35分C-51與ASM-51相比,有如下優(yōu)點:1.

對單片機的指令系統(tǒng)不要求了解,僅要求對8051的存貯器結(jié)構(gòu)有初步了解;2.

寄存器分配、不同存貯器的尋址及數(shù)據(jù)類型等細(xì)節(jié)可由編譯器管理;3.

程序有規(guī)范的結(jié)構(gòu),可分成不同的函數(shù),這種方式可使程序結(jié)構(gòu)化;4.

提供的庫包含許多標(biāo)準(zhǔn)子程序,具有較強的數(shù)據(jù)處理能力;5.

由于具有方便的模塊化編程技術(shù),使已編好程序可容易地移植;本文檔共44頁;當(dāng)前第3頁;編輯于星期一\13點35分例子認(rèn)識C程序#include<REG51.h>

sbitA5=P1^0x04;intmain(void){//用戶代碼voiddelay_1s();return0;}voiddelay_1s(){//代碼}一、主程序(程序入口)intmain(void){//用戶代碼return0;}注:1、C程序模塊都是以“{”開頭“}”結(jié)尾,程序為函數(shù)[主函數(shù)、子函數(shù)]2、每一行必須有結(jié)束號“;”3、養(yǎng)成注釋程序的習(xí)慣

“//”注釋該行

“/*---段落---*/”注解一段二、頭文件(編程預(yù)處理)#include<REG51.h>注:定義一些通用引腳及函數(shù)

三、自定義函數(shù)(子函數(shù))常用、重復(fù)引用的功能集成可用任何文本編輯軟件編寫,最后保存擴展名為.C的程序源文件本文檔共44頁;當(dāng)前第4頁;編輯于星期一\13點35分其值可以改變的量稱為變量。

一個變量應(yīng)該有一個名字,在內(nèi)存中占據(jù)一定的存儲單元。變量應(yīng)該先定義后使用。要區(qū)分變量名和變量值是兩個不同的概念。a=3變量3存儲值存儲單元地址[a]

注:變量名a代表地址,編譯系統(tǒng)自動分配,用戶不可見0x40本文檔共44頁;當(dāng)前第5頁;編輯于星期一\13點35分一、C-51的變量類型1、基本數(shù)據(jù)類型類型符號關(guān)鍵字?jǐn)?shù)的表示范圍所占位數(shù)整型字符型實型有無(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsignedint0~65535320~4294967295unsignedlongintunsignedshortint160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無unsignedchar80~255本文檔共44頁;當(dāng)前第6頁;編輯于星期一\13點35分2、變量類型的定義格式:變量類型+變量名例如:

inta,b;//定義a,b為整型變更longsheng1,sheng2;//長整型Floatc,d;//浮點(有小數(shù))Doublee,f;//雙精度chara;//有符號字符型Unsignedcharb;無符號字符型

注:變量類型為規(guī)定的類型;變量的名稱自由起,但通常要通俗,并要遵守如下規(guī)則c語言變量命名:數(shù)字、字母、下劃線,都可以為變量命名。做為變量名的開頭不能為數(shù)字,如3a_是錯的,而a_3或_a3是正確變量名不能為關(guān)鍵字,像if'else'printf等等都不能本文檔共44頁;當(dāng)前第7頁;編輯于星期一\13點35分標(biāo)準(zhǔn)C表1本文檔共44頁;當(dāng)前第8頁;編輯于星期一\13點35分標(biāo)準(zhǔn)C表2本文檔共44頁;當(dāng)前第9頁;編輯于星期一\13點35分C51擴展本文檔共44頁;當(dāng)前第10頁;編輯于星期一\13點35分3、C-51的數(shù)據(jù)類型擴充定義sfr:特殊功能寄存器聲明sfr16:sfr的16位數(shù)據(jù)聲明sbit:特殊功能位聲明bit:位變量聲明本文檔共44頁;當(dāng)前第11頁;編輯于星期一\13點35分1.sfr特殊功能寄存器。這也是C51編譯器的一種擴充數(shù)據(jù)類型,利用它可以訪問8051單片機的所有內(nèi)部特殊功能寄存器。sfr型數(shù)據(jù)占用一個內(nèi)存單元,其取值范圍0~255。2.sfr1616位特殊功能寄存器。它占用兩個內(nèi)存單元,取值范圍是0~65535。3.sbit可尋址位。這也是C51編譯器的一種擴充數(shù)據(jù)類型,利用它可以訪8051單片機內(nèi)部RAM中的可尋址位或特殊功能寄存器中的可尋址位。4.bit位標(biāo)量。這是C51編譯器的一種擴充數(shù)據(jù)類型,利用它可定義一個位標(biāo)量,但不能定義位指針,也不能定義位數(shù)組。

本文檔共44頁;當(dāng)前第12頁;編輯于星期一\13點35分例:sfrSCON=0X98;sfr16T2=0xCC;sbitOV=PSW^2本文檔共44頁;當(dāng)前第13頁;編輯于星期一\13點35分4、數(shù)據(jù)類型修飾詞1)、data:固定指前面0x00-0x7f的128個RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小2)、code定義的數(shù)據(jù)要放在ROM(程序存儲區(qū))里面,寫入后就不能再更改,對應(yīng)的還有data是存入RAM的意思。例如:chardataa;//a變量存在上述RAM中intdatadisp;//disp變量存在上述RAM中例如:ucharcodeyima[]=//把數(shù)碼管位數(shù)據(jù)(因為不變)寫入ROM{0xeb,0x88,0xb3,0xba,0xd8,0x7a,0x7b,0xa8,0xfb,0xfa};本文檔共44頁;當(dāng)前第14頁;編輯于星期一\13點35分4、數(shù)據(jù)類型修飾詞3)、本文檔共44頁;當(dāng)前第15頁;編輯于星期一\13點35分4、數(shù)據(jù)類型修飾詞4)、本文檔共44頁;當(dāng)前第16頁;編輯于星期一\13點35分5、變量的賦值inta,b;//定義a,b為整型變量

longsheng1,sheng2;//長整型

floatc,d;//浮點(有小數(shù))

doublee,f;//雙精度

charg;//有符號字符型

Unsignedcharh;無符號字符型定義賦值a=12;a=0xff;a=0x00;b=0;b=08;b=03;C=0.214;c=-0.36;d=12e3;e=12e-12;g=10;G=‘A’;h=200;注:‘A’為字符常量,為該字符的ASCII代碼本文檔共44頁;當(dāng)前第17頁;編輯于星期一\13點35分附本文檔共44頁;當(dāng)前第18頁;編輯于星期一\13點35分C-51的包含的頭文件通常有:reg51.hreg52.hmath.hctype.hstdio.hstdlib.habsacc.h常用有:reg51.hreg52.h

(定義特殊功能寄存器和位寄存器);

math.h

(定義常用數(shù)學(xué)運算);

本文檔共44頁;當(dāng)前第19頁;編輯于星期一\13點35分二、C-51的運算符1、算術(shù)運算符+-*/%(加減乘除求余)說明:本文檔共44頁;當(dāng)前第20頁;編輯于星期一\13點35分++:自加運算符--自減運算符本文檔共44頁;當(dāng)前第21頁;編輯于星期一\13點35分2.邏輯運算將兩個布爾量進行運算,結(jié)果為只有0或1的布爾量本文檔共44頁;當(dāng)前第22頁;編輯于星期一\13點35分3.關(guān)系運算運算結(jié)果只有0或1的布爾量本文檔共44頁;當(dāng)前第23頁;編輯于星期一\13點35分4.位運算位操作,結(jié)果還是一個數(shù),注意與邏輯運算的區(qū)別1)本文檔共44頁;當(dāng)前第24頁;編輯于星期一\13點35分2).3).4)、本文檔共44頁;當(dāng)前第25頁;編輯于星期一\13點35分5)、本文檔共44頁;當(dāng)前第26頁;編輯于星期一\13點35分本文檔共44頁;當(dāng)前第27頁;編輯于星期一\13點35分

二、C-51流程控制

與標(biāo)準(zhǔn)C語言基本相同:

if選擇語言switch/case多分支選擇語言

while循環(huán)語言

for循環(huán)語言

do-while循環(huán)語言本文檔共44頁;當(dāng)前第28頁;編輯于星期一\13點35分1、if條件選擇語句1)、單分支語句inta,b,max;max=a;if(max<b)max=b;本文檔共44頁;當(dāng)前第29頁;編輯于星期一\13點35分2)、雙分支語句main(){inta,b,max;if(a>b)max=a;elsemax=b;}本文檔共44頁;當(dāng)前第30頁;編輯于星期一\13點35分3)、多分支語句依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個值為真時,則執(zhí)行其對應(yīng)的語句。然后跳到整個if語句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語句n+1。然后繼續(xù)執(zhí)行后續(xù)程序。本文檔共44頁;當(dāng)前第31頁;編輯于星期一\13點35分inta=10;If(a>0&&a<2)printf(“a是一0到2之間的數(shù)”);elseif(a>=2&&a<5)printf(“a是一2到5之間的數(shù)”);elseif(a>-5&&a<8)printf(“a是一5到8之間的數(shù)”);elseif(a>=8&&a<10)printf(“a是一8到10之間的數(shù)”);elseprintf(“a是一個沒知道的數(shù)”);

本文檔共44頁;當(dāng)前第32頁;編輯于星期一\13點35分2、switch語句

switch(表達(dá)式){case常量表達(dá)式1:語句1;case常量表達(dá)式2:語句2;…case常量表達(dá)式n:語句n;default:語句n+1;}格式計算表達(dá)式的值。并逐個與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個常量表達(dá)式的值相等時,即執(zhí)行其后的語句,然后不再進行判斷,繼續(xù)執(zhí)行后面所有case后的語句。如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時,則執(zhí)行default后的語句。在使用switch語句時還應(yīng)注意以下幾點:在case后的各常量表達(dá)式的值不能相同,否則會出現(xiàn)錯誤。在case后,允許有多個語句,可以不用{}括起來。各case和default子句的先后順序可以變動,而不會影響程序執(zhí)行結(jié)果。default子句可以省略不用。本文檔共44頁;當(dāng)前第33頁;編輯于星期一\13點35分main(){floata,b;charc;printf("inputexpression:a+(-,*,/)b\n");scanf("%f%c%f",&a,&c,&b);switch(c){case'+':printf("%f\n",a+b);break;case'-':printf("%f\n",a-b);break;case'*':printf("%f\n",a*b);break;case'/':printf("%f\n",a/b);break;default:printf("inputerror\n");}}例子在使用switch語句時還應(yīng)注意以下幾點:(1)在case后的各常量表達(dá)式的值不能相同,否則會出現(xiàn)錯誤。(2)在case后,允許有多個語句,可以不用{}括起來。(3)各case和default子句的先后順序可以變動,而不會影響程序執(zhí)行結(jié)果。(4)default子句可以省略不用。本文檔共44頁;當(dāng)前第34頁;編輯于星期一\13點35分3、while語句

格式while(表達(dá)式)

{

語句

}while語句的語義是:計算表達(dá)式的值,當(dāng)值為真(非0)時,執(zhí)行循環(huán)體語句作用:循環(huán)執(zhí)行一段代碼本文檔共44頁;當(dāng)前第35頁;編輯于星期一\13點35分例子:

While(1){

P0=0xff;delay1s();P0=0x00;delay1s();}While(1){delay1s();P0=~P0;}inti=100;While(i>0){delay1s();P0=~P0;i--;}main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d\n",sum);}本文檔共44頁;當(dāng)前第36頁;編輯于星期一\13點35分4、for語句格式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)

{

語句

}作用:循環(huán)執(zhí)行一段代碼它的執(zhí)行過程如下:1)先求解表達(dá)式1。2)求解表達(dá)式2,若其值為真(非0),則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面第3)步;若其值為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第5)步。3)求解表達(dá)式3。4)轉(zhuǎn)回上面第2)步繼續(xù)執(zhí)行。5)循環(huán)結(jié)束,執(zhí)行for語句下面的一個語句本文檔共44頁;當(dāng)前第37頁;編輯于星期一\13點35分Sum=0;for(i=1;i<=100;i++)

sum=sum+i;例子:inti;for(i=100;i>0;i--){//空語句,想想這段代碼有什么用}本文檔共44頁;當(dāng)前第38頁;編輯于星期一\13點35分附:for循環(huán)的嵌套main(){inti,j,k;for(i=0;i<2;i++)for(j=0;j<2;j++)for(k=0;k<2;k++)printf(“%d%d%d\n",i,j,k);}本文檔共44頁;當(dāng)前第39頁;編輯于星期一\13點35分5、do-while語句形式為:

do{語句}while(表達(dá)式)作用:循環(huán)執(zhí)行一段代碼這個循環(huán)與while循環(huán)的不同在于:它先執(zhí)行循環(huán)中的語句,

溫馨提示

  • 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

提交評論