C51數(shù)據(jù)類型與運(yùn)算_第1頁(yè)
C51數(shù)據(jù)類型與運(yùn)算_第2頁(yè)
C51數(shù)據(jù)類型與運(yùn)算_第3頁(yè)
C51數(shù)據(jù)類型與運(yùn)算_第4頁(yè)
C51數(shù)據(jù)類型與運(yùn)算_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、7.1 C51數(shù)據(jù)類型與運(yùn)算一、C51數(shù)據(jù)類型C51數(shù)據(jù)類型與標(biāo)準(zhǔn)C數(shù)據(jù)類型的最大不同之處:位型。位型(bit)字符型(char)整型(int)長(zhǎng)整型(long)浮點(diǎn)型(float)雙精度浮點(diǎn)型(double)數(shù)組類型(array)結(jié)構(gòu)體類型(struct)共用體(union)枚舉(enum)基本類型構(gòu)造類型指針類型空類型數(shù)據(jù)類型7.1 C51數(shù)據(jù)類型與運(yùn)算C51數(shù)據(jù)類型的取值范圍:數(shù)據(jù)類型長(zhǎng)度(bit)長(zhǎng)度(byte)值域范圍bit10,1unsigned char810255signed char81128127unsigned int162065535signed int162 3276

2、832767unsigned float32404294967295signed float324 21474836482147483647float3241.176E-383.40E+38(6位數(shù)字)double6481.176E-383.40E+38(10位數(shù)字)一般指針243存儲(chǔ)空間0655357.1 C51數(shù)據(jù)類型與運(yùn)算二、C51數(shù)據(jù)存儲(chǔ)類型 1. C51存儲(chǔ)類型與MCS-51單片機(jī)存儲(chǔ)空間的對(duì)應(yīng)關(guān)系 存儲(chǔ)類型與存儲(chǔ)空間的對(duì)應(yīng)關(guān)系data直接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū),訪問速度快(128字節(jié))bdata可位尋址片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū),允許位與字節(jié)混合訪問(16字節(jié))idata間接尋址片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū),可

3、訪問片內(nèi)全部RAM地址空間(256字節(jié))pdata分頁(yè)尋址片外數(shù)據(jù)存儲(chǔ)區(qū)(256字節(jié)),由MOVX Ri訪問xdata尋址片外數(shù)據(jù)存儲(chǔ)區(qū)(64K字節(jié)),有MOVX DPTR訪問code尋址代碼存儲(chǔ)區(qū)(64K字節(jié)),有MOVC DPTR訪問7.1 C51數(shù)據(jù)類型與運(yùn)算2. C51存儲(chǔ)類型及其大小和值域 存儲(chǔ)類型長(zhǎng)度(bit)長(zhǎng)度(byte)值域范圍data810255idata810255pdata810255xdata162065535code1620655357.1 C51數(shù)據(jù)類型與運(yùn)算3.51單片機(jī)的存儲(chǔ)模式 存儲(chǔ)模式說 明SMALL 參數(shù)及局部變量放入可直接尋址的片內(nèi)存儲(chǔ)器(最大128字

4、節(jié),默認(rèn)存儲(chǔ)類型是data),因此訪問十分方便。另外所有對(duì)象,包括棧,都必須嵌入片內(nèi)RAM。棧長(zhǎng)很關(guān)鍵,因?yàn)閷?shí)際棧長(zhǎng)依賴于不同函數(shù)的嵌套層數(shù)COMPACT 參數(shù)及局部變量放入分頁(yè)片外存儲(chǔ)區(qū)(最大256字節(jié),默認(rèn)的存儲(chǔ)類型是pdata),通過寄存器R0和R1間接尋址,??臻g位于內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)中LARGE 參數(shù)及局部變量直接放入片外數(shù)據(jù)存儲(chǔ)區(qū)(最大64KB,默認(rèn)存儲(chǔ)類型為xdata),使用數(shù)據(jù)指針DPTR來進(jìn)行尋址。用此數(shù)據(jù)指針訪問的效率較低,尤其是對(duì)二個(gè)或多個(gè)字節(jié)的變量,這種數(shù)據(jù)類型的訪問機(jī)制直接影響代碼的長(zhǎng)度,另一不方便之處在于這種數(shù)據(jù)指針不能對(duì)稱操作7.1 C51數(shù)據(jù)類型與運(yùn)算三、C51定義

