《單片機原理與應用》課件單片機原理與應用-第三章_第1頁
《單片機原理與應用》課件單片機原理與應用-第三章_第2頁
《單片機原理與應用》課件單片機原理與應用-第三章_第3頁
《單片機原理與應用》課件單片機原理與應用-第三章_第4頁
《單片機原理與應用》課件單片機原理與應用-第三章_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章C51語言編程基礎學習目標(1)了解C51編程的一般設計流程。(2)掌握C51程序設計的基本方法。學習重點和難點(1)C51的數(shù)據(jù)類型、存儲器類型和存儲模式。(2)C51的函數(shù)定義及使用方法。(3)C51指針的使用。3.1單片機的C51基礎知識(1)對單片機的指令系統(tǒng)不要求了解,僅要求對8051的存儲器結(jié)構(gòu)有初步了解;(2)寄存器分配、不同存儲器的尋址及數(shù)據(jù)類型等細節(jié)可由編譯器管理;(3)程序有規(guī)范的結(jié)構(gòu),可分成不同的函數(shù),這種方式可使程序結(jié)構(gòu)化;(4)提供的庫包含許多標準子程序,具有較強的數(shù)據(jù)處理能力;(5)由于具有方便的模塊化編程技術,使已編好程序容易移植;3.1.2C51的基本數(shù)據(jù)類型1.char字符類型無符號字符類型unsignedchar有符號字符類型signedchar,默認值為signedchar類型。2.int整型有符號int整型數(shù)signedint無符號整型數(shù)unsignedint,默認值為signedint類型3.long長整型有符號long長整型signedlong無符號長整型unsignedlong,默認值為signedlong類型4.float浮點型5.bit位變量6.sfr特殊功能寄存器,例如:sfrP1=0x907.sfr1616位特殊功能寄存器8.sbit可尋址位sfrP1=0x90;//因P1端口的寄存器是可位尋址的,所以能定義sbitP1_1=P1^1;//P1_1為P1中的P1.1引腳3.1.3存儲器類型存儲器類型描述data直接尋址內(nèi)部數(shù)據(jù)存儲器,訪問變量速度最快(128bytes)bdata可位尋址內(nèi)部數(shù)據(jù)存儲器,允許位與字節(jié)混合訪問(16bytes)idata間接尋址內(nèi)部數(shù)據(jù)存儲器,可訪問全部地址空間(256bytes)pdata分頁(256bytes)外部數(shù)據(jù)存儲器,由操作碼MOVX@Ri訪問xdata外部數(shù)據(jù)存儲器(64KB),由MOVX@DPTR訪問code代碼數(shù)據(jù)存儲器(64KB),由MOVC@A+DPTR訪問3.1.4存儲器模式存儲器模式描述SMALL參數(shù)及局部變量放入可直接尋址的內(nèi)部寄存器(最大128bytes128bytes,默認存儲器類型是DATA)COMAPCT參數(shù)及局部變量放入分頁外內(nèi)部存儲區(qū)(最大256bytes256bytes,默認存儲器類型是PDATA)LARGE參數(shù)及局部變量直接放入外部數(shù)據(jù)存儲器(最大64K64K,默認存儲器類型是XDATA)3.1.5C51常量1.整型常量能表示為十進制如123、0、-89等。十六進制則以0x開頭如0x34、-0x3B等。長整型就在數(shù)字后面加字母L,如104L、034L等。2.浮點型常量可分為十進制和指數(shù)表示形式。如0.888,3345.345,0.0等如125e3,7e9,-3.0e-33.字符型常量是單引號內(nèi)的字符,如‘a(chǎn)’,‘d’等,4.字符串型常量由雙引號內(nèi)的字符組成,如“test”,“OK”等。5.位常量,它的值是一個二進制數(shù)。3.2C51的基本運算1.算術運算符+加A=x+y-減B=x-y*乘C=x*y/除D=x/y%取余數(shù)E=x%y2.關系運算符符號功能范例說明==相等x==y比較x與y變量的值,相等則結(jié)果為1,不相等則為0!=不相等x!=y比較x與y變量的值,不相等則結(jié)果為1,相等則為0>大于x>y若x變量的值大于y變量的值,其結(jié)果為1,否則為0<小于x<y若x變量的值小于y變量的值,其結(jié)果為1,否則為0>=大等于x>=y若x變量的值大于或等于y變量的值,其結(jié)果為1,否則為0<=小等于x<=y若x變量的值小于或等于y變量的值,其結(jié)果為1,否則為03.邏輯運算符符號功能范例說明&&及運算(x>y)&&(y>z)若x變量的值大于y變量的值,且y變量的值也大于z變量的值,其結(jié)果為1,否則為0||或運算(x>y)||(y>z)若x變量的值大于y變量的值,或y變量的值大于z變量的值,其結(jié)果為1,否則為0!反相運算!(x>y)若x變量的值大于y變量的值,其結(jié)果為0,否則為14.位運算符符號 功能 范例& 及運算 A=x&y| 或運算 B=x|y^ 異或 C=x^y~ 取反 D=~x<< 左移 E=x<<n>> 右移 F=x>>n5.遞增/減運算符符號功能范例說明++加1x++將x變量的值加1--減1x--將x變量的值減13.3C51的程序設計基礎1.while循環(huán)語句的格式如下:While(表達式){語句;}2.for循環(huán)語句for語句是一個很實用的計數(shù)循環(huán),其格式如下:格式:for(表達示1;表達示2;表達示3) { 語句;}3.if選擇語句if-else語句提供條件判斷的語句,稱為條件選擇語句,其格式如下:if(表達式){ 語句1;}else{ 語句2;}4.多分支條件語句和開關語句

