第4章89C51單片機(jī)的C51程序設(shè)計(jì)_第1頁
第4章89C51單片機(jī)的C51程序設(shè)計(jì)_第2頁
第4章89C51單片機(jī)的C51程序設(shè)計(jì)_第3頁
第4章89C51單片機(jī)的C51程序設(shè)計(jì)_第4頁
第4章89C51單片機(jī)的C51程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第第4章章 C51程序設(shè)計(jì)程序設(shè)計(jì)1.C511.C51存儲(chǔ)類型存儲(chǔ)類型2.2.特殊功能寄存器的特殊功能寄存器的C51C51定義定義3.3.絕對(duì)地址單元的絕對(duì)地址單元的C51C51訪問訪問4.4.集成開發(fā)環(huán)境集成開發(fā)環(huán)境uVision2uVision2本章學(xué)習(xí)要求:本章學(xué)習(xí)要求:單片機(jī)原理及應(yīng)用單片機(jī)原理及應(yīng)用4.1 C51程序設(shè)計(jì)語言概述程序設(shè)計(jì)語言概述4.1 C51程序設(shè)計(jì)語言概述程序設(shè)計(jì)語言概述機(jī)器語言:機(jī)器語言:用二進(jìn)制代碼表示的指令,也是用二進(jìn)制代碼表示的指令,也是CPUCPU唯一能夠接受的指令形式唯一能夠接受的指令形式. .如如:MOV A:MOV A,R0R0;機(jī)器語言(機(jī)器碼)為

2、:;機(jī)器語言(機(jī)器碼)為:1110_1000b1110_1000b MOV R1 MOV R1,A A;機(jī)器碼為:;機(jī)器碼為:1111_1001b1111_1001b匯編語言:匯編語言: 匯編語言就是用助字符表示的指令,與機(jī)器語言指令一一對(duì)應(yīng)。匯編語言就是用助字符表示的指令,與機(jī)器語言指令一一對(duì)應(yīng)。如:兩個(gè)寄存器相加匯編語言指令:如:兩個(gè)寄存器相加匯編語言指令:ADD AADD A,R0R0C51語言:語言:語法同標(biāo)準(zhǔn)語法同標(biāo)準(zhǔn)C C語言。開發(fā)效率高,可讀性強(qiáng),是目前使用最為廣泛的單語言。開發(fā)效率高,可讀性強(qiáng),是目前使用最為廣泛的單片機(jī)開發(fā)語言。一條片機(jī)開發(fā)語言。一條C C語言通常需要由多條機(jī)

3、器語言組成。語言通常需要由多條機(jī)器語言組成。 機(jī)器語言機(jī)器語言(Machine Language) )有三類有三類 匯編語言匯編語言 ( (Assemble) ) 高級(jí)語言高級(jí)語言 ( (High Level Language) )4.1 C51程序設(shè)計(jì)語言概述程序設(shè)計(jì)語言概述1.1.降低學(xué)習(xí)難度,僅需要掌握存儲(chǔ)器接口;降低學(xué)習(xí)難度,僅需要掌握存儲(chǔ)器接口;2.2.打破不同單片機(jī)之間的界限;打破不同單片機(jī)之間的界限;3.3.程序可讀性強(qiáng)、可移植性強(qiáng)、開發(fā)效率高。程序可讀性強(qiáng)、可移植性強(qiáng)、開發(fā)效率高。1.單片機(jī)的程序存儲(chǔ)器做得越來越大、越來越便宜。單片機(jī)的程序存儲(chǔ)器做得越來越大、越來越便宜。2.2