5、SFR定義方法:兩個(gè)關(guān)鍵字:sfr和sbit1.定義特殊功能寄存器用sfr例如:sfr PSW=0 xD0;/*定義程序狀態(tài)字PSW的地址為D0H*/sfr TMOD=0 x89;/*定義定時(shí)器/計(jì)數(shù)器方式控制寄存器TMOD的地址為89H*/sfr P1=0 x90;/*定義P1口的地址為90H*/2.定義可位尋址的特殊功能寄存器的位用sbit例如:sbit CY=0 xD7;/*定義進(jìn)位標(biāo)志CY的地址為D7H*/sbit AC=0 xD06;/*定義輔助進(jìn)位標(biāo)志AC的地址為D6H*/sbit RS0=0 xD03;/*定義RS0的地址為D3H*/ 7.1 C51數(shù)據(jù)類型與運(yùn)算 標(biāo)準(zhǔn)SFR在r

6、eg51.h、reg52.h 等頭文件中已經(jīng)被定義,只要用文件包含做出申明即可使用。例如:#include ”reg51.h”sbit P10=P10;sbit P12=P12;main()P10=1;P12=0;PSW=0 x08;7.1 C51數(shù)據(jù)類型與運(yùn)算四、C51定義并行口 單片機(jī)內(nèi)部并行口用sfr定義,外部并行口的定義如何定義?用指針定義,指針的定義在absacc.h頭文件中例如:#include “absacc.h”#define PA XBYTE0 xffecmain()PA=0 x3A; /*將數(shù)據(jù)3AH寫入地址為0 xffec的存儲(chǔ)單元或I/O端口*/XBYTE是一個(gè)指針,它

7、將PA定義為一個(gè)外部并行口,其地址是FFECH。7.1 C51數(shù)據(jù)類型與運(yùn)算五、C51定義位變量使用關(guān)鍵字bit例如:bit lock;/*將lock定義為位變量*/bit dirention;/*將direction定義為位變量*/ 注意:不能定義位變量指針;也不能定義位變量數(shù)組。7.1 C51數(shù)據(jù)類型與運(yùn)算六、C51運(yùn)算符、表達(dá)式及其規(guī)則 1.算術(shù)運(yùn)算符 加法運(yùn)算符 減法運(yùn)算符乘法運(yùn)算符除法運(yùn)算符 模運(yùn)算或取余運(yùn)算符為自增運(yùn)算符為自減運(yùn)算符。 關(guān)系運(yùn)算符 小于 小于等于 大于 大于等于 等于! 不等于doublefloatintcharlongunsigned高低這四個(gè)運(yùn)算符的優(yōu)先級(jí)相同,

8、處于高優(yōu)先級(jí)這兩個(gè)運(yùn)算符的優(yōu)先級(jí)相同,處于低優(yōu)先級(jí)7.1 C51數(shù)據(jù)類型與運(yùn)算 邏輯運(yùn)算符 & 邏輯與| 邏輯或! 邏輯非 位運(yùn)算符 & 按位與相當(dāng)于ANL指令| 按位或 相當(dāng)于ORL指令按位異或相當(dāng)于XRL指令 按位取反相當(dāng)于CPL指令 右移相當(dāng)于RR指令7.1 C51數(shù)據(jù)類型與運(yùn)算 賦值運(yùn)算符 賦值運(yùn)算符就是賦值符號(hào)“=” 復(fù)合賦值運(yùn)算符 十種:, , , , ,。按優(yōu)先級(jí)順序結(jié)合運(yùn)算。例如:a+=b 等價(jià)于a=(a+b)x*=a+b 等價(jià)于x=(x*(a+b)a&=b 等價(jià)于a=(a&b)a=4 等價(jià)于a=(a=1) c=10; else if (a=2)

9、 c=20; else if (a=3) c=30; else if (a=4) c=40; else c=0; 7.2 C51流程控制語句 switch/case語句switch/case語句的一般形式如下:switch(表達(dá)式) case 常量表達(dá)式1:語句1; break;case 常量表達(dá)式2:語句2; break;case 常量表達(dá)式n:語句n; break;default :語句n+1;7.2 C51流程控制語句例7.1:?jiǎn)纹瑱C(jī)P1口的P1.0和P1.1各接一個(gè)開關(guān)K1、K2,P1.4、P1.5、P1.6和P1.7各接一只發(fā)光二極管。有K1和K2的不同狀態(tài)來確定哪個(gè)發(fā)光二極管被點(diǎn)亮

