大家是否思考過(guò)一個(gè)問(wèn)題,為什么現(xiàn)在的51單片機(jī)在做宣傳的時(shí)候,不外乎都是稱作為“增強(qiáng)型51單片機(jī)”?與傳統(tǒng)的51單片機(jī)相比,究竟哪些地方得到了擴(kuò)展?在回答這個(gè)問(wèn)題之前,我們先來(lái)看一下本書的主角——STC8A8K64S4A12。圖1是傳統(tǒng)51單片機(jī)和STC8A8K64S4A12增強(qiáng)型51單片機(jī)的資源對(duì)比圖。
圖1 傳統(tǒng)MCS-51單片機(jī)和增強(qiáng)型51單片機(jī)的資源對(duì)比圖
通過(guò)圖1的資源對(duì)比圖我們可以發(fā)現(xiàn),就STC8A8K64S4A12這個(gè)增強(qiáng)型51單片機(jī)而言,它相比于傳統(tǒng)的51單片機(jī)主要在以下幾個(gè)方面做了提升:
增大了數(shù)據(jù)存儲(chǔ)器SRAM;
增大了程序存儲(chǔ)器FlashROM;
擴(kuò)大了供電電壓的范圍;
增加了機(jī)器周期可配置功能,從而避免了外部晶振12分頻的問(wèn)題;
增加了一系列外設(shè)。
接著,我們具體來(lái)看,這些功能到底是如何實(shí)現(xiàn)的。
1、內(nèi)部數(shù)據(jù)存儲(chǔ)器SRAM的增強(qiáng)單片機(jī)要想擴(kuò)充資源,首先需要做的就是內(nèi)存的擴(kuò)展。因?yàn)榭刂七@些擴(kuò)展資源的寄存器,都需要內(nèi)存地址的依托。另外,傳統(tǒng)的51單片機(jī)的內(nèi)存最大只有256字節(jié),我們?cè)陂_(kāi)發(fā)程序時(shí),用戶所定義的變量都存放在這個(gè)內(nèi)存里面,其中還包括了位尋址區(qū),特殊功能寄存器區(qū)等我們無(wú)法使用的空間,早期的單片機(jī)應(yīng)用,如控制一個(gè)開(kāi)關(guān),處理一個(gè)串口命令這些功能還夠用,但是隨著我們的應(yīng)用越來(lái)越復(fù)雜,這么少的內(nèi)存真是“巧婦難為無(wú)米之炊”。因此,內(nèi)存的擴(kuò)展非常必要。增強(qiáng)型51單片機(jī)的內(nèi)存擴(kuò)展,還有一個(gè)無(wú)法改變的是傳統(tǒng)51單片的內(nèi)存排列,圖2列舉的MCS-51單片機(jī)內(nèi)部256字節(jié)RAM存儲(chǔ)分布,因?yàn)檫@個(gè)存儲(chǔ)分布是和整個(gè)51單片機(jī)架構(gòu)息息相關(guān)的,無(wú)法對(duì)其有任何撼動(dòng)。
圖2 傳統(tǒng)51單片機(jī)的內(nèi)存排列
增強(qiáng)型51單片機(jī)的內(nèi)存擴(kuò)展,和傳統(tǒng)8051單片機(jī)訪問(wèn)外部擴(kuò)展RAM的方法相同,唯一區(qū)別是,傳統(tǒng)的51單片在內(nèi)存擴(kuò)展之后,P0口和P2口將無(wú)法使用,但是增強(qiáng)型51單片機(jī)則仍然保留著這兩個(gè)口的正常功能。由于增強(qiáng)型單片機(jī)擴(kuò)展出來(lái)的內(nèi)存是屬于外部存儲(chǔ)器擴(kuò)展,因此如果你對(duì)于變量存儲(chǔ)的空間有需求,則在編程時(shí)需要顯示地指明這些變量的存儲(chǔ)位置。如果使用匯編語(yǔ)言,則需要使用“MOVX”指令。如果使用C語(yǔ)言,則需要使用“xdata”關(guān)鍵詞進(jìn)行指定,不過(guò)為了C語(yǔ)言的可移植性,對(duì)于使用這種非標(biāo)準(zhǔn)C語(yǔ)言的關(guān)鍵詞,我還是持保留態(tài)度。
2、內(nèi)部程序存儲(chǔ)器FlashROM的增強(qiáng)內(nèi)部程序存儲(chǔ)器的擴(kuò)展方式,也和傳統(tǒng)51單片機(jī)外部程序存儲(chǔ)器的擴(kuò)展方式類似。但是STC8系列封裝管腳為40及以上的單片機(jī),具有擴(kuò)展64KB外部數(shù)據(jù)存儲(chǔ)器的能力。訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器期間,WR/RD,ALE信號(hào)要有效。除此之外,在內(nèi)部程序存儲(chǔ)器被擴(kuò)大之后,一般增強(qiáng)型51單片機(jī)都會(huì)在一些特定地址的ROM和RAM之中,存入一些特定的產(chǎn)品信息。圖3是STC系列單片機(jī)中所保留的一些特定信息。
圖3 STC系列單片機(jī)中所保留的一些特定信息
3、外設(shè)如何擴(kuò)展傳統(tǒng)的51單片機(jī)用于控制外設(shè)的寄存器地址都是排放在內(nèi)部RAM的128字節(jié)特殊功能寄存器區(qū)。這段特殊功能寄存器地址區(qū),傳統(tǒng)的8051單片機(jī)已經(jīng)用了一部分用于控制其資源,傳統(tǒng)8051單片機(jī)特殊功能寄存器區(qū)的使用如圖4所示。
圖4 傳統(tǒng)8051單片機(jī)的特殊功能寄存器使用傳統(tǒng)的
51單片機(jī)一共用了21個(gè)特殊功能寄存器地址。為了保持與傳統(tǒng)8051單片機(jī)的兼容,這段特殊功能寄存器原有的資源分配不能改變。因此,使用剩余的107個(gè)特殊功能寄存器地址,是外設(shè)寄存器擴(kuò)展的一個(gè)途徑。如圖5所示,STC8數(shù)據(jù)手冊(cè)上面列出了STC8的特殊功能寄存器列表。
圖5 STC8數(shù)據(jù)手冊(cè)列出的特殊功能寄存器列表(1)
圖5 STC8數(shù)據(jù)手冊(cè)列出的特殊功能寄存器列表(續(xù)1)
圖5 STC8數(shù)據(jù)手冊(cè)列出的特殊功能寄存器列表(續(xù)2)
然而,隨著外設(shè)資源的不斷增加,越來(lái)越多的外設(shè)寄存器需要被編碼,原本128字節(jié)的特殊功能寄存器區(qū)已經(jīng)用完,想要再擴(kuò)充資源,只能將這些特殊功能寄存器存放在內(nèi)部擴(kuò)展的RAM上面。如圖6所示。
圖6 內(nèi)部數(shù)據(jù)存儲(chǔ)器排放的特殊功能寄存器
圖6 內(nèi)部數(shù)據(jù)存儲(chǔ)器排放的特殊功能寄存器(續(xù))