4、.單片機(jī)的主頻越來越高,現(xiàn)在單片機(jī)的主頻越來越高,現(xiàn)在5151單片機(jī)很多都可以做到單片機(jī)很多都可以做到40M/80M/100M40M/80M/100M,而且還有很多是單周期的。,而且還有很多是單周期的。是否存在不好之處?是否存在不好之處?C51設(shè)計(jì)單片機(jī)的好處:設(shè)計(jì)單片機(jī)的好處:1.生成機(jī)器語言代碼冗余,占用較多程序存儲(chǔ)單元;生成機(jī)器語言代碼冗余,占用較多程序存儲(chǔ)單元;2.程序的執(zhí)行效率不高,導(dǎo)致運(yùn)行速度慢程序的執(zhí)行效率不高,導(dǎo)致運(yùn)行速度慢 。4.2 C51程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)C51存儲(chǔ)類型存儲(chǔ)類型對(duì)應(yīng)對(duì)應(yīng)89C51單片機(jī)存儲(chǔ)器空間單片機(jī)存儲(chǔ)器空間說明說明data直接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)器(直

5、接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)器(128字節(jié))字節(jié))訪問速度快訪問速度快xdata片外數(shù)據(jù)存儲(chǔ)器(片外數(shù)據(jù)存儲(chǔ)器(64K字節(jié))字節(jié))對(duì)應(yīng)對(duì)應(yīng)MOVX DPTR訪問訪問code程序存儲(chǔ)器(程序存儲(chǔ)器(64K字節(jié))字節(jié))對(duì)應(yīng)對(duì)應(yīng)MOVC DPTR訪問訪問bdata可位尋址片內(nèi)數(shù)據(jù)存儲(chǔ)器(可位尋址片內(nèi)數(shù)據(jù)存儲(chǔ)器(16字節(jié),字節(jié),128位)位)允許位和字節(jié)混合訪問允許位和字節(jié)混合訪問idata間接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)器(間接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)器(256字節(jié))字節(jié))可訪問片內(nèi)全部可訪問片內(nèi)全部RAM空間空間pdata分頁尋址片外數(shù)據(jù)存儲(chǔ)器(分頁尋址片外數(shù)據(jù)存儲(chǔ)器(256字節(jié))字節(jié))對(duì)應(yīng)對(duì)應(yīng)MOVX R0訪問訪問4.2.1

6、 C51變量變量/常量存儲(chǔ)類型常量存儲(chǔ)類型C51存儲(chǔ)類型定義舉例:unsigned char data x,y,z; /*在內(nèi)部在內(nèi)部RAM區(qū)定義了區(qū)定義了3個(gè)無符號(hào)字節(jié)型變量個(gè)無符號(hào)字節(jié)型變量x,y,z*/unsigned int data i,j,k; /*在內(nèi)部在內(nèi)部RAM區(qū)定義了區(qū)定義了3個(gè)無符號(hào)整型變量個(gè)無符號(hào)整型變量i,j,k*/unsigned char code pfb10 = 0,1,4,9,16,25,36,49,64,81 /*在程序存儲(chǔ)器里定義了在程序存儲(chǔ)器里定義了10字節(jié)的常量數(shù)組字節(jié)的常量數(shù)組*/ 4.2 C51程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)4.2 C51程序設(shè)計(jì)基礎(chǔ)程序

7、設(shè)計(jì)基礎(chǔ)4.2.2 特殊功能寄存器的特殊功能寄存器的C51定義定義特殊功能寄存器的定義方法:特殊功能寄存器的定義方法: sfr 特殊功能寄存器名特殊功能寄存器名 = 地址常數(shù);地址常數(shù); 例如:例如:sfr P0 = 0 x80; /*定義定義P0口地址為口地址為80H*/ 為了在為了在C51程序中能夠直接訪問位于內(nèi)部數(shù)據(jù)存儲(chǔ)器中程序中能夠直接訪問位于內(nèi)部數(shù)據(jù)存儲(chǔ)器中的的21字節(jié)字節(jié)SFR以及其中以及其中11字節(jié)可位選址的位,字節(jié)可位選址的位,C51語言提供語言提供了與標(biāo)準(zhǔn)了與標(biāo)準(zhǔn)C語言不兼容的定義方法,擴(kuò)充了關(guān)鍵字語言不兼容的定義方法,擴(kuò)充了關(guān)鍵字“sfr”和和“sbit”,利用這種擴(kuò)充的關(guān)

8、鍵字可以在,利用這種擴(kuò)充的關(guān)鍵字可以在C51程序中直接操作程序中直接操作21字節(jié)的特殊功能寄存器和字節(jié)的特殊功能寄存器和11字節(jié)可位尋址的位。字節(jié)可位尋址的位。 方法三方法三:sbit 位變量名位變量名 = 特殊功能寄存器地址特殊功能寄存器地址位位置;位位置; 例如:例如:sbit P10 = 0 x900;方法一方法一:sbit 位變量名位變量名 = 位地址常數(shù);位地址常數(shù); 例如:例如:sbit OV = 0 xD2;特殊功能寄存器中可位尋址位的定義有三種方法:特殊功能寄存器中可位尋址位的定義有三種方法:方法二方法二:sbit 位變量名位變量名 = 特殊功能寄存器名特殊功能寄存器名位位置;

