教學(xué)課件PPT 89C51單片機的C51程序設(shè)計_第1頁
教學(xué)課件PPT 89C51單片機的C51程序設(shè)計_第2頁
教學(xué)課件PPT 89C51單片機的C51程序設(shè)計_第3頁
教學(xué)課件PPT 89C51單片機的C51程序設(shè)計_第4頁
教學(xué)課件PPT 89C51單片機的C51程序設(shè)計_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、;機器語言(機器碼)為:;機器語言(機器碼)為:1110_1000b1110_1000b mov r1 mov r1,a a;機器碼為:;機器碼為:1111_1001b1111_1001b 匯編語言:匯編語言: 匯編語言就是用助字符表示的指令,與機器語言指令一一對應(yīng)。匯編語言就是用助字符表示的指令,與機器語言指令一一對應(yīng)。 如:兩個寄存器相加匯編語言指令:如:兩個寄存器相加匯編語言指令:add aadd a,r0r0 c51語言:語言: 語法同標準語法同標準c c語言。開發(fā)效率高,可讀性強,是目前使用最為廣泛的單語言。開發(fā)效率高,可讀性強,是目前使用最為廣泛的單 片機開發(fā)語言。一條片機開發(fā)語言

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

4、的程序存儲器做得越來越大、越來越便宜。 2.2.單片機的主頻越來越高,現(xiàn)在單片機的主頻越來越高,現(xiàn)在5151單片機很多都可以做到單片機很多都可以做到 40m/80m/100m40m/80m/100m,而且還有很多是單周期的。,而且還有很多是單周期的。 是否存在不好之處?是否存在不好之處? c51設(shè)計單片機的好處:設(shè)計單片機的好處: 1.生成機器語言代碼冗余,占用較多程序存儲單元;生成機器語言代碼冗余,占用較多程序存儲單元; 2.程序的執(zhí)行效率不高,導(dǎo)致運行速度慢程序的執(zhí)行效率不高,導(dǎo)致運行速度慢 。 4.2 c51程序設(shè)計基礎(chǔ)程序設(shè)計基礎(chǔ) c51存儲類型存儲類型對應(yīng)對應(yīng)89c51單片機存儲器空

5、間單片機存儲器空間說明說明 data直接尋址片內(nèi)數(shù)據(jù)存儲器(直接尋址片內(nèi)數(shù)據(jù)存儲器(128字節(jié))字節(jié))訪問速度快訪問速度快 xdata片外數(shù)據(jù)存儲器(片外數(shù)據(jù)存儲器(64k字節(jié))字節(jié))對應(yīng)對應(yīng)movx dptr訪問訪問 code程序存儲器(程序存儲器(64k字節(jié))字節(jié))對應(yīng)對應(yīng)movc dptr訪問訪問 bdata可位尋址片內(nèi)數(shù)據(jù)存儲器(可位尋址片內(nèi)數(shù)據(jù)存儲器(16字節(jié),字節(jié),128位)位)允許位和字節(jié)混合訪問允許位和字節(jié)混合訪問 idata間接尋址片內(nèi)數(shù)據(jù)存儲器(間接尋址片內(nèi)數(shù)據(jù)存儲器(256字節(jié))字節(jié))可訪問片內(nèi)全部可訪問片內(nèi)全部ram空間空間 pdata分頁尋址片外數(shù)據(jù)存儲器(分頁尋址片

6、外數(shù)據(jù)存儲器(256字節(jié))字節(jié))對應(yīng)對應(yīng)movx r0訪問訪問 4.2.1 c51變量變量/常量存儲類型常量存儲類型 c51存儲類型定義舉例: unsigned char data x,y,z; /*在內(nèi)部在內(nèi)部ram區(qū)定義了區(qū)定義了3個無符號字節(jié)型變量個無符號字節(jié)型變量x,y,z*/ unsigned int data i,j,k; /*在內(nèi)部在內(nèi)部ram區(qū)定義了區(qū)定義了3個無符號整型變量個無符號整型變量i,j,k*/ unsigned char code pfb10 = 0,1,4,9,16,25,36,49,64,81 /*在程序存儲器里定義了在程序存儲器里定義了10字節(jié)的常量數(shù)組字節(jié)的

7、常量數(shù)組*/ 4.2 c51程序設(shè)計基礎(chǔ)程序設(shè)計基礎(chǔ) 4.2 c51程序設(shè)計基礎(chǔ)程序設(shè)計基礎(chǔ) 4.2.2 特殊功能寄存器的特殊功能寄存器的c51定義定義 特殊功能寄存器的定義方法:特殊功能寄存器的定義方法: sfr 特殊功能寄存器名特殊功能寄存器名 = 地址常數(shù);地址常數(shù); 例如:例如:sfr p0 = 0 x80; /*定義定義p0口地址為口地址為80h*/ 為了在為了在c51程序中能夠直接訪問位于內(nèi)部數(shù)據(jù)存儲器中程序中能夠直接訪問位于內(nèi)部數(shù)據(jù)存儲器中 的的21字節(jié)字節(jié)sfr以及其中以及其中11字節(jié)可位選址的位,字節(jié)可位選址的位,c51語言提供語言提供 了與標準了與標準c語言不兼容的定義方法

