霍彩虹,徐芳萍
(河南 新鄉(xiāng) 760廠,河南 新鄉(xiāng) 453009)
C8051F[1]系列單片機是由 Silicon Laboratory 公司生產(chǎn)的具有CIP-51內(nèi)核高性能微控制器。其CIP-51與MCS-51指令集完全兼容,具有標(biāo)準(zhǔn)的8052外設(shè)部件。CIP-51采用流水線結(jié)構(gòu),與標(biāo)準(zhǔn)的8051結(jié)構(gòu)相比指令執(zhí)行速度有很大的提高,具有JTAG接口,可在系統(tǒng)編程,程序調(diào)試與下載都非常方便。另外,C8051F是一種混合信號微控制器,片上不但具有SPI、I2C等接口,還集成了ADC和DAC,使用起來更加簡便。這些優(yōu)越的性能使C8051F系列單片機一經(jīng)推出便迅速在國內(nèi)得到普及。C8051F020[2]是其中最常用的一種,已被廣泛應(yīng)用到通信、電子及工業(yè)監(jiān)控等領(lǐng)域。但是隨著這些電子產(chǎn)品的不斷智能化、復(fù)雜化,程序代碼長度和數(shù)據(jù)空間越來越大,而C8051F020的存儲空間只有64KB。如果產(chǎn)品需要升級增加新功能,面臨的最大問題之一,則是64KB存儲空間滿足不了程序使用。
對于一個正在被使用的產(chǎn)品來說,通過改動硬件實現(xiàn)升級的方式顯然是不太合適的。那么能否從C8051F系列單片機中找到一款存儲空間大、引腳完全兼容的器件來代替C8051F020呢?C8051F120正是解決這一難題的理想選擇。
C8051F120[3]是一款與 C8051F020 引腳完全兼容,F(xiàn)LASH存儲空間達(dá)到128KB,片上外部RAM達(dá)到8KB的單片機,其性能比 C8051F020更優(yōu)越。C8051F120與C8051F020的主要區(qū)別如下:
1)C8051F120與C8051F020雖然引腳兼容但代碼卻不同,CIP-51實現(xiàn)了 SFR分頁機制,C8051F120使用5個SFR頁:0、1、2、3和F。使用特殊功能寄存器頁選擇寄存器SFRPAGE來選擇SFR頁。例如要訪問異步串口0(UART0)的控制寄存器SCON0,首先需對SFRPAGE進(jìn)行設(shè)置,使其位于第0頁,即SFRPAGE=0,然后才能對SCON0進(jìn)行訪問。
2)C8051F120內(nèi)部有一個精確的24.5MHz的內(nèi)部振蕩器,同時內(nèi)部還有1個鎖相環(huán)PLL,通過使用這個PLL,可使C8051F120工作頻率高達(dá)100MHz。
3)C8051F120的FLASH存儲器采用代碼分頁(Code Banking),共4頁,每頁32KB。其FLASH分組結(jié)構(gòu)如圖1所示,在執(zhí)行FLASH寫、讀、擦除操作時,PSBANK寄存器(見表1)中的COBANK位決定三個高地址FLASH塊中的哪一個被映射到地址范圍0x08000~0x0FFFF。
COBANK:常量操作存儲塊選擇位,分別指向BANK 0-3;IFBANK:取指操作存儲塊選擇位,分別指向BANK 0-3
4)C8051F120的外設(shè)在結(jié)構(gòu)上與C8051F020也有部分區(qū)別,如UART0的波特率設(shè)置,通過對寄存器SSTA0的配置可選擇定時器1、2、3或4作為波特率發(fā)生源,而URAT1具有增強型的波特率發(fā)生器,由定時器1作為其波特率發(fā)生源,因此在對原C8051F020的程序進(jìn)行更改時應(yīng)特別注意這些細(xì)節(jié)。
Keil C51[5]工具是目前各種51系列單片機最通用的編譯工具軟件,它支持代碼分頁,可以管理一個公共的區(qū)域和32個代碼頁,每個最大可達(dá)64KB,從而具備共2MB的代碼切換空間。如果沒有相應(yīng)的代碼分頁設(shè)置,Keil C51將無法編輯超過64KB地址空間的程序。一般情況下,用戶運行的程序都在FLASH的0X0000~0XFFFF地址空間中。Keil C5l代碼分頁使用的是Bank Switching技術(shù)。使用Bank Switching技術(shù)可生成代碼長度和數(shù)據(jù)空間大于64 KB的目標(biāo)程序,它的使用彌補了C8051F系列單片機在地址空間方面的不足,拓展了它的應(yīng)用范圍。
具體實現(xiàn)Bank Switching技術(shù)的是KeilC#5l中的分組連接定位器BL5l。Keil C5l語言源程序經(jīng)過C5l編譯器編譯后,生成浮動地址的目標(biāo)代碼文件。這種浮動地址的目標(biāo)代碼必須經(jīng)過連接定位器BL5l的連接和定位,生成具有絕對地址的目標(biāo)代碼,才能寫入程序存儲器正常運行。BL51支持分組連接定位,允許生成代碼大于64 KB的目標(biāo)程序,可以在具有適當(dāng)硬件擴展邏輯的系統(tǒng)中進(jìn)行代碼組之間的切換,以達(dá)到正常運行的目的。目前版本的BL5l可以管理最多64個代碼組,每個代碼組最大為64KB。
C8051F120的FLASH存儲空間為128K,采用代碼分頁,共分為4頁,每頁32KB,把主程序放在公共代碼區(qū)(Common Area),復(fù)位和中斷向量、代碼常數(shù)、C51中斷函數(shù)、組切跳轉(zhuǎn)表、庫函數(shù)這些代碼必須安排在公共代碼區(qū)域。用C8051F120代替C8051F020只需對程序進(jìn)行修改,C8051F120采用了代碼分頁,因此必須將原來的程序進(jìn)行重新劃分,合理安排存儲空間。由于筆者所設(shè)計的程序較為復(fù)雜,不易舉例說明,下面給出一個結(jié)構(gòu)簡單的示例作說明,利用Keil C51進(jìn)行程序編譯的具體操作步驟如下[4]:
1)在菜單 Project選擇中選擇Option for Target“Target”選擇項,按圖2所示進(jìn)行項目配置。
圖2 Option for Target“Target”配置
由于C8051F120有4頁分區(qū),每頁32KB,所以選擇“Code Banking”,在 Banks中寫入 4,在 Bank Area中寫入地址范圍為0x80000~0xffff。
2)新建工程項目,將文件 boot.c,function1.c,function2.c和function3.c依次加入到該工程中,其中boot.c文件,作為公用代碼段程序,main函數(shù)是分別調(diào)用不同分頁區(qū)的程序,程序代碼如下:
下面,我們將這些文件指定到不同分區(qū)中。用右鍵點擊樹狀列表中的 boot.c,選中 option for file“boot.c”,在 properties的 code bank選項中,選擇 common項,如圖3所示:此項表明boot.c將被編譯到代碼的公用代碼段中,在所有分頁代碼的起始部分被復(fù)制。與此類似,我們將 function1.c,function2.c和 function3.c分別指定到bank1,bank2,和bank3中。
圖3 code bank配置
將keilc51libl51_bank.a51復(fù)制到項目目錄下,并加入項目中,在l51_bank.a51中,主要修改以下內(nèi)容[3]:
3)在菜單 Project選擇中選擇 Option for Target“Output”選擇項,按圖4所示進(jìn)行項目配置。
圖4 Option for Target“Output”配置圖
4)編譯該項目,keil c編譯器將生成1個project.M51文件,檢查該文件可驗證各個文件的BANK分配情況。同時,編譯后會產(chǎn)生 project.H01、project.H02和project.H03這3個hex文件,通過下載器可將此3個文件按照指定的代碼空間分別下載到C8051F120的各個BANK空間段中。
采用Keil C51的代碼分頁技術(shù)——Bank Switching技術(shù),可以有效地解決大容量程序代碼和數(shù)據(jù)在C8051F120中的存儲問題。當(dāng)C8051F020系統(tǒng)中的Flash存儲空間不能滿足需要時,可以直接利用C8051F120來替代,這種解決方案改動簡單、技術(shù)可行,是C8051F020升級使用最為有效的方法之一。同時Keil C51的代碼分頁技術(shù)也使得C8051F系列單片機的應(yīng)用領(lǐng)域更為廣闊。
[1]潘琢金,孫德龍,夏秀峰.C8051F單片機應(yīng)用解析[M].北京:北京航空航天大學(xué)出版社,2002.
[2]Silicon Laboratories.C8051F020/1/2/3 Mixed - Signal ISP FLASH MCU Family[EB/OL].http://www.xhl.com.cn/sjsc/sjsc/sjscdetail:asp?sid=21,2005,11.
[3]Silicon Laboratories.C8051F120/1/2/3 High - Speed Mixed - Signal ISP FLASH MCU[EB/OL].http://www.xhl.com.cn/sjsc/sjsc/sjscdetail:asp?sid=33,2005,11.
[4]Silicon Laboratories.CODE BANKING USING THE KEIL 8051 TOOLS[EB/OL].http://www.xhl.com.cn/xhl/downfile/e_AN30.pdf,2005.11.
[5]Keil Software.Getting Started with μVision2[EB/OL].2001.