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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

C-51的特點當前第2頁\共有44頁\編于星期六\2點C-51與ASM-51相比,有如下優點:1.

對單片機的指令系統不要求了解,僅要求對8051的存貯器結構有初步了解;2.

寄存器分配、不同存貯器的尋址及數據類型等細節可由編譯器管理;3.

程序有規范的結構,可分成不同的函數,這種方式可使程序結構化;4.

提供的庫包含許多標準子程序,具有較強的數據處理能力;5.

由于具有方便的模塊化編程技術,使已編好程序可容易地移植;當前第3頁\共有44頁\編于星期六\2點例子認識C程序#include<REG51.h>

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

“//”注釋該行

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

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

一個變量應該有一個名字,在內存中占據一定的存儲單元。變量應該先定義后使用。要區分變量名和變量值是兩個不同的概念。a=3變量3存儲值存儲單元地址[a]

注:變量名a代表地址,編譯系統自動分配,用戶不可見0x40當前第5頁\共有44頁\編于星期六\2點一、C-51的變量類型1、基本數據類型類型符號關鍵字數的表示范圍所占位數整型字符型實型有無(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當前第6頁\共有44頁\編于星期六\2點2、變量類型的定義格式:變量類型+變量名例如:

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

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

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

longsheng1,sheng2;//長整型

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

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代碼當前第17頁\共有44頁\編于星期六\2點附當前第18頁\共有44頁\編于星期六\2點C-51的包含的頭文件通常有:reg51.hreg52.hmath.hctype.hstdio.hstdlib.habsacc.h常用有:reg51.hreg52.h

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

math.h

(定義常用數學運算);

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

二、C-51流程控制

與標準C語言基本相同:

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

while循環語言

for循環語言

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

當前第32頁\共有44頁\編于星期六\2點2、switch語句

switch(表達式){case常量表達式1:語句1;case常量表達式2:語句2;…case常量表達式n:語句n;default:語句n+1;}格式計算表達式的值。并逐個與其后的常量表達式值相比較,當表達式的值與某個常量表達式的值相等時,即執行其后的語句,然后不再進行判斷,繼續執行后面所有case后的語句。如表達式的值與所有case后的常量表達式均不相同時,則執行default后的語句。在使用switch語句時還應注意以下幾點:在case后的各常量表達式的值不能相同,否則會出現錯誤。在case后,允許有多個語句,可以不用{}括起來。各case和default子句的先后順序可以變動,而不會影響程序執行結果。default子句可以省略不用。當前第33頁\共有44頁\編于星期六\2點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語句時還應注意以下幾點:(1)在case后的各常量表達式的值不能相同,否則會出現錯誤。(2)在case后,允許有多個語句,可以不用{}括起來。(3)各case和default子句的先后順序可以變動,而不會影響程序執行結果。(4)default子句可以省略不用。當前第34頁\共有44頁\編于星期六\2點3、while語句

格式while(表達式)

{

語句

}while語句的語義是:計算表達式的值,當值為真(非0)時,執行循環體語句作用:循環執行一段代碼當前第35頁\共有44頁\編于星期六\2點例子:

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);}當前第36頁\共有44頁\編于星期六\2點4、for語句格式for(表達式1;表達式2;表達式3)

{

語句

}作用:循環執行一段代碼它的執行過程如下:1)先求解表達式1。2)求解表達式2,若其值為真(非0),則執行for語句中指定的內嵌語句,然后執行下面第3)步;若其值為假(0),則結束循環,轉到第5)步。3)求解表達式3。4)轉回上面第2)步繼續執行。5)循環結束,執行for語句下面的一個語句當前第37頁\共有44頁\編于星期六\2點Sum=0;for(i=1;i<=100;i++)

sum=sum+i;例子:inti;for(i=100;i>0;i--){//空語句,想想這段代碼有什么用}當前第38頁\共有44頁\編于星期六\2點附:for循環的嵌套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);}當前第39頁\共有44頁\編于星期六\2點5、do-while語句形式為:

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論