單片機編程軟件很簡單(18),Keil單片機編程軟件對ANSIC的擴展學習


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