[工學(xué)]ch04-C51及編程_第1頁
[工學(xué)]ch04-C51及編程_第2頁
[工學(xué)]ch04-C51及編程_第3頁
[工學(xué)]ch04-C51及編程_第4頁
[工學(xué)]ch04-C51及編程_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、工學(xué)ch04-C51及編程工學(xué)ch04-C51及編程C語言的特點和應(yīng)用n編譯型程序設(shè)計語言n兼有高級語言之特點,匯編語言之功能n結(jié)構(gòu)化,模塊化支持n可讀性強,便于維護,縮短開發(fā)周期n代碼可重用,可移植n已成為嵌入式系統(tǒng)開發(fā)的主流選擇n可以與匯編混合編程C語言的優(yōu)點語言的優(yōu)點n 廣泛的支持廣泛的支持u非常方便非常方便u編譯,集成開發(fā)環(huán)境編譯,集成開發(fā)環(huán)境n 可移植可移植u源代碼不依賴特定的硬件體系源代碼不依賴特定的硬件體系(指令系統(tǒng)指令系統(tǒng))u源代碼另行編譯就可支持其它系列的源代碼另行編譯就可支持其它系列的CPUn 庫函數(shù)豐富庫函數(shù)豐富u內(nèi)部函數(shù)支持內(nèi)部函數(shù)支持C語言的運算語言的運算u數(shù)學(xué)函數(shù)、

2、特別是浮點運算庫數(shù)學(xué)函數(shù)、特別是浮點運算庫u字符串處理字符串處理n 嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)u簡化的程序開發(fā)簡化的程序開發(fā)u向平臺應(yīng)用靠攏向平臺應(yīng)用靠攏 C-51與與ASM-51對比對比n只要求了解,不要求徹底掌握指令系統(tǒng)只要求了解,不要求徹底掌握指令系統(tǒng)n寄存器分配、不同存貯器的尋址由編譯器管理;寄存器分配、不同存貯器的尋址由編譯器管理;n通過庫函數(shù),支持更多數(shù)據(jù)類型,甚至浮點數(shù);通過庫函數(shù),支持更多數(shù)據(jù)類型,甚至浮點數(shù);n程序結(jié)構(gòu)化:即函數(shù)調(diào)用函數(shù);程序結(jié)構(gòu)化:即函數(shù)調(diào)用函數(shù);n代碼效率高,可讀性好;代碼效率高,可讀性好;C51與ANSI C的區(qū)別n 要求掌握要求掌握MCS-51MCS

3、-51系列的存貯器組織;系列的存貯器組織;n 變量的定義必須具體指出存儲空間,否則編譯器變量的定義必須具體指出存儲空間,否則編譯器不能正確地分配和定位。不能正確地分配和定位。n 增加了位變量增加了位變量n 增加了特殊功能寄存器增加了特殊功能寄存器n 增加了中斷函數(shù)的支持增加了中斷函數(shù)的支持n 如果你對如果你對C已經(jīng)忘掉,就應(yīng)該復(fù)習(xí)一下。已經(jīng)忘掉,就應(yīng)該復(fù)習(xí)一下。n 考不及格的都是不肯接受該建議,也不肯好好做實驗考不及格的都是不肯接受該建議,也不肯好好做實驗的。的。關(guān)鍵詞關(guān)鍵詞 存儲空間存儲空間 地址范圍地址范圍data 直接尋址片內(nèi)直接尋址片內(nèi)RAM0 x00-0 x7fidata 間接尋址片

4、內(nèi)間接尋址片內(nèi)RAM 0 x00-0 xffbdata 可位尋址片內(nèi)可位尋址片內(nèi)RAM0 x20-0 x2F 按字節(jié)訪問按字節(jié)訪問bit 在在bdata空間定空間定義義0 x00-0 x7F 按位訪問按位訪問sfr 特殊功能寄存器特殊功能寄存器0 x80-0 xff sbit 特殊功能寄存器中的可位尋址的位特殊功能寄存器中的可位尋址的位xdata 擴展擴展 RAM 0 x0000-0 xffff pdata 頁式尋址擴展頁式尋址擴展RAM0 xPP00-0 xPPff PP=(P2)code 程序程序ROM 0 x0000-0 xffffC-51數(shù)據(jù)的存儲類型數(shù)據(jù)的存儲類型存儲類型的變量的定義