10、。K2K1亮的二極管00L101L210L311L47.2 C51流程控制語句方法一:用if語句實(shí)現(xiàn)#include “reg51.h”void main()char a;a=P1;a=a&0 x03;/*屏蔽高6位*/if (a=0) P1=0 x83; else if (a=1) P1=0 x43; else if (a=2) P1=0 x23; else P1=0 x13;7.2 C51流程控制語句方法二:用switch/case語句實(shí)現(xiàn)#include “reg51.h”void main()char a;a=P1;a=a&0 x03;/*屏蔽高6位*/switch (

11、a) case0:P1=0 x83;break; case1:P1=0 x43;break; case2:P1=0 x23;break;case3:P1=0 x13; 7.2 C51流程控制語句二、循環(huán)語句 if語句和goto語句goto語句只能構(gòu)成簡(jiǎn)單循環(huán),與if語句一起可以實(shí)現(xiàn)當(dāng)型和直到型循環(huán)。 構(gòu)成當(dāng)型循環(huán)loop:if(表達(dá)式)語句goto loop; 構(gòu)成直到型循環(huán)loop:語句 if(表達(dá)式)goto loop; 7.2 C51流程控制語句 while語句while語句的一般格式:while(表達(dá)式)語句 do-while語句do-while語句一般格式: do 語句 while

12、(表達(dá)式); for語句for語句的一般形式: for (表達(dá)式1;表達(dá)式2;表達(dá)式3)語句先計(jì)算表達(dá)式的值,若其值為非0,則執(zhí)行內(nèi)嵌語句(循環(huán)),若其值為0,則退出while循環(huán)。先執(zhí)行內(nèi)嵌的語句, 若表達(dá)式的值為非0時(shí),則循環(huán);當(dāng)表達(dá)式的值為0時(shí),則結(jié)束循環(huán),執(zhí)行do-while語句下面的語句。 7.2 C51流程控制語句舉例:例7.1的程序只能執(zhí)行一遍,先用循環(huán)程序使其無窮循環(huán)下去。用goto語句實(shí)現(xiàn)#include “reg51.h”void main()char a;loop:a=P1;a=a&0 x03;/*屏蔽高6位*/switch (a)case0:P1=0 x83;b

13、reak;case1:P1=0 x43;break;case2:P1=0 x23;break;case3:P1=0 x13;goto loop;7.2 C51流程控制語句用while語句實(shí)現(xiàn)#include “reg51.h”void main()char a;while (1) a=P1; a=a&0 x03;/*屏蔽高6位*/ switch (a) case0:P1=0 x83;break; case1:P1=0 x43;break; case2:P1=0 x23;break; case3:P1=0 x13; While中的條件恒為1,表示死循環(huán)。7.2 C51流程控制語句用do-

14、while語句實(shí)現(xiàn)#include “reg51.h”void main() char a; do a=P1; a=a&0 x03;/*屏蔽高6位*/ switch (a) case0:P1=0 x83;break;case1:P1=0 x43;break;case2:P1=0 x23;break;case3:P1=0 x13; while (1);While中的條件恒為1,表示死循環(huán)。7.2 C51流程控制語句用for語句實(shí)現(xiàn)#include “reg51.h”void main()char a;for (; ;)a=P1;a=a&0 x03;/*屏蔽高6位*/switch

15、(a)case0:P1=0 x83;break;case1:P1=0 x43;break;case2:P1=0 x23;break;case3:P1=0 x13; for中的條件恒為真,表示死循環(huán)。7. C51構(gòu)造數(shù)據(jù)類型一、數(shù)組 一維數(shù)組 一維數(shù)組的定義 類型說明符 數(shù)組名元素個(gè)數(shù);如:int a50; 一維數(shù)組的初始化 int a5=1,2,3,4,5;/*給全部元素賦值*/int b6=1,2,6;/*給部分元素賦值*/int d10;d0=4;d1=6; /*定義完后再賦值*/7. C51構(gòu)造數(shù)據(jù)類型 二維數(shù)組 二維數(shù)組的定義類型說明符 數(shù)組名行數(shù) 列數(shù);如:float a34; 二維

