1、辯證地看待51內(nèi)核單片機(jī)
要回答這個(gè)問(wèn)題,首先需要來(lái)看一下傳統(tǒng)的51單片機(jī)。在有些文章或者書本中,對(duì)于51單片機(jī)的態(tài)度是全面否定的,一旦聽到某人要學(xué)習(xí)或者使用51單片機(jī),則有種“群起而笑之”之勢(shì),覺(jué)得其主頻低,外設(shè)少,技術(shù)老,然后以這些理由勸退要去學(xué)習(xí)51單片機(jī)的同學(xué)。其實(shí),這個(gè)態(tài)度是非常武斷的,必須被批判,雖然現(xiàn)在32位的單片機(jī)遍地都是,但是對(duì)于一些成本為首位的產(chǎn)品,8位機(jī)無(wú)疑還是有很大的價(jià)格優(yōu)勢(shì)的。而市面上最多的8位單片機(jī)產(chǎn)品,內(nèi)核架構(gòu)最普遍的還是51。批判51單片機(jī)不行的人,出發(fā)點(diǎn)無(wú)疑就是外設(shè)少,外部晶振8分頻->12分頻(筆誤)的硬傷這兩點(diǎn),然而這兩點(diǎn)只不過(guò)是它們印象中的十幾年前的51單片機(jī)產(chǎn)品。時(shí)代在發(fā)展,51單片機(jī)也在發(fā)展,為了區(qū)別那些全盤否定51單片機(jī)的人口中的“51單片機(jī)”,不斷發(fā)展的51單片機(jī)一般被稱為“增強(qiáng)型51單片機(jī)”。
接下來(lái),我們用辯證的眼光,再來(lái)審視一下現(xiàn)在的“增強(qiáng)型51單片機(jī)”。
“增強(qiáng)型51單片機(jī)”保留了51單片機(jī)開發(fā)簡(jiǎn)單,內(nèi)部結(jié)構(gòu)簡(jiǎn)單,價(jià)格低廉等優(yōu)點(diǎn),彌補(bǔ)了傳統(tǒng)51單片機(jī)的一些不足,增加了主流的外設(shè)資源。介于此,“增強(qiáng)型51單片機(jī)”的性價(jià)比到目前為止還是非常突出,新手上手程度也很簡(jiǎn)單,有點(diǎn)51單片機(jī)基礎(chǔ)的,稍微看一下數(shù)據(jù)手冊(cè)就可以直接使用。
但是,無(wú)論利用何種形式去增強(qiáng)51單片機(jī),51單片機(jī)結(jié)構(gòu)的一些致命硬傷是永遠(yuǎn)存在的,比如用于操作特殊功能寄存器的尋址,在C語(yǔ)言開發(fā)中只能利用C51獨(dú)有的“sfr”關(guān)鍵詞去定義特殊功能寄存器,而“sfr”又不是標(biāo)準(zhǔn)C中的關(guān)鍵詞,因此51單片機(jī)的程序有一部分是無(wú)法直接移植到其他平臺(tái)上去的。中斷關(guān)鍵詞“interrupt”也是一樣。
辯證地看待其優(yōu)缺點(diǎn),“增強(qiáng)型51單片機(jī)”非常值得花時(shí)間學(xué)一學(xué)。
2、發(fā)展的眼光看51單片機(jī)
我們所說(shuō)的51單片機(jī),用現(xiàn)在比較潮流的說(shuō)法應(yīng)該是“MCS51內(nèi)核”的單片機(jī)。如果這么分類的話,51單片機(jī)最早的型號(hào)其實(shí)是8031單片機(jī),這個(gè)單片機(jī)的內(nèi)核和現(xiàn)在的“51內(nèi)核”基本一致,不過(guò)它是一個(gè)內(nèi)部沒(méi)有存儲(chǔ)器(ROM)的芯片,在使用的時(shí)候,需要外部擴(kuò)展存儲(chǔ)器,非常麻煩。如圖1所示。
圖1 51單片機(jī)外部存儲(chǔ)器擴(kuò)展示意
等到后來(lái)的8051單片機(jī),就開始在內(nèi)部繼承ROM,這樣可以減少由于外擴(kuò)存儲(chǔ)器帶來(lái)的煩惱,從而簡(jiǎn)化了電路結(jié)構(gòu),降低了元器件成本。
最早的51單片機(jī)存儲(chǔ)器是EPROM,因此它是需要通過(guò)特殊的編程器來(lái)燒寫程序,而程序擦除時(shí),也需要將單片機(jī)曝光在光線下半小時(shí)以上才能擦除,而這種EPROM存儲(chǔ)程序不穩(wěn)定,擦寫次數(shù)也有限,其外形如圖2所示。
圖2 EPROM的51單片機(jī)
為了解決這個(gè)問(wèn)題,F(xiàn)LASH等先進(jìn)的存儲(chǔ)器技術(shù)被用到了51單片機(jī)上,因此實(shí)現(xiàn)了可重復(fù)多次擦寫,甚至后面多種在應(yīng)用編程(IAP),在系統(tǒng)編程(ISP)方式也被用到了51單片機(jī)上,現(xiàn)在的51單片機(jī),利用一根串口線就可以實(shí)現(xiàn)程序的燒寫,非常方便。
51單片機(jī)的程序燒寫問(wèn)題被flash解決了,后面隨著應(yīng)用程序的需求,51單片機(jī)的程序開發(fā)難度越來(lái)越大,因此一些廠商推出了一些可以在線調(diào)試的芯片,在程序開發(fā)的時(shí)候,利用帶調(diào)試功能的51單片機(jī)進(jìn)行程序開發(fā),做產(chǎn)品時(shí),將調(diào)試好的程序燒錄到51單片機(jī)即可。
后來(lái)的一些增強(qiáng)型51單片機(jī),可以直接支持程序調(diào)試,如我們使用的STC8A,可以直接使用一根串口線和Keil軟件進(jìn)行程序調(diào)試。如圖3所示。
圖3 程序在線調(diào)試界面
傳統(tǒng)的51單片機(jī),內(nèi)存只有幾百個(gè)字節(jié),程序存儲(chǔ)器也小的可憐,而且其外設(shè)支持非常有限,只支持2個(gè)外部中斷,2個(gè)定時(shí)計(jì)數(shù)器,1個(gè)串口,這樣的芯片,放到現(xiàn)在來(lái)看,根本滿足不了任何應(yīng)用。盡管如IIC,SPI的外設(shè)我們都可以使用IO去模擬,但是模擬外設(shè)的程序會(huì)占據(jù)大量的代碼空間,同時(shí),為了滿足時(shí)序需求所增加的延遲,也浪費(fèi)了寶貴的CPU資源。為了解決這個(gè)問(wèn)題,目前的增強(qiáng)型51單片機(jī)外設(shè)變得琳瑯滿目,如STC8A的內(nèi)存最大可到到8K byte,程序存儲(chǔ)器最大可達(dá)到64K byte,而其外設(shè)資源有5個(gè)外部中斷,5個(gè)定時(shí)計(jì)數(shù)器,4個(gè)高速串口,4組16位的PCA模塊,8組15位增強(qiáng)型帶死區(qū)控制PWM,SPI,IIC,12位精度15通道的ADC(采樣率800K),GPIO支持準(zhǔn)雙向,強(qiáng)推挽,開漏,高阻等模式。并且內(nèi)置最高24MHz的高精度RC振蕩器。這個(gè)配置放在目前的8位機(jī)市場(chǎng),甚至是低端32位機(jī)市場(chǎng),也拿得出手。具體如圖4所示。
圖4 STC8A的配置
除此之外,51單片機(jī)特有的12分頻瓶頸也早已被彌補(bǔ),現(xiàn)在的51單片機(jī)更多的是1T的單片機(jī)。
用發(fā)展的眼光來(lái)看,增強(qiáng)型51單片機(jī)經(jīng)過(guò)國(guó)內(nèi)外四十幾年的發(fā)展早就與時(shí)俱進(jìn),滿足了市場(chǎng)需求,經(jīng)住了產(chǎn)品考驗(yàn)。在過(guò)去16位單片機(jī),如今32位單片機(jī)輪番擠壓下,還能保留自己的市場(chǎng)地位。