(1)多分支語句格式如下:if(條件表達式1)語句1elseif(條件表達式2)語句2…elseif(條件表達式m)語句m…elseif(條件表達式n)語句nelse語句p

4.多分支條件語句和開關語句

(2)開關語句switch(表達式){case常量1:語句1break;case常量2:語句2break;…case常量m:語句mbreak;…case常量n:語句nbreak;default:語句p}5.其它語句(1)絕對跳轉(zhuǎn)語句:gotogoto標號;(2)返回語句:returnreturn(表達式或變量);(3)退出語句:break和continue

3.3.2數(shù)組unsignedintxcount[10];//定義無符號整形數(shù)組,有10個數(shù)據(jù)單元charinputstring[5];//定義字符形數(shù)組,有5個數(shù)據(jù)單元floatoutnum[10],[10];//定義浮點型數(shù)組,有100個數(shù)據(jù)單元表3-10數(shù)組定義數(shù)據(jù)類型數(shù)組名[常量表達式];數(shù)據(jù)類型數(shù)組名[常量表達式1]......[常量表達式N];

3.3.2指針用一個變量來存放另一個變量的地址,那么用來存放變量地址的變量稱為“指針變量”變量的指針就是變量的地址,用取地址運算符‘&’取得賦給指針變量。&STR就是把變量STR的地址取得。要訪問變量STR除了能用‘STR’這個變量名來訪問之外,還能用變量地址來訪問。方法是先用&STR取變量地址并賦于STRIP指針變量,然后就能用*STRIP來對STR進行訪問了。‘*’是指針運算符,用它能取得指針變量所指向的地址的值。

3.4C51的函數(shù)1.函數(shù)的定義函數(shù)定義格式如下:返回值的數(shù)據(jù)類型函數(shù)名(形參變量1說明,。。。,形參變量n說明){局部變量定義函數(shù)體語句返回語句}void函數(shù)名(void){函數(shù)體語句}2.主函數(shù)voidmain(void){語句}3.中斷函數(shù)voidT0_interrupt(void)interrupt1中斷源名稱中斷號外部中斷INT00定時器/計數(shù)器T0中斷1外部中斷INT12定時器/計數(shù)器T1中斷3串行口中斷UART4定時器/計數(shù)器T2中斷T5在main函數(shù)里調(diào)用TwoDataAdd函數(shù):voidmain(void){chara,b;intc;a=38;b=99;c=TwoDataAdd(a,b);}4.庫函數(shù)函數(shù)庫對應的頭文件功能字符函數(shù)CTYPE.H與ASKII碼表相關一般I/O函數(shù)STDIO.H與UART相關字符串函數(shù)STRING.H字符串的截取、查找、比較等標準函數(shù)STDLIB.H字符串與數(shù)字之間的轉(zhuǎn)換數(shù)學函數(shù)MATH.H求絕對值、平方開方、三角函數(shù)絕對地址訪問ABSACC.H絕對地址訪問內(nèi)部函數(shù)INTRINS.H只有_NOP_()函數(shù)有用,相當于匯編里的NOP變量參數(shù)表STDARG.H不用全程跳轉(zhuǎn)SETJMP.H不用SFR訪問REG51/52.H特殊功能寄存器聲明5.函數(shù)的調(diào)用voidmain(void){chara,b;intc;a=38;b=99;c=TwoDataAdd(a,b);}變量a、b叫實參,調(diào)用TwoDataAdd()函數(shù)時,實參a、b的值分別傳遞給形參FirstData和SecondData,用變量c接收函數(shù)的返回值。值傳遞的點是,在函數(shù)調(diào)用結(jié)束后,實參仍舊保持原來的值,即a=38、b=99,而形參被釋放?!纠?-1】寫出一個完整的調(diào)用子函數(shù)的例子,用單片機控制一個LED燈閃爍發(fā)光。用P1口的第一個引腳控制一個LED燈,1秒鐘閃爍一次。#include<reg52.h>//頭文件#defineuintunsignedint//宏定義sbitD1=P1^0;//聲明單片機P1口的第一位uintx,y;voidmain(){ while(1)//大循環(huán) { D1=0;//點亮第一個發(fā)光二極管 for(x=500;x>0;x--) for(y=110;y>0;y--); D1=1;//關閉第一個發(fā)光二極管 for(x=500;x>0;x--) for(y=110;y>0;y--); }}#include<reg52.h>//頭文件#defineuintunsignedint//宏定義sbitD1=P1^0;//聲明單片機P1口的第一位voiddelay();//聲明子函數(shù)voidmain(){ while(1)//大循環(huán) { D1=0;//點亮第一個發(fā)光二極管 delay();//延時500毫秒 D1=1;//關閉第一個發(fā)光二極管 delay();//延時500毫秒 }}

voiddelay()//延時子程序延時約500毫秒{ uintx,y; for(x=500;x>0;x--) for(y=110;y>0;y--);}【例3-3】調(diào)用子函數(shù)的例子,用單片機控制一個LED燈閃爍發(fā)光。用P1口的第一個引腳控制一個LED燈,讓它亮500ms,滅800ms。#include<reg52.h>//頭文件#defineuintunsignedint//宏定義sbitD1=P1^0;//聲明單片機P1口的第一位voiddelay(uintz);//聲明子函數(shù)voidmain(){ while(1)//大循環(huán) { D1=0;//點亮第一個發(fā)光二極管 delay(500);//延時500毫秒 D1=1;//關閉第一個發(fā)光二極管 delay(800);//延時800毫秒 }}v

溫馨提示

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

評論

0/150

提交評論