5、n 一般格式 數(shù)據(jù)類型 存儲類型 變量名;n 帶存儲類型的變量定義舉例char data var1;bit bdata flags;float idata x,y,z;unsigned int pdata var2;unsigned char vector34;char data var1;bit flags;unsigned char xdata vector10;存儲模式存儲模式nSMALL默認的存儲類型是datanCOMPACT默認的存儲類型是pdatanLARGE默認的存儲類型是xdata開發(fā)環(huán)境默認的初始狀態(tài)是SMALL可以修改C51的基本數(shù)據(jù)類型的基本數(shù)據(jù)類型數(shù)據(jù)類型長度(bit)

6、長度(byte)值域bit110,1unsigned char810255signed char81128127unsigned int 162065535signed int 1623276832767unsigned long32404294967295signed long 32421474836482147483647float 3241.176E383.40E+38(6位數(shù)字)double6481.176E383.40E+38(10位數(shù)字)整型數(shù)的存儲結(jié)構(gòu) 0 x120 x34+0+1地址 0 x120 x340 x560 x78.+0+1+2+3地址 長整型變量的存儲結(jié)構(gòu) 浮點型變

7、量(float)n 4個字節(jié)(32位),IEEE-754標(biāo)準(zhǔn)n 含數(shù)符、階碼和尾數(shù)三部分u 1位符號位: “0正1負”u 8位階碼(2的指數(shù)):偏移0 x7Fu 24位尾數(shù)。最高位始終為“1”,實際不占位,只保存23位。具有24位精度例:浮點數(shù) 的存儲形式是: 0 xC1480000C51的數(shù)據(jù)類型擴充定義的數(shù)據(jù)類型擴充定義SFRnsfr:特殊功能寄存器聲明特殊功能寄存器聲明 sfr sfr-name = 地址;nsfr16:16位位sfr的寄存器聲明的寄存器聲明例:例:sfr SCON = 0 x98; / 串口通信方式字地址 sfr TMOD = 0 x89;/ 定時/計數(shù)器方式字地址 s

8、fr P0 = 0 x80 ; / 定義P0口地址 sfr P1 = 0 x90 ; / 定義P1口地址 sfr16 T2 = 0 xCC; n用法:頭文件預(yù)定義所有用法:頭文件預(yù)定義所有SFR,只要加,只要加include到源程序頭部即可。到源程序頭部即可。C51的數(shù)據(jù)類型擴充定義的數(shù)據(jù)類型擴充定義bitnbit:位變量聲明位變量聲明nsbit:u特殊功能寄存器的位聲明特殊功能寄存器的位聲明 例:例:sbit OV = PSW2;u已聲明已聲明bdata型型8位或位或16位變量的按位定義位變量的按位定義例:例:unsigned char bdata x1; sbit Motor = x15;

