- 相關(guān)推薦
51單片機C語言程序設(shè)計經(jīng)典案例
項目三C51程序設(shè)計語言基礎(chǔ)任務(wù)1C51程序的識讀1.C51程序結(jié)構(gòu)例3-1P_test
/*********************//注釋,還可用//注釋掉一行Filename:P_test.c
Chipname:STC89C51RCClockfrequency:1.20MHz***********************/#include“reg52.h”//預(yù)處理命令,文件包含預(yù)處理命令,后綴名都是.h,標(biāo)準(zhǔn)的MCS-51單片機頭文件為”reg51.h”,STC89系列單片機頭文件為”reg52.h”#defineunitunsignedint//宏定義預(yù)處理命令sbitBZ=P3`7;sbitkey=P1`0;voiddelay(unitms){
uniti;
while(ms--){
for(i=0;i<120;i++);}}
voidmain(void){
while(1)
{
if(key==0)
{
BZ=0x0;delayms(10);BZ=0x1;delayms(50);P0=0xFF;}else{
P0=~P0;
delayms(500);}}}
2.C51的數(shù)據(jù)類型
C51的數(shù)據(jù)類型
構(gòu)造類型
位變量型bit字符型無符號字符型unsignedchar
有符號字符型signedchar
整數(shù)型無符號整數(shù)型unsignedint
有符號整數(shù)型signedint
長整數(shù)型無符號長整數(shù)型unsignedlongint
有符號長整數(shù)型signedlongint
實數(shù)型(浮點型)單精度浮點型float
雙精度浮點型double
數(shù)組類型array結(jié)構(gòu)體類型struct共用體union枚舉enum
表3-1類型
指針類型空類型(void)
C51基本數(shù)據(jù)類型的長度和值域
長度/bit18816163232323224
單字節(jié)單字節(jié)雙字節(jié)雙字節(jié)四字節(jié)四字節(jié)四字節(jié)四字節(jié)三字節(jié)長度/byte
范圍0,10-255-128-1270-65536-32768-32767
位變量型bit
無符號字符型unsignedchar有符號字符型signedchar無符號整數(shù)型unsignedint有符號整數(shù)型signedint
無符號長整數(shù)型unsignedlongint有符號長整數(shù)型signedlongint單精度浮點型float雙精度浮點型double一般指針類型
3.C51的標(biāo)識符和關(guān)鍵字
標(biāo)識符是由字母、數(shù)字和下劃線組成的字符串,第一個字符必須是字母或下劃線,不超過32個字符。
表3-2C51中的關(guān)鍵字關(guān)鍵字autobdatabreakbitcasechar
用途
存儲種類聲明存儲器類型說明程序語句位變量語句程序語句數(shù)據(jù)類型的聲明
說明
用來聲明局部變量
可位尋址的內(nèi)部數(shù)據(jù)存儲器退出最內(nèi)層循環(huán)體
位變量的值是1(true)或0(flase)switch語句中的選擇項單字節(jié)整數(shù)型或字符型數(shù)據(jù)
關(guān)鍵字codeconstcontinuedatadefaultdodoubleelseenumexternfloatforgotoidataifintinterruptlongpdataregisterreentrantreturnsbitshortsignedsizeofSfrSfr16staticstructswitchtypedefunionunsignedusingvoidvolatilewhilexdata
用途
存儲器類型聲明存儲類型說明程序語句存儲器類型說明程序語句程序語句數(shù)據(jù)類型說明程序語句數(shù)據(jù)類型說明存儲類型說明數(shù)據(jù)類型說明程序語句程序語句存儲器類型說明程序語句數(shù)據(jù)類型說明中斷聲明數(shù)據(jù)類型說明存儲器類型說明存儲類型說明再入函數(shù)說明程序語句位變量聲明數(shù)據(jù)類型說明數(shù)據(jù)類型說明運算符
特殊功能寄存器聲明特殊功能寄存器聲明存儲類型說明數(shù)據(jù)類型說明程序語句數(shù)據(jù)類型說明數(shù)據(jù)類型說明數(shù)據(jù)類型說明寄存器組定義數(shù)據(jù)類型說明數(shù)據(jù)類型說明程序語句存儲器類型說明
說明程序存儲器
在程序執(zhí)行過程中不可修改的變量值退出本次循環(huán),轉(zhuǎn)向下一次循環(huán)直接尋址的內(nèi)部數(shù)據(jù)存儲器Switch語句中的失敗選擇項構(gòu)成do...while循環(huán)結(jié)構(gòu)雙精度浮點數(shù)構(gòu)成if...else選擇結(jié)構(gòu)枚舉
在其他程序模塊中聲明了的全局變量單精度浮點型構(gòu)成for循環(huán)結(jié)構(gòu)構(gòu)成goto循環(huán)結(jié)構(gòu)間接尋址的內(nèi)部數(shù)據(jù)存儲器構(gòu)成do...while循環(huán)結(jié)構(gòu)基本整數(shù)型定義一個中斷函數(shù)長整數(shù)型
分頁尋址的內(nèi)部數(shù)據(jù)存儲器使用CPU內(nèi)部的寄存器變量定義一個再入函數(shù)函數(shù)返回
聲明一個可位尋址的變量短整數(shù)型
有符號數(shù),二進(jìn)制的最高位位符號位計算表達(dá)式或數(shù)據(jù)類型的字節(jié)數(shù)聲明一個特殊功能寄存器聲明一個16位的特殊功能寄存器靜態(tài)變量結(jié)構(gòu)類型數(shù)據(jù)構(gòu)成switch選擇語句重新進(jìn)行數(shù)據(jù)類型定義聯(lián)合數(shù)據(jù)類型無符號數(shù)據(jù)
定義芯片的工作寄存器無符號數(shù)據(jù)
聲明該變量在程序執(zhí)行中可被隱含改變構(gòu)成while和do...while循環(huán)語句外部數(shù)據(jù)存儲器
4.C51的常量和變量1)常量
常量就是在程序運行過程中,其值不能改變的數(shù)據(jù),包括整型常量、字符常量、字符串常量、實數(shù)常量、位標(biāo)量等。
(1)整型常量:可以用二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制表示。
無符號整數(shù)常量在一個數(shù)字后面加上“u”或“U”表示。長整數(shù)型常量在后面加上“l(fā)”或“L”,無符號長整數(shù)型常量在數(shù)字后面加上“ul”或“UL”,實數(shù)型常量在后面加“f”或“F”。
(2)字符常量:單引號內(nèi)的字符,不可以顯示的控制字符在前加“\”組成專用轉(zhuǎn)義字符。(3)字符串常量:雙引號內(nèi)的字符,當(dāng)雙引號內(nèi)沒有字符時是空字符串。在C語言中,字符串常量是作為字符類型數(shù)組來處理的,在存儲字符串時,系統(tǒng)在字符串尾部加上轉(zhuǎn)義字符“\o”,作為該字符串的結(jié)束符。
(4)實數(shù)常量:有十進(jìn)制和指數(shù)兩種表示形式。指數(shù)表示的實數(shù)為“[±]數(shù)字[.數(shù)字]e[±]數(shù)字”,[]中的內(nèi)容為可選項
(5)位標(biāo)量:位標(biāo)量的值是一個二進(jìn)制數(shù)。2)變量
變量就是在程序運行過程中,其值可以被改變的數(shù)據(jù)。必須先用標(biāo)識符作為變量名,并指出所用的數(shù)據(jù)類型和存儲模式,這樣編譯系統(tǒng)才能為變量分配相應(yīng)的存儲空間。定義變量的格式:[<存儲模式>]<類型定義>[存儲器類型]<標(biāo)識符>;類型定義和標(biāo)識符是必要的。存儲模式有四種,自動(auto)、外部(extern)、靜態(tài)(static)和寄存器(register),默認(rèn)類型為自動(auto)。
表3-3C51存儲類型與MCS-51單片機存儲空間的對應(yīng)關(guān)系及其大小存儲類型databdataidatapdataxdatacode
與存儲空間的對應(yīng)關(guān)系
直接尋址片內(nèi)數(shù)據(jù)存儲區(qū),訪問速度快(128B)
可位尋址片內(nèi)數(shù)據(jù)存儲區(qū),允許位與字節(jié)混合訪問(16B)
間接尋址片內(nèi)數(shù)據(jù)存儲區(qū),可訪問片內(nèi)全部RAM地址空間(256B)
分頁尋址片外數(shù)據(jù)存儲區(qū),由MOVX@Ri訪問
尋址片外數(shù)據(jù)存儲區(qū)(64KB),由MOVX@DPTR訪問
尋址代碼存儲區(qū)(64KB),由MOVC@DPTR訪問
長度/bit88881616
長度/byte111122
存儲范圍0-2550-2550-2550-2550-655350-65535
如果在變量定義時省略了存儲類型標(biāo)識符,則編譯器會自動選擇默認(rèn)的存儲類型。默認(rèn)的存儲類型進(jìn)一步由SMALL、COMPACT、和LARGE存儲模式指令限制。
存儲模式?jīng)Q定了變量的默認(rèn)存儲類型、參數(shù)傳遞區(qū)和無明確存儲類型說明變量的存儲類型。在SMALL模式下,參數(shù)傳遞是在片內(nèi)數(shù)據(jù)存儲區(qū)中完成的。
51單片機C語言程序設(shè)計經(jīng)典案例
COMPACT和LARGE模式允許參數(shù)在外部存儲器中傳遞。表3-4存儲模式及說明存儲模式SMALL
說明
參數(shù)及局部變量放入可直接尋址的片內(nèi)存儲器(最大為128B,默認(rèn)存儲類型為data),因此訪問十分方便。另外,所有對象(包括棧)都必須嵌入片內(nèi)RAM,棧長由函數(shù)的嵌套導(dǎo)數(shù)決定。
參數(shù)及局部變量放入分頁片外存儲區(qū)(最大為256B,默認(rèn)的存儲類型為pdata),通過寄存器R0和R1(@R0、@R1)間接尋址,棧空間位于MCS-51系統(tǒng)內(nèi)部數(shù)據(jù)存儲區(qū)中。
參數(shù)及局部變量直接放入片外數(shù)據(jù)存儲區(qū)(最大為64KB,默認(rèn)存儲類型為xdata),使用數(shù)據(jù)指針DPTR來進(jìn)行尋址。用此數(shù)據(jù)指針進(jìn)行訪問效率較低,尤其是對兩個或多個字節(jié)的變量,這種數(shù)據(jù)類型的訪問機制直接影響代碼的長度。另一不方便之處在于這種數(shù)據(jù)指針不能對稱操作。
COMPACT
LARGE
任務(wù)2運算符和表達(dá)式表3-5C語言常用的運算符
【51單片機C語言程序設(shè)計經(jīng)典案例】相關(guān)文章:
案例驅(qū)動在C語言程序設(shè)計教學(xué)中的探索實踐04-28
《C語言程序設(shè)計》課程教學(xué)探索04-29
單片機C語言教學(xué)探索04-28
初學(xué)C語言程序設(shè)計的基本方法和技巧04-28
獨立學(xué)院C語言程序設(shè)計教學(xué)改革與實踐04-29
《C#語言程序設(shè)計》課程教學(xué)改革與實踐05-01
關(guān)于C語言程序設(shè)計教學(xué)的一些思考04-29
在單片機C語言編程中的心得體會04-25