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