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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 混合信號(hào)單片機(jī)C8051F060存儲(chǔ)系統(tǒng)的編程

          混合信號(hào)單片機(jī)C8051F060存儲(chǔ)系統(tǒng)的編程

          作者: 時(shí)間:2011-02-28 來(lái)源:網(wǎng)絡(luò) 收藏
          美國(guó)Cygnal公司推出的C8051F系列,將51系列級(jí)推向了SoC時(shí)代。特別是C8051F06X系列,更是集當(dāng)前最新發(fā)展技術(shù)于一身,其功能已完全達(dá)到板卡級(jí)水平。C8051F060是高度集成的片上系統(tǒng)混合信號(hào)單片機(jī)[1],采用與8051兼容的專利內(nèi)核CIP-51,速度高達(dá)25MIPS;有多達(dá)59個(gè)數(shù)字I/O口,5個(gè)16位通用定時(shí)器,6個(gè)帶有捕捉/比較模塊的可編程定時(shí)器/計(jì)數(shù)器陣列;8路10位ADC帶可編程放大器和多路選擇器,2路1Msps的16位ADC,2路12位DAC,3個(gè)電壓比較器,片內(nèi)溫度傳感器和參考電壓源;硬件串行接口SPI,SMBus/I2C和UART可同時(shí)使用,片上CAN2.0B控制器;片上看門狗定時(shí)器,電源監(jiān)視器,2.7~3.6V的低壓供電,片內(nèi)JTAG調(diào)試和邊界掃描單元等。特別是該系列單片機(jī)的存儲(chǔ)器組織,與其它系列單片機(jī)相比[2],容量大,靈活多變,初學(xué)者往往感到不適應(yīng)。本文根據(jù)筆者使用體會(huì),通過程序舉例介紹其存儲(chǔ)器結(jié)構(gòu)及使用方法。

          1 C8051F060單片機(jī)的存儲(chǔ)器結(jié)構(gòu)

          圖1 是C8051F060單片機(jī)的存儲(chǔ)器結(jié)構(gòu)圖。顯然,該單片機(jī)采用了標(biāo)準(zhǔn)8051的程序和數(shù)據(jù)存儲(chǔ)器獨(dú)立編址的結(jié)構(gòu),程序存儲(chǔ)器為64KB的Flash結(jié)構(gòu),外加128字節(jié)Flash;數(shù)據(jù)RAM除包含標(biāo)準(zhǔn)256字節(jié),還有4KB片上XRAM和可外擴(kuò)64KB數(shù)據(jù)存儲(chǔ)器的接口。 圖1 C8051F060單片機(jī)的存儲(chǔ)器結(jié)構(gòu)圖

          2 數(shù)據(jù)存儲(chǔ)器及其編程

          數(shù)據(jù)存儲(chǔ)器分為內(nèi)部存儲(chǔ)器和外部存儲(chǔ)器。內(nèi)部RAM包含256字節(jié),其高端128字節(jié)為雙映射結(jié)構(gòu),即間接尋址訪問128字節(jié)通用RAM,直接尋址訪問128字節(jié)的特殊功能寄存器SFR地址空間,這個(gè)空間又分為256個(gè)SFR頁(yè),由特殊功能寄存器SFRPAGE來(lái)切換。這樣,單片機(jī)就有足夠的SFR來(lái)設(shè)定和配制各種接口資源,并為以后擴(kuò)展預(yù)留了足夠的空間,見例程1;低端的128字節(jié)RAM可通過直接或間接尋址來(lái)訪問,這和80的RAM完全一樣。其中前32個(gè)字節(jié)是4個(gè)通用工作寄存器區(qū),接下來(lái)的16字節(jié)機(jī)可以按字節(jié)尋址,也可以按位尋址。

          C8051F060單片機(jī)還有一個(gè)4KB的片內(nèi)XRAM,其尋址范圍以4KB為邊界覆蓋整個(gè)64KB的外部數(shù)據(jù)存儲(chǔ)器地址空間。另外,該單片機(jī)還有一個(gè)外部存儲(chǔ)器接口EMIF,用于訪問片外數(shù)據(jù)存儲(chǔ)器。外部數(shù)據(jù)存儲(chǔ)器尋址范圍可以只映射為片內(nèi)存儲(chǔ)器、片外存儲(chǔ)器或二者的組合,即4KB以內(nèi)指向片內(nèi),4KB以上指向外部存儲(chǔ)器接口EMIF,該EMIF可以配置為復(fù)用和非復(fù)用地址線/數(shù)據(jù)線兩種方式。編程步驟是:①EMIF端口的選擇和配置;②確定地址形成非復(fù)用/復(fù)用和地址/數(shù)據(jù)復(fù)用方式;③存儲(chǔ)器方式為片內(nèi)方式,不帶地址選擇的分片方式,有地址選擇的分片方式,片外工作方式;④確定接口定時(shí)參數(shù)。

          例程1:高端128字節(jié)的尋址

          ;直接尋址于SFR

          MOV 0F0H,#5AH

          ;間接尋址于高端RAM

          MOV R0,#0F0H

          MOV @R0,#0A5H

          在復(fù)位缺省狀態(tài)下,MOVX指令訪問4KB片內(nèi)XRAM,可用16位間址,也可用8位間址指令來(lái)尋址,這時(shí)高端地址放在EMI0CN寄存器中,如例程2。

          例程2:4K XRAM 8/16位讀寫

          4K XRAM 16位讀寫

          MOV A,#36H

          MOV DPTR,#0000H

          MOVX @DPTR,A

          MOV DPTR,#0000H

          MOVX A,@DPTR

          MOV R6,A

          4K XRAM 8 位讀寫

          MOV EMI0CN,#00H

          MOV R0,#01H

          MOV A,#37H

          MOVX @R0,A

          MOV EMI0CN,#00H

          MOV R0,#01H

          MOVX A,@R0

          MOV R7,A

          例程3為非復(fù)用方式XRAM寫,是分片無(wú)塊選方式。注意分片方式有兩種,分為有塊選擇和無(wú)塊選擇兩種,對(duì)16位間址是一樣的,對(duì)8位間址有區(qū)別。例程4是非復(fù)用分片方式讀,為有塊選方式,要特別注意特殊功能寄存器EMI0CF的賦值。

          例程3:片外XRAM寫

          MOV SFRPAGE,#0FH

          MOV P4MDOUT,#0FFH

          MOV P5MDOUT,#0FFH

          MOV P6MDOUT,#0FFH

          MOV P7MDOUT,#0FFH

          CLR P4.5

          NOP

          MOV SFRPAGE,#00H

          MOV PSCTL,#00H

          MOV EMI0TC,#45H

          MOV EMI0CF,#34H

          CLR EA

          NOP

          MOV DPTR,#4000H

          MOV A,#39H

          MOVX @DPTR,A

          NOP

          SETB EA

          MOV SFRPAGE,#0FH

          SETB P4.5

          例程4: 片外XRAM讀

          MOV SFRPAGE,#0FH

          CLR P4.5

          MOV SFRPAGE,#00H

          MOV EMI0TC,#45H

          MOV EMI0CF,#38H

          CLR EA

          NOP

          MOV DPTR,#4000H

          MOVX A,@DPTR

          NOP

          SETB EA

          MOV SFRPAGE,#0FH

          SETB P4.5

          注意,在對(duì)片外XRAM進(jìn)行讀寫時(shí),指令尋址時(shí)序并不產(chǎn)生片選信號(hào),所以要先置CS片選端為低,本例中為P4.5端,具體電路圖略。而WR和RD信號(hào)由接口參數(shù)確定時(shí)序,但P4.5在0F頁(yè),一定要注意頁(yè)切換。

          3 程序存儲(chǔ)器及其編程

          C8051F060單片機(jī)的程序存儲(chǔ)器為64KB的Flash存儲(chǔ)器,它能以512字節(jié)為扇區(qū)實(shí)現(xiàn)在系統(tǒng)編程,無(wú)需提供片外專用編程電壓,其中從0xFC00~0xFFFF的1024字節(jié)為保留區(qū)。另外,從0x10000~0x1007F的128字節(jié)Flash存儲(chǔ)器,可以作為非易失存儲(chǔ)器,由軟件來(lái)訪問,它最適合用于存放系統(tǒng)參數(shù)等,參見例程5。64KB的Flash存儲(chǔ)器區(qū)除了可以存放程序代碼外,也可以用來(lái)存放非易失數(shù)據(jù)。既可以在開發(fā)系統(tǒng)中,通過JTAG接口編程,也可以用MOV指令來(lái)實(shí)現(xiàn)軟件編程,參見例程6。注意,在對(duì)Flash存儲(chǔ)器操作時(shí),讀操作用MOVC指令,寫操作用MOVX指令,若用MOVX讀操作時(shí),只能讀到XRAM區(qū)。另外,要特別搞清楚程序存儲(chǔ)讀/寫控制寄存器PSCTL和Flash存儲(chǔ)器控制寄存器FLSCL的各個(gè)位的確切含義。

          例程5:128 Flash讀寫

          ;128 Flash 讀

          MOV SFRPAGE,#00H

          MOV PSCTL,#04H

          MOV FLSCL,#40H

          MOV DPTR,#0020H

          CLR A

          MOVC A,@A+DPTR

          MOV PSCTL,#00H

          MOV R7,A

          ;128 Flash 寫

          MOV FLSCL,#01H

          MOV PSCTL,#07H

          CLR A

          MOV DPTR,#0020H

          MOVX @DPTR,A

          MOV PSCTL,#05H

          MOV A,#35H

          MOV DPTR,#0020H

          MOVX @DPTR,A

          MOV PSCTL,#00H

          MOV FLSCL,#00H

          例程6:64K程序Flash讀寫

          ;64K Flash 讀

          MOV SFRPAGE,#00H

          MOV PSCTL,#00H

          MOV FLSCL,#40H

          MOV DPTR,#2020H

          CLR A

          MOVC A,@A+DPTR

          MOV R6,A

          ;64K Flash寫

          MOV FLSCL,#01H

          MOV PSCTL,#03H

          CLR A

          MOV DPTR,#2020H

          MOVX @DPTR,A

          MOV PSCTL,#01H

          MOV A,#33H

          MOV DPTR,#2020H

          MOVX @DPTR,A

          MOV PSCTL,#00H

          MOV FLSCL,#00H

          由于Flash存儲(chǔ)器只能寫0不能寫1,只能通過對(duì)其寫數(shù)據(jù)前擦除來(lái)實(shí)現(xiàn)寫1,所以每次寫Flash存儲(chǔ)器前,都要進(jìn)行擦除操作。由于64KB的Flash是以512字節(jié)為一頁(yè)組織的,擦除寫操作對(duì)整個(gè)頁(yè)進(jìn)行了寫0FFH操作,為提高速度,不必逐字節(jié)操作,只要對(duì)其中的任一字節(jié)進(jìn)行操作即可。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(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); })();