8、,擴充了關(guān)鍵字語言不兼容的定義方法,擴充了關(guān)鍵字“sfr”和和 “sbit”,利用這種擴充的關(guān)鍵字可以在,利用這種擴充的關(guān)鍵字可以在c51程序中直接操作程序中直接操作 21字節(jié)的特殊功能寄存器和字節(jié)的特殊功能寄存器和11字節(jié)可位尋址的位。字節(jié)可位尋址的位。 方法三方法三:sbit 位變量名位變量名 = 特殊功能寄存器地址特殊功能寄存器地址位位置;位位置; 例如:例如:sbit p10 = 0 x900; 方法一方法一:sbit 位變量名位變量名 = 位地址常數(shù);位地址常數(shù); 例如:例如:sbit ov = 0 xd2; 特殊功能寄存器中可位尋址位的定義有三種方法:特殊功能寄存器中可位尋址位的定

9、義有三種方法: 方法二方法二:sbit 位變量名位變量名 = 特殊功能寄存器名特殊功能寄存器名位位置;位位置; /*必須先用必須先用sfr定義特殊功能寄存器名定義特殊功能寄存器名*/ 例如:例如:sfr psw = 0 xd0; sbit cy = psw7; 4.2 c51程序設(shè)計基礎(chǔ)程序設(shè)計基礎(chǔ) 說明:說明: 1.1.我們并不需要動手使用我們并不需要動手使用sfrsfr和和sbitsbit定義每一個特殊功能寄存器定義每一個特殊功能寄存器 和位,因為在和位,因為在c51c51編譯器里提供了一個編譯器里提供了一個“reg51.h”reg51.h”的頭文件,的頭文件, 在該頭文件里已經(jīng)定義好所有

10、特殊功能寄存器和可尋址位在該頭文件里已經(jīng)定義好所有特殊功能寄存器和可尋址位 2.2.只要在程序開始處增加一條包含指令只要在程序開始處增加一條包含指令“#include ” #include ” 4.2 c51程序設(shè)計基礎(chǔ)程序設(shè)計基礎(chǔ) 4.2.3絕對地址單元的絕對地址單元的c51訪問訪問 4.2 c51程序設(shè)計基礎(chǔ)程序設(shè)計基礎(chǔ) unsigned char data rval; /定義變量定義變量rval,位于內(nèi)部數(shù)據(jù)存儲器,位于內(nèi)部數(shù)據(jù)存儲器 rval=cbyte0 x0002; /將程序存貯器的將程序存貯器的0002h地址單元的值賦給地址單元的值賦給rval rval=dbyte 0 x32;