9、位位置; /*必須先用必須先用sfr定義特殊功能寄存器名定義特殊功能寄存器名*/ 例如:例如:sfr PSW = 0 xD0; sbit CY = PSW7;4.2 C51程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)說明:說明:1.1.我們并不需要?jiǎng)邮质褂梦覀儾⒉恍枰獎(jiǎng)邮质褂胹frsfr和和sbitsbit定義每一個(gè)特殊功能寄存器定義每一個(gè)特殊功能寄存器和位,因?yàn)樵诤臀?,因?yàn)樵贑51C51編譯器里提供了一個(gè)編譯器里提供了一個(gè)“reg51.h”reg51.h”的頭文件,的頭文件,在該頭文件里已經(jīng)定義好所有特殊功能寄存器和可尋址位在該頭文件里已經(jīng)定義好所有特殊功能寄存器和可尋址位2.2.只要在程序開始處增加一條包含指

10、令只要在程序開始處增加一條包含指令“#include ” #include ” 4.2 C51程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)4.2.3絕對(duì)地址單元的絕對(duì)地址單元的C51訪問訪問 4.2 C51程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)unsigned char data rval; /定義變量定義變量rval,位于內(nèi)部數(shù)據(jù)存儲(chǔ)器,位于內(nèi)部數(shù)據(jù)存儲(chǔ)器rval=CBYTE0 x0002; /將程序存貯器的將程序存貯器的0002H地址單元的值賦給地址單元的值賦給rvalrval=DBYTE 0 x32; /將內(nèi)部數(shù)據(jù)存儲(chǔ)器的將內(nèi)部數(shù)據(jù)存儲(chǔ)器的32H地址單元的值賦給地址單元的值賦給rvalrval=XBYTE 0 x0002

11、; /將外部數(shù)據(jù)存儲(chǔ)器的將外部數(shù)據(jù)存儲(chǔ)器的0004H地址單元的值賦給地址單元的值賦給rval說明:說明:1.C511.C51編譯器里頭文件編譯器里頭文件“absacc.h”absacc.h”定義有多個(gè)地址直針,包定義有多個(gè)地址直針,包括括CBYTECBYTE、DBYTEDBYTE、PBYTEPBYTE、XBYTEXBYTE、CWORDCWORD、DWORDDWORD、PWORDPWORD、XWORDXWORD,可以通過單元地址直接訪問程序存儲(chǔ)器、內(nèi)部數(shù)據(jù)存,可以通過單元地址直接訪問程序存儲(chǔ)器、內(nèi)部數(shù)據(jù)存儲(chǔ)器、分頁尋址外部數(shù)據(jù)存儲(chǔ)器、外部數(shù)據(jù)存儲(chǔ)器。儲(chǔ)器、分頁尋址外部數(shù)據(jù)存儲(chǔ)器、外部數(shù)據(jù)存儲(chǔ)器。

12、2.2.使用這些指針之前,必須要在程序中增加一條包含指令使用這些指針之前,必須要在程序中增加一條包含指令“include”include”。4.2 C51程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)4.2.4 C51運(yùn)算符與常用語句運(yùn)算符與常用語句 4.2 C51程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)表表4-2 4-2 算術(shù)運(yùn)算符算術(shù)運(yùn)算符序號(hào)序號(hào)算術(shù)運(yùn)算符算術(shù)運(yùn)算符含義含義1 1+ +加法加法2 2- -減法減法3 3* *乘法乘法4 4/ /除法(或求模)除法(或求模)5 5+自加自加6 6-自減自減7 7% %求余求余4.2 C51程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)表表4-3 4-3 關(guān)系運(yùn)算符關(guān)系運(yùn)算符序號(hào)序號(hào)關(guān)系運(yùn)算符關(guān)系運(yùn)算

13、符含義含義1 1 大于大于2 2=大于等于大于等于3 3 小于小于4 4=小于等于小于等于5 5= = =等于等于6 6!=!=不等于不等于4.2 C51程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)表表4-4 邏輯運(yùn)算符邏輯運(yùn)算符序號(hào)序號(hào)邏輯運(yùn)算符邏輯運(yùn)算符含義含義1&邏輯與邏輯與2|邏輯或邏輯或3!邏輯非邏輯非表表4-5 位運(yùn)算符位運(yùn)算符序號(hào)序號(hào)位運(yùn)算符位運(yùn)算符含義含義1&按位與按位與2|按位或按位或3按位異或按位異或4取反取反5右移右移4.2 C51程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)表表4-6 常用語句常用語句序號(hào)序號(hào)語句語句含義含義1=賦值語句賦值語句2if條件語句條件語句3表達(dá)式表達(dá)式1 ? 表達(dá)式

