單片機(jī)編程軟件很簡單(18),Keil單片機(jī)編程軟件對ANSIC的擴(kuò)展學(xué)習(xí)


原標(biāo)題:單片機(jī)21ic編程軟件很簡單(18),Keil單片機(jī)編程軟件對ANSIC的擴(kuò)展學(xué)習(xí)
在單片機(jī)編程中,Keil單片機(jī)編程軟件(特別是Keil C51)對標(biāo)準(zhǔn)ANSI C進(jìn)行了一系列擴(kuò)展,以適應(yīng)8051系列單片機(jī)的硬件特性。以下是對Keil C51對ANSI C擴(kuò)展的詳細(xì)學(xué)習(xí):
一、Keil C51擴(kuò)展關(guān)鍵字
Keil C51在ANSI C的基礎(chǔ)上增加了一些特定的關(guān)鍵字,以支持8051單片機(jī)的特殊功能。例如,C51 V4.0版本有以下擴(kuò)展關(guān)鍵字:
_at_
:用于指定變量的絕對地址。idata
、bdata
、xdata
、pdata
:用于聲明變量的存儲(chǔ)類型,分別對應(yīng)不同的內(nèi)存區(qū)域。sfr
、sfr16
:用于聲明特殊功能寄存器(SFR),分別用于字節(jié)尋址和字尋址。sbit
:用于聲明可位尋址的特殊功能寄存器的位。interrupt
:用于聲明中斷服務(wù)函數(shù)。using
:用于指定中斷服務(wù)函數(shù)使用的寄存器組。reentrant
:用于聲明可重入函數(shù)。
二、內(nèi)存區(qū)域與存儲(chǔ)類型
Keil C51支持多種內(nèi)存區(qū)域,每種內(nèi)存區(qū)域都有特定的用途和訪問方式。通過不同的存儲(chǔ)類型關(guān)鍵字,可以指定變量存儲(chǔ)在不同的內(nèi)存區(qū)域中。
程序存儲(chǔ)器(Code Area):用于存放程序代碼,最大可達(dá)64KB。
內(nèi)部數(shù)據(jù)存儲(chǔ)器(Internal Data Memory):
data
:直接尋址區(qū),為內(nèi)部RAM的低128字節(jié)(00H~7FH)。idata
:間接尋址區(qū),包括整個(gè)內(nèi)部RAM區(qū)(00H~FFH)。bdata
:可位尋址區(qū),位于20H~2FH。外部數(shù)據(jù)存儲(chǔ)器(External Data Memory):
xdata
:可指定多達(dá)64KB的外部直接尋址區(qū),地址范圍0000H~0FFFFH。pdata
:能訪問1頁(256Bytes)的外部RAM,主要用于緊湊模式(Compact Model)。特殊功能寄存器(SFR Memory):提供128Bytes的SFR尋址區(qū),可位尋址、字節(jié)尋址或字尋址。
三、變量類型與數(shù)據(jù)類型
Keil C51提供了一些擴(kuò)展的數(shù)據(jù)類型,以更好地支持8051單片機(jī)的硬件操作。
bit型變量:用于表示位變量,值為0或1,通常存儲(chǔ)在內(nèi)部RAM的20H~2FH區(qū)域。
sbit型變量:從字節(jié)中定義的位變量,用于訪問特殊功能寄存器的位。
sfr和sfr16型變量:用于聲明特殊功能寄存器,分別用于字節(jié)尋址和字尋址。
此外,Keil C51還支持ANSI C中的所有標(biāo)準(zhǔn)數(shù)據(jù)類型,如char
、enum
、short
、int
、long
、float
等。
四、指針
Keil C51支持一般指針(Generic Pointer)和存儲(chǔ)器指針(Memory-Specific Pointer)。
一般指針:聲明和使用方式與標(biāo)準(zhǔn)C相同,但可以指定指針的存儲(chǔ)類型。例如,
long *state;
為一個(gè)指向long
型整數(shù)的指針,而state
本身則依存儲(chǔ)模式存放。存儲(chǔ)器指針:在聲明時(shí)即指定了存儲(chǔ)類型,如
char data *str;
表示str
指向data
區(qū)中的char
型數(shù)據(jù)。這種指針存放時(shí)只需一個(gè)字節(jié)或兩個(gè)字節(jié)(根據(jù)存儲(chǔ)類型而定),因?yàn)橹恍璐娣牌屏俊?/span>
五、函數(shù)屬性
Keil C51對ANSI C的函數(shù)聲明進(jìn)行了擴(kuò)展,以支持中斷服務(wù)函數(shù)等特殊功能。
中斷函數(shù)聲明:使用
interrupt
關(guān)鍵字聲明中斷服務(wù)函數(shù),并指定中斷號(hào)。例如,void serial_ISR() interrupt 4;
表示聲明一個(gè)中斷號(hào)為4的中斷服務(wù)函數(shù)。指定存儲(chǔ)模式:使用
small
、compact
、large
等關(guān)鍵字指定函數(shù)的存儲(chǔ)模式,以控制函數(shù)內(nèi)部變量的存儲(chǔ)區(qū)域。選通用存儲(chǔ)工作區(qū):使用
using
關(guān)鍵字指定中斷服務(wù)函數(shù)使用的寄存器組。
六、其他擴(kuò)展
除了上述擴(kuò)展外,Keil C51還支持一些其他特性,如絕對地址訪問、內(nèi)聯(lián)匯編等。這些特性為開發(fā)者提供了更多的靈活性和控制權(quán),以便更好地適應(yīng)不同的硬件需求和應(yīng)用場景。
學(xué)習(xí)建議
閱讀官方文檔:Keil官方提供了詳細(xì)的文檔和手冊,是學(xué)習(xí)Keil C51擴(kuò)展特性的最佳途徑。
實(shí)踐操作:通過編寫實(shí)際的單片機(jī)程序,應(yīng)用所學(xué)的擴(kuò)展特性,加深對Keil C51的理解。
參考示例代碼:Keil軟件通常包含大量的示例代碼,這些代碼展示了如何使用各種擴(kuò)展特性。通過閱讀和分析示例代碼,可以更快地掌握Keil C51的使用方法。
通過深入學(xué)習(xí)和實(shí)踐,您可以充分利用Keil C51對ANSI C的擴(kuò)展特性,開發(fā)出更高效、更可靠的單片機(jī)程序。
責(zé)任編輯:David
【免責(zé)聲明】
1、本文內(nèi)容、數(shù)據(jù)、圖表等來源于網(wǎng)絡(luò)引用或其他公開資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對本文的引用持有異議,請聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時(shí)處理。
2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。
3、本文內(nèi)容僅代表作者觀點(diǎn),拍明芯城不對內(nèi)容的準(zhǔn)確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨(dú)立判斷做出的,請讀者明確相關(guān)結(jié)果。
4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。
拍明芯城擁有對此聲明的最終解釋權(quán)。