版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
(優(yōu)選)單片機(jī)語(yǔ)言基礎(chǔ)當(dāng)前第1頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)C語(yǔ)言作為一種非常方便的語(yǔ)言而得到廣泛的支持,很多硬件開(kāi)發(fā)都用C語(yǔ)言編程,如:各種單片機(jī)、DSP、ARM等.C語(yǔ)言程序本身不依賴于機(jī)器硬件系統(tǒng),基本上不作修改就可將程序從不同的單片機(jī)中移植過(guò)來(lái)。C提供了很多數(shù)學(xué)函數(shù)并支持浮點(diǎn)運(yùn)算,開(kāi)發(fā)效率高,故可縮短開(kāi)發(fā)時(shí)間,增加程序可讀性和可維護(hù)性。
C-51的特點(diǎn)當(dāng)前第2頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)C-51與ASM-51相比,有如下優(yōu)點(diǎn):1.
對(duì)單片機(jī)的指令系統(tǒng)不要求了解,僅要求對(duì)8051的存貯器結(jié)構(gòu)有初步了解;2.
寄存器分配、不同存貯器的尋址及數(shù)據(jù)類型等細(xì)節(jié)可由編譯器管理;3.
程序有規(guī)范的結(jié)構(gòu),可分成不同的函數(shù),這種方式可使程序結(jié)構(gòu)化;4.
提供的庫(kù)包含許多標(biāo)準(zhǔn)子程序,具有較強(qiáng)的數(shù)據(jù)處理能力;5.
由于具有方便的模塊化編程技術(shù),使已編好程序可容易地移植;當(dāng)前第3頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)例子認(rèn)識(shí)C程序#include<REG51.h>
sbitA5=P1^0x04;intmain(void){//用戶代碼voiddelay_1s();return0;}voiddelay_1s(){//代碼}一、主程序(程序入口)intmain(void){//用戶代碼return0;}注:1、C程序模塊都是以“{”開(kāi)頭“}”結(jié)尾,程序?yàn)楹瘮?shù)[主函數(shù)、子函數(shù)]2、每一行必須有結(jié)束號(hào)“;”3、養(yǎng)成注釋程序的習(xí)慣
“//”注釋該行
“/*---段落---*/”注解一段二、頭文件(編程預(yù)處理)#include<REG51.h>注:定義一些通用引腳及函數(shù)
三、自定義函數(shù)(子函數(shù))常用、重復(fù)引用的功能集成可用任何文本編輯軟件編寫,最后保存擴(kuò)展名為.C的程序源文件當(dāng)前第4頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)其值可以改變的量稱為變量。
一個(gè)變量應(yīng)該有一個(gè)名字,在內(nèi)存中占據(jù)一定的存儲(chǔ)單元。變量應(yīng)該先定義后使用。要區(qū)分變量名和變量值是兩個(gè)不同的概念。a=3變量3存儲(chǔ)值存儲(chǔ)單元地址[a]
注:變量名a代表地址,編譯系統(tǒng)自動(dòng)分配,用戶不可見(jiàn)0x40當(dāng)前第5頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)一、C-51的變量類型1、基本數(shù)據(jù)類型類型符號(hào)關(guān)鍵字?jǐn)?shù)的表示范圍所占位數(shù)整型字符型實(shí)型有無(wú)(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無(wú)unsignedchar80~255當(dāng)前第6頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)2、變量類型的定義格式:變量類型+變量名例如:
inta,b;//定義a,b為整型變更longsheng1,sheng2;//長(zhǎng)整型Floatc,d;//浮點(diǎn)(有小數(shù))Doublee,f;//雙精度chara;//有符號(hào)字符型Unsignedcharb;無(wú)符號(hào)字符型
注:變量類型為規(guī)定的類型;變量的名稱自由起,但通常要通俗,并要遵守如下規(guī)則c語(yǔ)言變量命名:數(shù)字、字母、下劃線,都可以為變量命名。做為變量名的開(kāi)頭不能為數(shù)字,如3a_是錯(cuò)的,而a_3或_a3是正確變量名不能為關(guān)鍵字,像if'else'printf等等都不能當(dāng)前第7頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)標(biāo)準(zhǔn)C表1當(dāng)前第8頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)標(biāo)準(zhǔn)C表2當(dāng)前第9頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)C51擴(kuò)展當(dāng)前第10頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)3、C-51的數(shù)據(jù)類型擴(kuò)充定義sfr:特殊功能寄存器聲明sfr16:sfr的16位數(shù)據(jù)聲明sbit:特殊功能位聲明bit:位變量聲明當(dāng)前第11頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)1.sfr特殊功能寄存器。這也是C51編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可以訪問(wèn)8051單片機(jī)的所有內(nèi)部特殊功能寄存器。sfr型數(shù)據(jù)占用一個(gè)內(nèi)存單元,其取值范圍0~255。2.sfr1616位特殊功能寄存器。它占用兩個(gè)內(nèi)存單元,取值范圍是0~65535。3.sbit可尋址位。這也是C51編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可以訪8051單片機(jī)內(nèi)部RAM中的可尋址位或特殊功能寄存器中的可尋址位。4.bit位標(biāo)量。這是C51編譯器的一種擴(kuò)充數(shù)據(jù)類型,利用它可定義一個(gè)位標(biāo)量,但不能定義位指針,也不能定義位數(shù)組。
當(dāng)前第12頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)例:sfrSCON=0X98;sfr16T2=0xCC;sbitOV=PSW^2當(dāng)前第13頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)4、數(shù)據(jù)類型修飾詞1)、data:固定指前面0x00-0x7f的128個(gè)RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小2)、code定義的數(shù)據(jù)要放在ROM(程序存儲(chǔ)區(qū))里面,寫入后就不能再更改,對(duì)應(yīng)的還有data是存入RAM的意思。例如:chardataa;//a變量存在上述RAM中intdatadisp;//disp變量存在上述RAM中例如:ucharcodeyima[]=//把數(shù)碼管位數(shù)據(jù)(因?yàn)椴蛔儯懭隦OM{0xeb,0x88,0xb3,0xba,0xd8,0x7a,0x7b,0xa8,0xfb,0xfa};當(dāng)前第14頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)4、數(shù)據(jù)類型修飾詞3)、當(dāng)前第15頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)4、數(shù)據(jù)類型修飾詞4)、當(dāng)前第16頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)5、變量的賦值inta,b;//定義a,b為整型變量
longsheng1,sheng2;//長(zhǎng)整型
floatc,d;//浮點(diǎn)(有小數(shù))
doublee,f;//雙精度
charg;//有符號(hào)字符型
Unsignedcharh;無(wú)符號(hào)字符型定義賦值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代碼當(dāng)前第17頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)附當(dāng)前第18頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)C-51的包含的頭文件通常有:reg51.hreg52.hmath.hctype.hstdio.hstdlib.habsacc.h常用有:reg51.hreg52.h
(定義特殊功能寄存器和位寄存器);
math.h
(定義常用數(shù)學(xué)運(yùn)算);
當(dāng)前第19頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)二、C-51的運(yùn)算符1、算術(shù)運(yùn)算符+-*/%(加減乘除求余)說(shuō)明:當(dāng)前第20頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)++:自加運(yùn)算符--自減運(yùn)算符當(dāng)前第21頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)2.邏輯運(yùn)算將兩個(gè)布爾量進(jìn)行運(yùn)算,結(jié)果為只有0或1的布爾量當(dāng)前第22頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)3.關(guān)系運(yùn)算運(yùn)算結(jié)果只有0或1的布爾量當(dāng)前第23頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)4.位運(yùn)算位操作,結(jié)果還是一個(gè)數(shù),注意與邏輯運(yùn)算的區(qū)別1)當(dāng)前第24頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)2).3).4)、當(dāng)前第25頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)5)、當(dāng)前第26頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)當(dāng)前第27頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)
二、C-51流程控制
與標(biāo)準(zhǔn)C語(yǔ)言基本相同:
if選擇語(yǔ)言switch/case多分支選擇語(yǔ)言
while循環(huán)語(yǔ)言
for循環(huán)語(yǔ)言
do-while循環(huán)語(yǔ)言當(dāng)前第28頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)1、if條件選擇語(yǔ)句1)、單分支語(yǔ)句inta,b,max;max=a;if(max<b)max=b;當(dāng)前第29頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)2)、雙分支語(yǔ)句main(){inta,b,max;if(a>b)max=a;elsemax=b;}當(dāng)前第30頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)3)、多分支語(yǔ)句依次判斷表達(dá)式的值,當(dāng)出現(xiàn)某個(gè)值為真時(shí),則執(zhí)行其對(duì)應(yīng)的語(yǔ)句。然后跳到整個(gè)if語(yǔ)句之外繼續(xù)執(zhí)行程序。如果所有的表達(dá)式均為假,則執(zhí)行語(yǔ)句n+1。然后繼續(xù)執(zhí)行后續(xù)程序。當(dāng)前第31頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)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是一個(gè)沒(méi)知道的數(shù)”);
當(dāng)前第32頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)2、switch語(yǔ)句
switch(表達(dá)式){case常量表達(dá)式1:語(yǔ)句1;case常量表達(dá)式2:語(yǔ)句2;…case常量表達(dá)式n:語(yǔ)句n;default:語(yǔ)句n+1;}格式計(jì)算表達(dá)式的值。并逐個(gè)與其后的常量表達(dá)式值相比較,當(dāng)表達(dá)式的值與某個(gè)常量表達(dá)式的值相等時(shí),即執(zhí)行其后的語(yǔ)句,然后不再進(jìn)行判斷,繼續(xù)執(zhí)行后面所有case后的語(yǔ)句。如表達(dá)式的值與所有case后的常量表達(dá)式均不相同時(shí),則執(zhí)行default后的語(yǔ)句。在使用switch語(yǔ)句時(shí)還應(yīng)注意以下幾點(diǎn):在case后的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤。在case后,允許有多個(gè)語(yǔ)句,可以不用{}括起來(lái)。各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。default子句可以省略不用。當(dāng)前第33頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)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ǔ)句時(shí)還應(yīng)注意以下幾點(diǎn):(1)在case后的各常量表達(dá)式的值不能相同,否則會(huì)出現(xiàn)錯(cuò)誤。(2)在case后,允許有多個(gè)語(yǔ)句,可以不用{}括起來(lái)。(3)各case和default子句的先后順序可以變動(dòng),而不會(huì)影響程序執(zhí)行結(jié)果。(4)default子句可以省略不用。當(dāng)前第34頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)3、while語(yǔ)句
格式while(表達(dá)式)
{
語(yǔ)句
}while語(yǔ)句的語(yǔ)義是:計(jì)算表達(dá)式的值,當(dāng)值為真(非0)時(shí),執(zhí)行循環(huán)體語(yǔ)句作用:循環(huán)執(zhí)行一段代碼當(dāng)前第35頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)例子:
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);}當(dāng)前第36頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)4、for語(yǔ)句格式for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{
語(yǔ)句
}作用:循環(huán)執(zhí)行一段代碼它的執(zhí)行過(guò)程如下:1)先求解表達(dá)式1。2)求解表達(dá)式2,若其值為真(非0),則執(zhí)行for語(yǔ)句中指定的內(nèi)嵌語(yǔ)句,然后執(zhí)行下面第3)步;若其值為假(0),則結(jié)束循環(huán),轉(zhuǎn)到第5)步。3)求解表達(dá)式3。4)轉(zhuǎn)回上面第2)步繼續(xù)執(zhí)行。5)循環(huán)結(jié)束,執(zhí)行for語(yǔ)句下面的一個(gè)語(yǔ)句當(dāng)前第37頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)Sum=0;for(i=1;i<=100;i++)
sum=sum+i;例子:inti;for(i=100;i>0;i--){//空語(yǔ)句,想想這段代碼有什么用}當(dāng)前第38頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)附: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);}當(dāng)前第39頁(yè)\共有44頁(yè)\編于星期六\2點(diǎn)5、do-while語(yǔ)句形式為:
do{語(yǔ)句}while(表達(dá)式)作用:循環(huán)執(zhí)行一段代碼這個(gè)循環(huán)與while循環(huán)的不同在于:它先執(zhí)行循環(huán)中的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 海報(bào)設(shè)計(jì)合同模板
- 家庭雇傭保姆合同樣式參考
- 2024獨(dú)家原創(chuàng)企業(yè)績(jī)效合同簽定儀式領(lǐng)導(dǎo)講話稿
- 2024租賃辦公室合同范本
- 個(gè)人教育助學(xué)貸款
- 購(gòu)房借款協(xié)議2024年
- 籃球訓(xùn)練合作協(xié)議范本
- 房產(chǎn)代理合同租賃
- 個(gè)人消費(fèi)借款合同范本
- 提升機(jī)租賃合同樣本格式
- GB/T 18168-2008水上游樂(lè)設(shè)施通用技術(shù)條件
- 哈工大《光電測(cè)量技術(shù)》ppt
- 醫(yī)療技術(shù)臨床應(yīng)用管理辦法培訓(xùn)課件
- 有效作業(yè)課件
- 水泥生產(chǎn)工藝流程及過(guò)程控制培訓(xùn)課件
- 外科護(hù)理學(xué)試題+答案
- 《幼兒園家園共育研究開(kāi)題報(bào)告(含提綱)》
- 《中醫(yī)推拿按摩》課件
- 國(guó)家5A景區(qū)創(chuàng)建簡(jiǎn)介課件
- 樣板間裝修方案
- 事業(yè)單位人事管理?xiàng)l例完整版x課件
評(píng)論
0/150
提交評(píng)論