11、 /將內(nèi)部數(shù)據(jù)存儲器的將內(nèi)部數(shù)據(jù)存儲器的32h地址單元的值賦給地址單元的值賦給rval rval=xbyte 0 x0002; /將外部數(shù)據(jù)存儲器的將外部數(shù)據(jù)存儲器的0004h地址單元的值賦給地址單元的值賦給rval 說明:說明: 1.c511.c51編譯器里頭文件編譯器里頭文件“absacc.habsacc.h”定義有多個地址直針,包定義有多個地址直針,包 括括cbytecbyte、dbytedbyte、pbytepbyte、xbytexbyte、cwordcword、dworddword、pwordpword、 xwordxword,可以通過單元地址直接訪問程序存儲器、內(nèi)部數(shù)據(jù)存,可以通過

12、單元地址直接訪問程序存儲器、內(nèi)部數(shù)據(jù)存 儲器、分頁尋址外部數(shù)據(jù)存儲器、外部數(shù)據(jù)存儲器。儲器、分頁尋址外部數(shù)據(jù)存儲器、外部數(shù)據(jù)存儲器。 2.2.使用這些指針之前,必須要在程序中增加一條包含指令使用這些指針之前,必須要在程序中增加一條包含指令 “includeabsacc.hinclude”。 4.2 c51程序設(shè)計基礎(chǔ)程序設(shè)計基礎(chǔ) 4.2.4 c51運算符與常用語句運算符與常用語句 4.2 c51程序設(shè)計基礎(chǔ)程序設(shè)計基礎(chǔ) 表表4-2 4-2 算術(shù)運算符算術(shù)運算符 序號序號 算術(shù)運算符算術(shù)運算符含義含義 1 1+ +加法加法 2 2- -減法減法 3 3* *乘法乘法 4 4/ /除法(或求模)除

13、法(或求模) 5 5+自加自加 6 6-自減自減 7 7% %求余求余 4.2 c51程序設(shè)計基礎(chǔ)程序設(shè)計基礎(chǔ) 表表4-3 4-3 關(guān)系運算符關(guān)系運算符 序號序號 關(guān)系運算符關(guān)系運算符含義含義 1 1 大于大于 2 2=大于等于大于等于 3 3 小于小于 4 4=小于等于小于等于 5 5= = =等于等于 6 6!=!=不等于不等于 4.2 c51程序設(shè)計基礎(chǔ)程序設(shè)計基礎(chǔ) 表表4-4 邏輯運算符邏輯運算符 序號序號 邏輯運算符邏輯運算符含義含義 1 uchar code table6=0,1,4,9,16,25; number = dbyte0 x20; switch(number) case

14、 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程序舉例程序舉例 10049 100200 100 xx xx xx y 當(dāng) 當(dāng) 當(dāng) #incl

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

16、 #define uchar unsigned char void 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單元兩個無符號單單元兩個無符號單 字節(jié)數(shù)中較小的數(shù)存放到字節(jié)數(shù)中較小的數(shù)存放到60h單元。單元。 4.3 c51程序舉例程序舉例 例例4:把外部數(shù)據(jù):把外部數(shù)據(jù)ram中從地址中從地址2000h單元開始的單元開始的100個有符號個有符號 數(shù)逐一取出,

17、若為正數(shù)則放回原單元,若為負數(shù)則求補后放回。數(shù)逐一取出,若為正數(shù)則放回原單元,若為負數(shù)則求補后放回。 #include #define uchar unsigned char #define uint unsigned char void 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; xddr+; 4.3 c51程序舉例程序舉例 例例5:假定有兩個無符號

18、二進制數(shù)分別存放于內(nèi)部:假定有兩個無符號二進制數(shù)分別存放于內(nèi)部ram 40h和和 41h單元,編寫程序求這兩個數(shù)的和,并將和存放在單元,編寫程序求這兩個數(shù)的和,并將和存放在42h單元。單元。 #include #define uchar unsigned char uchar sum(uchar x1, uchar x2); void main(void) uchar number1; uchar number2; uchar val; number1 = dbyte0 x40; number2 = dbyte0 x41; val = sum(number1,number2); dbyte0 x42 = val; whilie(1); uchar sum(uchar x1, uchar x2) uchar x; x= x1+x2; return x; 4.3 c51程序舉例程序舉例 例例6:假定:假定p1口連接有口連接有8只供陰極發(fā)光二極管,試編寫程序,以只供陰極發(fā)光二極管,試編寫程序,

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論