14、表達(dá)式2 : 表達(dá)式表達(dá)式3條件運(yùn)算符條件運(yùn)算符4switch/case多分支語句多分支語句5while循環(huán)語句循環(huán)語句6do-while循環(huán)語句循環(huán)語句7for循環(huán)語句循環(huán)語句8函數(shù)函數(shù)模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì)4.2 C51程序設(shè)計(jì)基礎(chǔ)程序設(shè)計(jì)基礎(chǔ)表表4-6 常用語句常用語句序號(hào)序號(hào)語句語句含義含義1=賦值語句賦值語句2if條件語句條件語句3表達(dá)式表達(dá)式1 ? 表達(dá)式表達(dá)式2 : 表達(dá)式表達(dá)式3條件運(yùn)算符條件運(yùn)算符4switch/case多分支語句多分支語句5while循環(huán)語句循環(huán)語句6do-while循環(huán)語句循環(huán)語句7for循環(huán)語句循環(huán)語句8函數(shù)函數(shù)模塊化程序設(shè)計(jì)模塊化程序設(shè)計(jì)4.3

15、C51程序舉例程序舉例例例1:設(shè)變量放在片內(nèi):設(shè)變量放在片內(nèi)RAM 20H單元,其取值范圍為單元,其取值范圍為0-5,要,要求編制一段程序,查出變量的平方值,并放入片內(nèi)求編制一段程序,查出變量的平方值,并放入片內(nèi)RAM 21H單單元。元。分析:該例需要掌握如何訪問一個(gè)指定地址的存儲(chǔ)單元。分析:該例需要掌握如何訪問一個(gè)指定地址的存儲(chǔ)單元。/ #include #include #define uchar unsigned charvoid main(void)uchar number;uchar code table6=0,1,4,9,16,25;number = DBYTE0 x20;swit

16、ch(number) case 0 : DBYTE0 x21=table0;continue; case 1 : DBYTE0 x21=table1;continue; case 2 : DBYTE0 x21=table2;continue; case 3 : DBYTE0 x21=table3;continue; case 4 : DBYTE0 x21=table4;continue; case 5 : DBYTE0 x21=table5;continue; default : break; while(1); 4.3 C51程序舉例程序舉例10049100200100 xxxxxxy當(dāng)當(dāng)當(dāng)

17、#include #define uchar unsigned charvoid main(void)uchar data x,y;x = DBYTE0 x30;if(x=100) y=0 x20;else if(x100) y=x;else y=x-49DBYTE0 x30 = y;while(1);例例2:設(shè)變量:設(shè)變量x以無符號(hào)單字節(jié)數(shù)形式存放在內(nèi)部以無符號(hào)單字節(jié)數(shù)形式存放在內(nèi)部RAM 30H單單元,函數(shù)元,函數(shù)y與與x有如下關(guān)系,試編制程序,根據(jù)有如下關(guān)系,試編制程序,根據(jù)x的大小求出的大小求出y并并放回原單元。放回原單元。4.3 C51程序舉例程序舉例#include #define

18、 uchar unsigned charvoid main(void)uchar data x,y;x=DBYTE0 x50;y=DBYTE0 x51;if(xy) DBYTE0 x60 = x;else DBYTE0 x60=y;while(1); 例例3:試編寫程序,將片內(nèi):試編寫程序,將片內(nèi)RAM 50H和和51H單元兩個(gè)無符號(hào)單單元兩個(gè)無符號(hào)單字節(jié)數(shù)中較小的數(shù)存放到字節(jié)數(shù)中較小的數(shù)存放到60H單元。單元。4.3 C51程序舉例程序舉例例例4:把外部數(shù)據(jù):把外部數(shù)據(jù)RAM中從地址中從地址2000H單元開始的單元開始的100個(gè)有符號(hào)個(gè)有符號(hào)數(shù)逐一取出,若為正數(shù)則放回原單元,若為負(fù)數(shù)則求補(bǔ)后

19、放回。數(shù)逐一取出,若為正數(shù)則放回原單元,若為負(fù)數(shù)則求補(bǔ)后放回。 #include #define uchar unsigned char#define uint unsigned intvoid main(void) uchar data numb = 0; uchar data i; uint data xadd = 0 x2000; for (i=0; i100; i+) if(XBYTExadd0) numb=(XBYTExadd)+1; XBYTExadd = numb; xadd+; 4.3 C51程序舉例程序舉例例例5:假定有兩個(gè)無符號(hào)二進(jìn)制數(shù)分別存放于內(nèi)部:假定有兩個(gè)無符號(hào)二進(jìn)制數(shù)分別存放于內(nèi)部RAM 40H和和41H單元,編寫程序求這兩個(gè)數(shù)的和,并將和存放在單元,編寫程序求這兩個(gè)數(shù)的和,并將和存放在42H單元。單

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論