9、例例1 先定義變量的數(shù)據(jù)類型和存儲類型:bdata int ibase; /* 定義ibase為bdata整型變量 */bdata char bary4;/* bary4定義為bdata字符型數(shù)組 */然后可使用sbit定義可獨立尋址訪問的對象位:sbit mybit0 = ibase0 ;/* mybit0定義為ibase的第0位 */sbit mybit15 = ibase15;/* mybit0定義為ibase的第15位 */sbit Ary07 = bary07 ; /* Ary07定義為abry0的第7位 */sbit Ary37 = bary37 ; /* Ary37定義為abry

10、3的第7位 */ 對象ibase和bary也可以字節(jié)尋址: ary37=0; /* bary3的第7位賦值為0 */ bary3=a; /* 字節(jié)尋址,bary3 賦值為a */ sfr PSW=0 xD0 ; /* 定義PSW寄存器地址為D0H */ sbit OV=PSW2 ; /* 定義OV位為,地址為D2H */ sbit CY=PSW7 ; /* 定義CY位為,地址為D7H */ C-51的常用頭文件的常用頭文件n reg51.h 定義特殊功能寄存器和位寄存器定義特殊功能寄存器和位寄存器n 浮點運算庫浮點運算庫n 字符函數(shù)字符函數(shù)n 標(biāo)準(zhǔn)輸入輸出標(biāo)準(zhǔn)輸入輸出n 標(biāo)準(zhǔn)庫函數(shù)標(biāo)準(zhǔn)庫函數(shù)n

11、 輔助宏,支持絕對地址說明輔助宏,支持絕對地址說明例:例:I/O口定義口定義#include #define port XBYTE0 x1000+ - + - * * / / (加(加 減減 乘乘 除)除) = = (位右移(位右移 位左移)位左移)& |& | ( (按位與按位與 按位或按位或) ) ( (按位異或按位異或 按位取反按位取反) )C51的運算符(與的運算符(與ANSI C相同相同)清零程序清零程序 ( (將將202XH20FFH202XH20FFH的內(nèi)容清零的內(nèi)容清零) ) C C5151程序程序#include #include main( )main( ) int i;

12、int i; unsigned char xdata unsigned char xdata * *p=0 x202X;p=0 x202X; / / 指針指向指針指向202XH202XH單元單元 for(i=0;i256;i+)for(i=0;i256;i+) * *p=0;p=0; p+; p+; / /* *清零清零202XH-20FFH202XH-20FFH單元單元* */ / ; 匯編語言程序匯編語言程序 ORG 0000HORG 0000HL00: MOV R0,#10H ;L00: MOV R0,#10H ;查找查找1616個字節(jié)個字節(jié) MOV R1,#00HMOV R1,#00H

13、 MOV DPTR,#202XH MOV DPTR,#202XHL11: MOVX A,DPTRL11: MOVX A,DPTR CJNE A,#00H,L16 ; CJNE A,#00H,L16 ;取出內(nèi)容與取出內(nèi)容與00H00H相等嗎相等嗎? ? INC R1 ; INC R1 ;取出個數(shù)加取出個數(shù)加1 1L16: INC DPTRL16: INC DPTR DJNZ R0,L11 ; DJNZ R0,L11 ;未完繼續(xù)未完繼續(xù) MOV DPTR,#2100HMOV DPTR,#2100H MOV A,R1 MOV A,R1 MOVX DPTR,A ; MOVX DPTR,A ;相同數(shù)個數(shù)

14、送相同數(shù)個數(shù)送2100H2100HL1E: SJMP L1EL1E: SJMP L1E例:查找零的個數(shù)(在例:查找零的個數(shù)(在202XH-200FH202XH-200FH中查出有幾個字中查出有幾個字 節(jié)節(jié)是零,把個數(shù)放在是零,把個數(shù)放在2100H2100H單元中)匯編很麻煩單元中)匯編很麻煩C51查找零的個數(shù)程序查找零的個數(shù)程序#include main ( ) unsigned char xdata *p = 0 x202X; /指針指針p指向指向202XH單元單元 int n=0,i; for (i=0;i16;i+) if(*p=0) n+; / 若該單元內(nèi)容為零,則若該單元內(nèi)容為零,則

