![第4章單片機語言程序設計講課學生用_第1頁](http://file4.renrendoc.com/view/b5b6fd19a28b770ff889ce8b461165e0/b5b6fd19a28b770ff889ce8b461165e01.gif)
![第4章單片機語言程序設計講課學生用_第2頁](http://file4.renrendoc.com/view/b5b6fd19a28b770ff889ce8b461165e0/b5b6fd19a28b770ff889ce8b461165e02.gif)
![第4章單片機語言程序設計講課學生用_第3頁](http://file4.renrendoc.com/view/b5b6fd19a28b770ff889ce8b461165e0/b5b6fd19a28b770ff889ce8b461165e03.gif)
![第4章單片機語言程序設計講課學生用_第4頁](http://file4.renrendoc.com/view/b5b6fd19a28b770ff889ce8b461165e0/b5b6fd19a28b770ff889ce8b461165e04.gif)
![第4章單片機語言程序設計講課學生用_第5頁](http://file4.renrendoc.com/view/b5b6fd19a28b770ff889ce8b461165e0/b5b6fd19a28b770ff889ce8b461165e05.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
CC語言與MCS-51片內(nèi)數(shù) 器與特殊功能寄存器使用按實際地址處理端口數(shù)據(jù)。C不用像匯編語言那樣具體組織、分 器資源CC語言根據(jù)單片機結構及內(nèi)部資源定義數(shù)據(jù)類型和變量;對數(shù)據(jù)類型與變量的定義,要與單片 結構相關聯(lián)否則編譯器不能正確地映射定位。標準C語言程序不需要考慮這些問題;C51包含的數(shù)據(jù)類型、變 模式、輸入輸出處理、函等方面與標準C語言有一定區(qū)別。C51C51與標準CC51中的數(shù)據(jù)類型與標準語言的數(shù)據(jù)類型也有一定的區(qū)別。C51在變量定義與使用上與標準C語言不一樣。(3)為了方便對51,C51對地 上對標準C語言進行了擴展(4)C51中函數(shù)的定義與使用與標準C語言也不完全相同。54.24.2C51的數(shù)據(jù)字符型位類型int整型long整型指針型float浮點C51C51數(shù)據(jù)類型與標準C中數(shù)據(jù)類型基本相同;C51中還有專門針對于MCS-51單片機的特殊功能寄存器型和位類型。4.2.1C51字符型長度均為一個字節(jié),存放一個單字節(jié)的數(shù)據(jù)。 char,定義帶符號字節(jié)數(shù)據(jù);數(shù)值范圍是- char,存放一個字節(jié)的無符號數(shù),其取值范圍為0~255 char可以用來存放無符號數(shù),也可以存放西文字符;一個西文字符占一個字節(jié),在計算機內(nèi)部用ASCII碼存放。22.int整型長度均為兩個字節(jié),用于存放一個雙字節(jié)數(shù)據(jù)。 int,存放兩字節(jié)帶符號數(shù),補碼表示;數(shù)的范圍為- int,存放兩字節(jié)無符號數(shù);數(shù)的范圍為0~6553533.long長度均 節(jié),存放一個四字節(jié)數(shù)據(jù) long數(shù)的范圍為 7 long數(shù)的范圍為 44.float浮點float型數(shù)據(jù)長度為節(jié),格式符合IEEE-754標準的單精度浮點型數(shù)據(jù),包含指數(shù)和尾數(shù)兩部分; 為符號位,“1”表示負數(shù),“0”表示正數(shù)其次8位為階碼,最后23位為尾數(shù)的有效數(shù)位;尾數(shù)的整數(shù)部分隱含為“1”,尾數(shù)精度為24位。55.*指針型數(shù)據(jù)本身就是一個變量,在這個變量中存放的指向另一個數(shù)據(jù)的地址。4.2.24.2.2C51特有的數(shù)據(jù)1.特殊功能寄存器型用于MCS-51單片機中的特殊功能寄存器分sfr和sfr16兩種類型;sfr為字節(jié)型特殊功能寄存器類型,占一個內(nèi)存單元;MCS-51內(nèi)部所有特殊功能寄存器;sfr16為雙字節(jié)型特殊功能寄存器類型,占用兩個字節(jié)單元;MCS-51內(nèi)部所有兩個字節(jié)特殊功能寄存器對特殊功能寄存器必須先用sfr或sfr16進行22.位類型MCS-51單片機中可尋址的位單元在C51中,支持兩種位類型:bit型和sbit它們在內(nèi)存中都只占一個二進制位;其值可以是“1”或“0”長1signed1-2signed2-44 41.175494E-0或0或124.3.14.3.1C51的普通變量及定義一個變量由兩部分組成:變量名和變量值。變量在使用前必須對變量進行定義;變量的數(shù)據(jù)類型和模式以便編譯系統(tǒng)為它分配相應的單元定義的格式如下:[種類]數(shù)據(jù)類型說明符[器類型]變量名1[=初值],變量名2[=初值]…;11.數(shù)據(jù)類型說明符在定義變量時,必須通過數(shù)據(jù)類型說明符指明變量的數(shù)據(jù)類型,指明變量在 器中占用的字節(jié)數(shù)。允許用戶為系統(tǒng)固有的數(shù)據(jù)類型說明符用typedef起別名,格式如下:typedefC51固有的數(shù)據(jù)類名或者 別名C51固有的數(shù)據(jù)類型說明符定義別名后,就可以用別名代替數(shù)據(jù)類型說明符對變量進行定義。(1)(1)typedef只是對已經(jīng)存在的類型增加一個類型名,而沒有創(chuàng)造新的類型。僅用來起一個新的名字(2)typedef變量。各種類型名,但不能用來定義(3)typedef和#define有相似之處,但又不相同。#define是編譯之前進行預處理時作簡單的字符串替換,而typedef是在編譯時處理的?!纠纠?.1】typedef的使用。typedefunsignedintWORD;#defineBYTEunsignedchar;BYTEa1=0x12;WORD2.變量名變量名有兩種:普通變量名和指針變量名。指針變量名前面要帶“*號33種種類是指自動省種外部靜態(tài)C51種類有四種44器類型器類型指明變量所處 器區(qū)直接尋址的片內(nèi)RAM低128B,速度片內(nèi)RAM的可位尋址區(qū)(20H~2FH),允許字節(jié)和位混合間接尋址的片內(nèi)RAM,允許全部片內(nèi)用Ri間接的片外RAM的低用DPTR間接的片外RAM,允許全部64KB片外程序器ROM64KB空模模小編譯模式,緊湊編譯模式,大編譯模式。模 變量被默認在模模變變模式的指定通過#pragma預處理命令來實現(xiàn)。模式可通過在函數(shù)定義時后面 模式說明如果沒有指定,則系統(tǒng)都隱含為SMALL模式?!尽纠?.2】變量定義種類器類型相關情況。chardatavar1;/*在片內(nèi)RAM低 的字符型變量intidatavar2;/*在片內(nèi)RAM autounsignedlongdata/*在片內(nèi) 的自動無符號長整型變量externfloatxdata/*在片外 64KB空 的外部浮點型變量intcode /*在ROM空間定義整型變量unsignedcharbdata允許用戶對特殊功能寄存器進行允許用戶對特殊功能寄存器進行或sfr16類型說明符進行定義;,時需通過定義時需指明它們所對應片內(nèi)RAM單元的地址。sfr或sfr16特殊功能寄存器名=sfr用于對單字節(jié)特殊功能寄存器進行定義;sfr16用于對雙字節(jié)特殊功能寄存器進行定義;特殊功能寄存器名一般用大寫字母表示。4.3.24.3.2C51的特殊功能寄存【例4.3】特殊功能寄存器的定義sfrsfrSCON=0x98;sfrTMOD=0x89;sfrP1=0x90;sfr16DPTR=0x82;sfr16T1=0x8C;sfr16允許用戶通過位類型符定義位變量。允許用戶通過位類型符定義位變量。位類型符有兩個:bit和sbit??梢远x兩種位變量。bit位類型符用于定義一般的位變量。bit只能是片內(nèi)RAM的可位尋址區(qū),嚴格來說只能是bdata【例4.4bit型變量的定義bitbdataa2;/*正確*/bitpdataa3;/*錯誤*/bitxdataa4;/*錯誤*/4.3.34.3.3C51的位變sbit位類型符用于定義在可位尋址字節(jié)或特殊功能寄存器中的位,定義時需指明其位地址;可以是位直接地址,可以是可位尋址變量帶位號;也可以是特殊功能寄存器名帶位號。sbit位變量名=位地字節(jié)地址與位號之間、特殊功能寄存器與位號之間一般用“^”作間隔sbitOV=sbitsfrsbitCY=PSW^7;sbit【例【例4.5】sbit型變量的定義sbitOV=0xD2;sbitunsignedcharbdataflag;sbitflag0=flag^0;sfrP1=0x90;sbitP1_0=P1^0;sbitP1_1=P1^1;sbitsbitsbitsbitsbitsbitsbitC51編譯器把常用的特殊功能寄存器和特殊位進行了定義,放在一個“reg51.h”或“reg52.h”的頭文件中;用一條預處理命令#includereg52.h>把這個頭文件包含到程序中,就可使用特殊功能寄存器名和特殊位名稱。 器型指針”和“一般指針”兩種。 器型指針定義時指明了所指向的數(shù)據(jù)的charxdata2)定義時沒有指明所指向的數(shù)據(jù)的器類型。4.44.4絕對地址展關鍵字_at_C51C51編譯器提供了一組宏定義來對51系列單片機的code、定義了8個宏定義;其函數(shù)原型如下:#define#defineCBYTE((unsignedcharvolatile*)0x50000L)#defineDBYTE((unsignedcharvolatile*)0x40000L)#definePBYTE((unsignedcharvolatile*)0x30000L)#defineXBYTE((unsignedcharvolatile*)0x20000L)#defineCWORD((unsignedintvolatile*)0x50000L)#defineDWORD((unsignedintvolatile*)0x40000L)#definePWORD((unsignedintvolatile*)0x30000L)#defineXWORD((unsignedintvolatile*)0x20000L)這些函數(shù)原型放在absacc.h文件中。使用時需用預處理命令把該頭文件包含到文件中形式為:#include<absacc.h>CBYTECBYTE以字節(jié)形式對code區(qū)尋址DBYTE以字節(jié)形式對data區(qū)尋址PBYTE以字節(jié)形式對pdata區(qū)尋址XBYTE以字節(jié)形式對xdata區(qū)尋址CWORD以字形式對code區(qū)尋址DWORD以字形式對data區(qū)尋址PWORD以字形式對pdata區(qū)尋址XWORD以字形式對xdata形式如下:宏名[地址宏名為CBYTE、DBYTE、PBYTE、XBYTE、CWORD、DWORDPWORD或XWORD地址為單元的絕對地址,一般用十六進制形式表示。 #include<absacc.h> #include<reg52.h> #defineucharunsignedchar/*定義符號uchar為數(shù)據(jù)類型符unsigned#defineuintunsignedint voidmain(void){ucharvar1;uintvar2;var1=XBYTE[0x0005];/*XBYTE[0x0005]片外RAM的0005字節(jié)單元*/var2=XWORD[0x0002];/*XWORD[0x0002]片外RAM的0002字單元*/}XBYTE[0x0005]是以絕對地址方式XWORD[0x0002]是以絕對地址方式的片外 0005字節(jié)單元的片外0002字單元。#defineucharunsigned/*定義符號uchar為數(shù)據(jù)類型符unsigned#defineuintunsignedint /*定義符號uint為數(shù)據(jù)類型符unsignedint*/voidmain(void){uchardataucharpdata*dp1;/*定義一個指向pdata區(qū)的指針dp1*/uintxdata*dp2;/*定義一個指向xdata區(qū)的指針dp2*/uchardata*dp3; /*將數(shù)據(jù)0xff送到片外RAM0030H單元 /*給變量var1賦值}使使用_at_對指定器空間的絕對地址進行: 器類型]數(shù)據(jù)類型說_at_地址常數(shù)器類型為data、bdata、idata、pdata等C51能識別的數(shù)據(jù)類型;如省略則 模式規(guī)定的默 器類型確定變量 器區(qū)域數(shù)據(jù)類型為C51支持的數(shù)據(jù)類型。地址常數(shù)用于指定變量的絕對地址,必須位于有效的 間之內(nèi);使用_at_定義的變量必須為全局變量?!纠纠?.8】通過_at_實現(xiàn)絕對地址 #defineucharunsigned/*定義符號uchar為數(shù)據(jù)類型符 #defineuintunsignedint dataucharx1_at_0x40;xdatauintx2_at_0x2000;voidmain(void){}C51C51有3種邏輯運算符: 邏輯 邏輯 邏輯注意:邏輯運算符與位操作運算符的區(qū)別。C51C51中的位運算符有: 按位異或 按位取反【例】設 左 右B,則a&b、a|ba^b、~a、a<<2、b>>2分別為多少? B,左移位后為 進行右移運算時,如果是無符號數(shù),則總是在其左端補“0”。如果是有符號數(shù),符號位不變。指針為變量的指針為變量的量的地址C51中提供了兩個專門的運算符:式,變量的指針就是該變 指針運算符 取地址運算符指針變量p中的地址為2000H,則*p 的是地址2000H 單元x=*p,實現(xiàn)把地址為 單元的內(nèi)容送給變量x取地址運算符“取地址運算符“&”放在變量的前面,通過它取得變量的地址,變量的地址送給指針變量。設變量x的內(nèi)容為12H,地址為2000H,則&x的值為有一指針變量p,用p=&x,實現(xiàn)將x變量地址送給指針變量指針變量p指向變量x,以后可以通過 變量x程序也由主函數(shù)main開始,并在主函數(shù)中結束,除了標準庫函數(shù)是C51編譯器提供的,不需要用戶進行定義,可以直接調用。用戶也可自己定義函數(shù)。它們的使用方法與標準C語言基本相同。但C51針對的是51系列單片機,C51的函數(shù)在有些方面還是與標準C語言不同,參數(shù)傳遞和返回值與標準C語言中是不一樣的,而且C51又對標準C語言作了相應的擴展 第1第2第3無寄存器C(unsigned)(1)(1)SMALL模式。SMALL模式稱為小編譯模式,在SMALL模式下,編譯時函數(shù)參數(shù)和變量被默認在內(nèi)RAM中器類型為data模式PACT模式稱為緊湊編譯默認在片外RAM的低256B空間 器類型為pdata(3)LARGE模式。LARGE模式稱為大編譯模式,在LARGE模式下,編譯時函數(shù)參數(shù)和變量被默認在片外RAM的64B空間,器類型為xdata。函數(shù)定義時后面再相應的參數(shù)或large)來指明,系統(tǒng)隱含為SMALL模式?!纠纠?.9】C51模Intfunc1(intx1,inty1)/*函數(shù) 模式為 intz1; x1,y1,z1變量 器類
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度北京平面設計專員崗位勞動合同規(guī)范
- 二零二五年度智能辦公文件消毒與消毒劑供應合同
- 2025年度辦公室移動空調租賃及智能化節(jié)能服務合同樣本
- 行業(yè)領先物流配送方案
- 企業(yè)借給個人借款合同
- 建設工程施工合同專用條款
- 委托平面設計合同
- 農(nóng)業(yè)生產(chǎn)資源循環(huán)利用方案
- 招投標與合同管理試卷A
- 產(chǎn)品研發(fā)合同協(xié)議書
- 初二上冊的數(shù)學試卷
- 四大名繡課件-高一上學期中華傳統(tǒng)文化主題班會
- 大模型關鍵技術與應用
- 起重機械生產(chǎn)單位題庫質量安全員
- 高中生物選擇性必修1試題
- 后顱窩腫瘤的護理
- 電氣工程及其自動化專業(yè)《畢業(yè)設計(論文)及答辯》教學大綱
- 《客艙安全管理與應急處置》課件-第14講 應急撤離
- 危險化學品押運員培訓
- 2024胃食管反流病指南
- 《中國成人支氣管擴張癥診斷與治療專家共識2021》
評論
0/150
提交評論