16、數(shù)組的初始化int a34=1,2,3,4,5,6,7,8,9,10,11,12;/*全部初始化*/ int a34=1,2,3,4,5,6,7,8,;/*部分初始化,a20= a21= a22= a23= 0*/C51還可以定義多維數(shù)組,也可以定義字符型數(shù)組。數(shù)組是十分有用的數(shù)據(jù)類型,用它可以形成容易查找的數(shù)據(jù)表格。7. C51構(gòu)造數(shù)據(jù)類型二、指針1. 基于存儲(chǔ)器的指針基于存儲(chǔ)器的指針是在說明一個(gè)指針時(shí),指定它所指向的對(duì)象的存儲(chǔ)類型。一般占2字節(jié)。例如:char xdata *px;px為指向一個(gè)定義在xdata存儲(chǔ)器中的字符變量的指針變量。px本身在默認(rèn)的存儲(chǔ)器區(qū)域(由編譯模式?jīng)Q定),其長(zhǎng)

17、度為2字節(jié)。例如:char xdata *data py;py為指向一個(gè)定義在xdata存儲(chǔ)器中的字符變量的指針變量。py本身在RAM中,與編譯模式無關(guān),其長(zhǎng)度也為2字節(jié)。 7. C51構(gòu)造數(shù)據(jù)類型2.一般指針 不作特別申明的指針,即為一般指針。如:char *pz;這里沒有指定指針變量pz所指向的變量的存儲(chǔ)類型,pz處于編譯模式默認(rèn)的存儲(chǔ)區(qū),長(zhǎng)度為3字節(jié)。3個(gè)字節(jié)的含義如下: 地址+0+1+2內(nèi)容存儲(chǔ)類型的編碼高位地址偏移量低位地址偏移量存儲(chǔ)類型idataxdatapdatadatacode編碼值12345例如:#define XBYTE (unsigned char *) 0 x20000

18、L) XBYTE被定義為(unsigned char *) 0 x20000L,它是一個(gè)一般指針,其存儲(chǔ)類型為2,即為xdata型,偏移量是0000,這樣,XBYTE成為指向外部數(shù)據(jù)存儲(chǔ)器的零地址單元的指針。而XBYTE8000則表示外部數(shù)據(jù)存儲(chǔ)器的0 x8000單元。 7.4C51函數(shù)一、函數(shù)的定義與分類 函數(shù)的分類 標(biāo)準(zhǔn)庫(kù)函數(shù) 用戶自定義函數(shù)用戶自定義函數(shù)是用戶根據(jù)自己的需要而編寫的函數(shù)。從函數(shù)定義的形式上劃分:無參數(shù)函數(shù)、有參數(shù)函數(shù)和空函數(shù)。 函數(shù)的定義 返回值類型 函數(shù)名(形式參數(shù)列表)函數(shù)體例如:int max(int x,int y,int z)返回值的數(shù)據(jù)類型為整型,函數(shù)名為ma

19、x,x、y、z為個(gè)整型入口參數(shù)。7.4C51函數(shù)二、C51的庫(kù)函數(shù)C51編譯器提供了豐富的庫(kù)函數(shù),使用這些庫(kù)函數(shù)大大提高了編程效率,用戶可以根據(jù)需要隨時(shí)調(diào)用。每個(gè)庫(kù)函數(shù)都在相應(yīng)的頭文件中給出了函數(shù)的原型,使用時(shí)只需在源程序的開頭用編譯預(yù)處理命令#include將相關(guān)的頭文件包含進(jìn)來即可。 例如,要進(jìn)行絕對(duì)地址訪問,只需要在程序開頭使用#include “absacc.h”文件包含就可以了。要訪問SFR和SFR的位,則只需要在程序開頭使用#include “reg51.h” 或#include “reg52.h”文件包含。7.5 C51應(yīng)用編程實(shí)例例1: 外部中斷0引腳(P3.2)接一個(gè)開關(guān),P

