加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 1、寄存器位于內(nèi)部的特殊功能寄存器區(qū)
    • 2、寄存器位于內(nèi)部的擴(kuò)展的RAM中
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

增強(qiáng)型51和傳統(tǒng)51單片機(jī)外設(shè)操作的區(qū)別

2021/04/27
641
閱讀需 5 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

前面的內(nèi)容,我們從傳統(tǒng)的51單片機(jī)出發(fā),從硬件的基礎(chǔ)上,一步步衍生出了增強(qiáng)型51單片機(jī)所增強(qiáng)的地方?,F(xiàn)在我們可以清楚地了解,增強(qiáng)型51單片機(jī)對(duì)比傳統(tǒng)的51單片機(jī),增強(qiáng)的地方在于存儲(chǔ)器的擴(kuò)展。而51單片機(jī)對(duì)于片內(nèi)內(nèi)存的尋址方式和片外內(nèi)存的尋址方式有著很大的不同。因此,我們?cè)谑褂肅語言對(duì)增強(qiáng)型51單片機(jī)編程的時(shí)候,也需要按照寄存器位置的不同,采用不同的操作方式。

1、寄存器位于內(nèi)部的特殊功能寄存器區(qū)

我們之前介紹傳統(tǒng)8051單片機(jī)的時(shí)候,曾經(jīng)列出了傳統(tǒng)8051單片機(jī)已經(jīng)使用的21個(gè)特殊功能寄存器,因此擴(kuò)展外設(shè)寄存器的一個(gè)辦法就是利于剩余的特殊功能存儲(chǔ)器空間。

由于51單片機(jī)的特殊功能寄存器尋址方式只能是直接尋址,不可間接尋址,因此在C語言中無法使用指針的方式去操作這些特殊功能寄存器。因?yàn)閷?duì)于C語言指針來說,它對(duì)應(yīng)的匯編語言是一種間接尋址的方式。基于此,C51在標(biāo)準(zhǔn)的C語言基礎(chǔ)上,衍生出了一些額外的語法,如當(dāng)需要定義這些特殊功能寄存器以便于程序訪問的時(shí)候,C51加入了一個(gè)關(guān)鍵詞“sfr”,使用“sfr”關(guān)鍵詞可以將特殊功能寄存器區(qū)的地址,定義成某個(gè)變量,如“sfrP0=0x80;”,這句語句的意思就是將位于內(nèi)部RAM0x80地址上的寄存器,定義成P0,由于0x80位于特殊功能寄存器區(qū),因此這個(gè)定義是完全合法的。在后面想要對(duì)P0進(jìn)行操作,只需要在C語言中直接使用“P0”這個(gè)標(biāo)號(hào)即可。如“P0=0xff;”。

我們可以打開傳統(tǒng)的keilC51頭文件“reg51.h”,可以發(fā)現(xiàn)這個(gè)頭文件中,將傳統(tǒng)8051的所有寄存器全部定義出來了,如圖1所示。

圖1傳統(tǒng)8051單片機(jī)的特殊功能寄存器定義

對(duì)于增強(qiáng)型51單片機(jī)來說,那些被排放在特殊功能寄存器區(qū)的外設(shè)控制寄存器只能使用“sfr”關(guān)鍵詞的方式去定義,如圖2所示。

圖2增強(qiáng)型單片機(jī)增加的資源示例

除了“sfr”關(guān)鍵詞之外,KeilC51還支持使用“sbit”關(guān)鍵詞定義特殊功能寄存器的某一位,是因?yàn)?1單片機(jī)是所有單片機(jī)中唯一支持寄存器位尋址的芯片。不過為了程序方便移植到其它平臺(tái)上去,對(duì)于這些特殊的關(guān)鍵詞,還是盡可能將其限制在少量的文件中。

2、寄存器位于內(nèi)部的擴(kuò)展的RAM中

當(dāng)內(nèi)部的特殊功能寄存器區(qū)用完之后,如果想要繼續(xù)增加寄存器,那么唯一可以選擇的空間也就只有特殊功能寄存器以外的區(qū)域了。對(duì)于增強(qiáng)型51單片機(jī)來說,它的內(nèi)存空間刨去特殊功能寄存器區(qū),還可以給其使用的空間有兩個(gè),一個(gè)是內(nèi)置RAM剩余空間,還有一個(gè)是內(nèi)置的外擴(kuò)RAM。

對(duì)于STC8A8K系列的芯片來說,這些寄存器被設(shè)計(jì)到了內(nèi)置的外擴(kuò)RAM上。因此,對(duì)于這一段內(nèi)存上的寄存器,我們可以在C語言中使用常量指針的形式去定義,但是,還是需要使用C51的關(guān)鍵詞“xdata”去聲明這些地址,當(dāng)然,去優(yōu)化的“volatile”關(guān)鍵詞也不能少,如圖3所示。

圖3內(nèi)置外擴(kuò)SRAM上寄存器的定義

相關(guān)推薦

電子產(chǎn)業(yè)圖譜