<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 設(shè)計(jì)應(yīng)用 > C8051F020與80C51單片機(jī)的異同點(diǎn)

          C8051F020與80C51單片機(jī)的異同點(diǎn)

          ——
          作者:孫立香 趙不賄 劉星橋 時(shí)間:2007-06-08 來(lái)源:世界電子元器件 收藏
          1 引言

          系列及其衍生產(chǎn)品在我國(guó)乃至全世界范圍獲得了非常廣泛的應(yīng)用。領(lǐng)域的大部分工作人員都熟悉,各大專(zhuān)院校都采用系列單片機(jī)作為教學(xué)模型。隨著單片機(jī)的不斷發(fā)展,市場(chǎng)上出現(xiàn)了很多高速、高性能的新型單片機(jī),基于標(biāo)準(zhǔn)8051內(nèi)核的單片機(jī)正面臨著退出市場(chǎng)的境地。為此,一些半導(dǎo)體公司開(kāi)始對(duì)傳統(tǒng)8051內(nèi)核進(jìn)行大的構(gòu)造,主要是提高速度和增加片內(nèi)模擬和數(shù)字外設(shè),以期大幅度提高單片機(jī)的整體性能。其中美國(guó)Cygnal公司推出的C8051F系列單片機(jī)把80C51系列單片機(jī)從MCU時(shí)代推向SoC時(shí)代,使得以8051為內(nèi)核的單片機(jī)上了一個(gè)新的臺(tái)階。

          C8051F系列單片機(jī)是完全集成的混合信號(hào)系統(tǒng)級(jí)芯片,具有與8051兼容的CIP-51微控制器內(nèi)核,采用流水線結(jié)構(gòu),單周期指令運(yùn)行速度是8051的12倍,全指令集運(yùn)行速度是原來(lái)的9.5倍。熟悉NCS-51系列單片機(jī)的工程技術(shù)人員可以很容易地掌握C8051F的應(yīng)用技術(shù)并能進(jìn)行軟件的移植。但是不能將8051的程序完全照搬的應(yīng)用于C8051F單片機(jī)中,這是因?yàn)閮烧叩膬?nèi)部資源存在較大的差異,必須經(jīng)過(guò)加工才能 予以使用。其中以其功能較全面,應(yīng)用較廣泛的特點(diǎn)成為C8051F的代表性產(chǎn)品,其性能價(jià)格比在目前應(yīng)用領(lǐng)域也極具競(jìng)爭(zhēng)力。的內(nèi)部電路包括CIP-51微控制器內(nèi)核及RAM、ROM、I/O口、定時(shí)/計(jì)數(shù)器、ADC、DAC、PCA、SPI和SMBus等部件,即把計(jì)算機(jī)的基本組成單元以及模擬和數(shù)字外設(shè)集成在一個(gè)芯片上,構(gòu)成一個(gè)完整的片上系統(tǒng)(SoC)。本文將介紹單片機(jī)與80C51的異同點(diǎn)(主要是不同之處)及初學(xué)者編程時(shí)應(yīng)該注意的問(wèn)題,并給出經(jīng)過(guò)Cygnal開(kāi)發(fā)工具IDE調(diào)試環(huán)境軟件驗(yàn)證的源程序。

          2 相同點(diǎn)

          C8051F020單片機(jī)與80C51系列單片機(jī)的指令系統(tǒng)完全一樣。掌握80C51單片機(jī)的人員可以很容易地接受C8051F020的應(yīng)用技術(shù)并能完成相應(yīng)軟件的移植。

          3 主要硬件不同點(diǎn)

          3.1 運(yùn)行速度

          C8051F020的指令運(yùn)行速度是一般80C51系列單片機(jī)的10倍以上。因?yàn)槠銫IP-51中采用了流水線處理結(jié)構(gòu),已經(jīng)沒(méi)有了機(jī)器周期時(shí)序,指令執(zhí)行的最小時(shí)序單位為系統(tǒng)時(shí)鐘,大部分指令只要1~2個(gè)系統(tǒng)周期即可完成。又由于其時(shí)鐘系統(tǒng)比80C51的更加完善,有多個(gè)時(shí)鐘源,且時(shí)鐘源可編程,時(shí)鐘頻率范圍為0~25 MHz,當(dāng)CIP-5l工作在最大系統(tǒng)時(shí)鐘頻率25 MHz時(shí),它的峰值速度可以達(dá)到25 MI/s,C8051F020已進(jìn)入了8位高速單片機(jī)行列。

          3.2 I/O端口的配置方式

          C8051F020擁有8個(gè)8位的I/O端口,大量減少了外部連線和器件擴(kuò)展,有利于提高可靠性和抗干擾能力。其中低4個(gè)I/O端口除可作為一般的通用I/O端口外,還可作為其他功能模塊的輸入或輸出引腳,它是通過(guò)交叉開(kāi)關(guān)配置寄存器XBR0、XBR1、XBR2(各位名稱(chēng)及格式如表1所示)選擇并控制的,它們控制優(yōu)先權(quán)譯碼選擇開(kāi)關(guān)電路如圖1所示,可將片內(nèi)的計(jì)數(shù)器/定時(shí)器、串行總線、硬件中斷、比較器輸出及其它的數(shù)字信號(hào)配置為在端口I/O引腳出現(xiàn),這樣用戶可以根據(jù)自己的特定需要選擇所需的數(shù)字資源和通用I/O口。數(shù)字交叉開(kāi)關(guān)是一個(gè)比較大的數(shù)字開(kāi)關(guān)網(wǎng)路,這在所有80C51系列單片機(jī)上是一個(gè)空白。另外P1MDIN用于選擇P1的輸入方式是模擬輸入還是數(shù)字輸入,復(fù)位值為11111111B,即默認(rèn)為數(shù)字輸入方式。而80C51單片機(jī)的I/O引腳是固定分配的,即占用引腳多,配置又不夠靈活。

          控制優(yōu)先權(quán)譯碼選擇開(kāi)關(guān)電路

          C8051F020通過(guò)優(yōu)先權(quán)交叉開(kāi)關(guān)譯碼器(如圖2所示)控制數(shù)字開(kāi)關(guān)網(wǎng)路,端口引腳的分配順序是從P0.0開(kāi)始一直到P3.7。當(dāng)交叉開(kāi)關(guān)配置寄存器XBR0、XBR1和XBR2中外設(shè)的對(duì)應(yīng)使能位被設(shè)置為邏輯“1”時(shí),交叉開(kāi)關(guān)將端口引腳分配給外設(shè),例如,如果UARTOEN位(XBR0.2)被設(shè)置為邏輯“1”,則TX0和RX0引腳將分別被分配到P0.0和P0.1。因?yàn)閁ART0有最高優(yōu)先權(quán),所以當(dāng)UARTOEN位被設(shè)置為邏輯“1”時(shí)其引腳將總是被分配到P0.0和P0.1。未被設(shè)置的交叉開(kāi)關(guān)分配端口可作為通用I/O口。注意:當(dāng)選擇了串行通信外設(shè)(即SMBus、SPI或UART)時(shí),交叉開(kāi)關(guān)將為所有相關(guān)功能分配引腳。例如,不能為UART0功能只分配TX0引腳而不分配RX0引腳。交叉開(kāi)關(guān)寄存器被正確配置后,通過(guò)將XBARE(XBR2.6)設(shè)置為邏輯“1”來(lái)使能交叉開(kāi)關(guān)。

          交叉開(kāi)關(guān)配置寄存器

          優(yōu)先權(quán)交叉開(kāi)關(guān)譯碼器

          3.3 內(nèi)部功能

          C8051F020內(nèi)部帶有數(shù)據(jù)采集所需的ADC和DAC,其中ADC有兩個(gè),一個(gè)是8路12位逐次逼近型ADC,可編程轉(zhuǎn)換速率,最大為100 kS/s.可通過(guò)多通道選擇器配置為單端輸入或差分輸入。內(nèi)有可編程增益放大器PGA用于將輸入的信號(hào)放大,提高A/D的轉(zhuǎn)換精度??删幊淘鲆鏋椋?.5、1、2、4、8或16,復(fù)位時(shí)默認(rèn)值為1。另一個(gè)是8路8位ADC,可編程轉(zhuǎn)換速率最大為500 kS/s,其可編程放大增益為0.5、1、2、4,復(fù)位時(shí)默認(rèn)值為0.5。有2個(gè)12位的DAC,用于將12位的數(shù)字量轉(zhuǎn)換為電壓量,可產(chǎn)生連續(xù)變化的波形,兩路信號(hào)可同步輸出。

          3.4 外部接口

          C8051F020外設(shè)還增添了三個(gè)串行口。可同時(shí)與外界進(jìn)行串行數(shù)據(jù)通信,SMBus兼容于I2C串行擴(kuò)展總線;SPI串行擴(kuò)展接口;兩個(gè)增強(qiáng)型UART串口。C8051F020具有基于JTAG接口的在系統(tǒng)調(diào)試功能,片內(nèi)的調(diào)試電路通過(guò)JTAG接口可提供高速、方便的在系統(tǒng)調(diào)試。

          4 軟件編程舉例

          鑒于C8051F020在硬件方面與80C51的不同之處,故它們?cè)谲浖幊虝r(shí)也會(huì)有所區(qū)別,這種區(qū)別主要體現(xiàn)在初始化程序上。該程序是在Cygnal的開(kāi)發(fā)工具即IDE調(diào)試環(huán)境中予以驗(yàn)證的。

          例:利用定時(shí)器T0定時(shí),在P1.2端輸出一方波,方波周期為20 ms,已知晶振頻率為12 MHz,采用中斷的方式實(shí)現(xiàn)。

          采用C8051F020單片機(jī)實(shí)現(xiàn)的程序如下:

          程序

          程序

          從上面的程序中可以看出:在C8051F020軟件編程中須首先設(shè)置看門(mén)狗定時(shí)器的工作狀態(tài),其次,要由內(nèi)部振蕩器 控制寄存器OSCICN設(shè)置采用內(nèi)部時(shí)鐘還是外部時(shí)鐘工作,若選擇外部時(shí)鐘可通過(guò)外部振蕩器控制寄存器OSCXCN來(lái)選擇適當(dāng)?shù)念l率,本題目采用內(nèi)部時(shí)鐘,并通過(guò)時(shí)鐘控制寄存器CKCON選擇使用系統(tǒng)時(shí)鐘的12分頻。再次,若選擇的I/O口是低四個(gè)端口P0~P3作為工作口,需要設(shè)定寄存器XBR0、XBR1、XBR2(復(fù)位值為0),在本設(shè)計(jì)中未用到數(shù)字資源,故XBR0、XBR1的值為復(fù)位值,只需設(shè)定XBR2的值為40H允許功能選擇開(kāi)關(guān)即可,若本設(shè)計(jì)中的P1.2換為P4.2,則無(wú)需設(shè)定寄存器XBR0、XBR1、XBR2,因?yàn)楦叨丝赑4~P7與交叉開(kāi)關(guān)無(wú)關(guān)。最后還要選擇所用I/O口的輸出方式,P0、P1、P2、P3口分別由POMDOUT、P1MD-OUT、P2MDOUT、P3MDOUT端口輸出方式寄存器來(lái)選擇,寄存器中的某位置0為漏極開(kāi)路輸出方式,置1則為推拉輸出方式。另外,由于C8051F020的專(zhuān)用寄存器比一般51單片機(jī)多,而8051指令不能識(shí)別它增加的專(zhuān)用寄存器,公司提供了所有的專(zhuān)用寄存器及相應(yīng)位的地址定義文件,用戶只需加一條$include(C8051F020.inc)指令即可。

          該程序只需將與上面提到的幾點(diǎn)相關(guān)的指令去掉即為80C51的源程序(程序中已標(biāo)示)。當(dāng)然這僅僅是一個(gè)簡(jiǎn)單的例子,并不能完全說(shuō)明所有不同之處,但可說(shuō)明它們典型的不同點(diǎn)。

          5 結(jié)束語(yǔ)

          C8051F020與80C51單片機(jī)的指令系統(tǒng)完全兼容,給用戶使用帶來(lái)了極大的方便,但它們的硬件結(jié)構(gòu)不同,因此在使用上有所區(qū)別,只有了解了它們之間的異同點(diǎn),才能更好地對(duì)C8051F020進(jìn)行開(kāi)發(fā)利用,充分發(fā)揮它的先進(jìn)功效。



          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();