20、1.0接一個(gè)發(fā)光二極管。開關(guān)閉合一次,發(fā)光二極管改變一次狀態(tài)。本例解決外部中斷如何應(yīng)用。#include “reg51.h”#include “intrins.h”void delay(void) int a=5000; while(a)_nop_();void int_srv(void)interrupt 0 using 1 delay(); if(INT0=0) P10=!P10;while(INT0=0); 延時(shí)程序0表示外部中斷01表示使用第1組寄存器7.5 C51應(yīng)用編程實(shí)例void main() P10=0; EA=1; EX0=1;while(1); 例2: 從P1.0輸出方波信

21、號(hào),周期為50ms。設(shè)單片機(jī)的focs=6MHz。本例解決定時(shí)器及其中斷的應(yīng)用。#include “reg51.h”void main() TMOD=0 x01; TH0=12500/256; TL0=12500%256; ET0=1; EA=1; TR0=1; while(1); 定時(shí)25ms7.5 C51應(yīng)用編程實(shí)例void T0_srv(void)interrupt 1 using 1 TH0=12500/256; TL0=12500%256; P10=!P10;例3:如圖所示,單片機(jī)擴(kuò)展可編程接口芯片8155,8155PA口控制8只發(fā)光二極管,形成走馬燈,每位點(diǎn)亮的時(shí)間為0.1秒。 7

22、.5 C51應(yīng)用編程實(shí)例8155的端口地址如下:命令口地址(COM8155):FEF8HPA口地址(PA8155):FEF9HPB口地址(PB8155):FEFAHPC口地址(PC8155):FEFBH#include “reg51.h”#include “absacc.h”#define COM8155 XBYTE0 xfef8#define PA8155 XBYTE0 xfef9void delay(void) /*延時(shí)1ms*/ TH0=500/256; TL0=500%256; TR0=1; while(!TF0); TF0=0; TR0=0;7.5 C51應(yīng)用編程實(shí)例main() c

23、har i; disp_word=0 x01; /*從第1位開始點(diǎn)亮*/ COM8155=0 x01; /*初始化8155*/ do PA8155= disp_word;/*輸出去點(diǎn)亮一位*/ for(i=0;i100;i+) /*點(diǎn)亮0.1秒 */ delay(); disp_word= disp_word1; /*左移控制字,準(zhǔn)備點(diǎn)亮下一位*/ if(disp_word=0)disp_word=0 x01; whlie(1);7.5 C51應(yīng)用編程實(shí)例例4:第111頁(yè)的獨(dú)立鍵盤,用C語言實(shí)現(xiàn)。 7.5 C51應(yīng)用編程實(shí)例#include “reg51.h”#include “absacc.

24、h”void delay(void) /*延時(shí)1ms*/ TH0=500/256; TL0=500%256; TR0=1; while(!TF0); TF0=0; TR0=0;7.5 C51應(yīng)用編程實(shí)例main() char x,i; loop: x=P1; x=x&0 x0f; if(x=0)goto loop; for(i=0;i10;i+) /*延時(shí)10ms去抖動(dòng)*/ delay(); x=P1; x=x&0 x0f; if(x=0)goto loop; switch(x) case 0 x01:PBYTE0 x20= PBYTE0 x201;break;/*20單元加1

25、*/ case 0 x02:PBYTE0 x20= PBYTE0 x201;break;/*20單元減1*/ case 0 x04:PBYTE0 x20= 0 x00;break;/*20單元清0*/ case 0 x08:PBYTE0 x20= 0 xff; /*20單元置全1*/ goto loop;7.5 C51應(yīng)用編程實(shí)例例5:第120頁(yè)的動(dòng)態(tài)顯示,用C語言實(shí)現(xiàn)。 首先掃描最后掃描7.5 C51應(yīng)用編程實(shí)例#include “reg51.h”#include “intrins.h”char code dispdata =0 x3F,0 x06,0 x5B,0 x4F,0 x66,0 x6D,0 x7D,0 x07,0 x7F,0 x6F;char dis_dat4;void delay(void) /*延時(shí)1ms*/TH0=500/256;TL0=500%256;TR0=1;while(!TF0);TF0=0;TR0=0;7.5 C51應(yīng)用編程實(shí)例void

溫馨提示

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