15、n+1 p+; / 指針指向下一單元指針指向下一單元 p = 0 x2100; / 指針指針p指向指向2100H單元單元 *p = n; / 把個數(shù)放在把個數(shù)放在2100H單元中單元中C51-程序開發(fā)環(huán)境C51編譯器連接器(多模塊目標(biāo)代碼,庫)生成可執(zhí)行的代碼程序集成環(huán)境KEIL/Franklin代碼緊湊和使用方便存儲器類型idataxdatapdatadatacode值12345通用指針通用指針n ANSI C的指針被C51沿用,表示地址;n 擴展通用一般指針:n C51所特有,增加了指針變量的類型,由3個字節(jié)構(gòu)成存儲類型偏移地址高位偏移地址低位指針存儲地址+0+1+2例:指向擴展RAM 的

16、0 x1234地址,指針可表示為地址+0+1+2內(nèi)容0 x020 x120 x34 用常數(shù)作指針,常用于一些宏,例如XBYTE #define XBYTE ( (char *) 0 x202X0L) / 類型2 偏移量0000H 如果將常數(shù)值0 x09寫入絕對地址為0 x8000的外部數(shù)據(jù)存儲器。語句可以為XBYTE0 x8000 = 0 x09 ; XBYTE被定義為一般指針, XBYTE8000指向外部數(shù)據(jù)存儲器的0 x8000絕對地址。Keil編程環(huán)境的使用nKeil支持MCS-51n以工程為單位管理源代碼只一個模塊也要建立工程n模塊化的開發(fā)n連接生成可下載到芯片的執(zhí)行程序n支持聯(lián)機調(diào)試

17、n軟件模擬運行逼真可信調(diào)試:觀察執(zhí)行過程中的寄存器存儲器(變量)CPU狀態(tài),外設(shè)輸入輸出等;模塊化編程ASM FilesC51 Files匯編編譯.OBJ.OBJLibLIB51LINK, LOCHexLibHex文件可以固化到芯片中運行文件可以固化到芯片中運行集成開發(fā)環(huán)境Keil Vision2n功能:51系列開發(fā)環(huán)境/各大廠商芯片支持n語言:C51高級語言/ASM51匯編語言/混合編程n編輯、匯編、編譯、生成目標(biāo)代碼n調(diào)試:純軟件模擬/聯(lián)機調(diào)試n觀察修改寄存器窗口、源程序窗口、內(nèi)部數(shù)據(jù)窗口、代碼窗口、外部數(shù)據(jù)窗口n單步、宏單步跟蹤執(zhí)行、連續(xù)執(zhí)行n斷點n執(zhí)行時間觀察,主窗口文件菜單n建立新文

18、件n打開已存在文件n 保存n 另存為n保存全部工程菜單n 建立新工程n 打開新工程n 關(guān)閉工程n 其余不常用或使用工具欄已有工程可以利用文件關(guān)聯(lián),雙擊自動打開。新建一個工程nWindows功能新建一個文件夾;nKeil新建一個文本文件,并保存,(也可以是拷貝一個文件到該文件夾)n新建工程,輸入工程名,選擇到上述文件夾并保存n彈出器件選擇顯示為廠商,再點擊前面的“+”號,就能展開選擇廠商選擇器件類似可選其它廠商的其它型號工程窗口nTarget項,點擊可以改名(如需要)n在Target區(qū)域點擊右鍵,將出現(xiàn)浮動窗口n點擊Options for Option_Targetn Xtal中選晶體頻率,影響

19、指令執(zhí)行時間的顯示n 核選Use On-Chip ROM(0 x0-ox1FFF)n Off-Chip選項Option_Output如果需要,預(yù)先建立一個文件夾以存放中間文件,這里點擊“Select Fold for Objects”如果目標(biāo)代碼需要下載到芯片中運行,就需要核選Create Hex File添加文件Target前有加號,表示已經(jīng)有程序組;如沒有,右鍵點選Targets,Group,Files創(chuàng)建;右鍵點擊一個組,選擇Add Files to Group 工程文件的組成可以有多個組每個組可以有多個文件編輯修改文件n點擊工程窗口的文件名,編輯窗中出現(xiàn)文件,可以任意修改,只要符合語法;n語法敏感編譯/匯編/連接n 對C51語言是編譯;對ASM51語

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論