新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 混合信號單片機C8051F060存儲系統的編程

        混合信號單片機C8051F060存儲系統的編程

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

        1 C8051F060單片機的存儲器結構

        圖1 是C8051F060單片機的存儲器結構圖。顯然,該單片機采用了標準8051的程序和數據存儲器獨立編址的結構,程序存儲器為64KB的Flash結構,外加128字節Flash;數據RAM除包含標準256字節,還有4KB片上XRAM和可外擴64KB數據存儲器的接口。 圖1 C8051F060單片機的存儲器結構圖

        2 數據存儲器及其編程

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

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

        例程1:高端128字節的尋址

        ;直接尋址于SFR

        MOV 0F0H,#5AH

        ;間接尋址于高端RAM

        MOV R0,#0F0H

        MOV @R0,#0A5H

        在復位缺省狀態下,MOVX指令訪問4KB片內XRAM,可用16位間址,也可用8位間址指令來尋址,這時高端地址放在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為非復用方式XRAM寫,是分片無塊選方式。注意分片方式有兩種,分為有塊選擇和無塊選擇兩種,對16位間址是一樣的,對8位間址有區別。例程4是非復用分片方式讀,為有塊選方式,要特別注意特殊功能寄存器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

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

        3 程序存儲器及其編程

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

        例程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存儲器只能寫0不能寫1,只能通過對其寫數據前擦除來實現寫1,所以每次寫Flash存儲器前,都要進行擦除操作。由于64KB的Flash是以512字節為一頁組織的,擦除寫操作對整個頁進行了寫0FFH操作,為提高速度,不必逐字節操作,只要對其中的任一字節進行操作即可。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 涞水县| 克拉玛依市| 隆化县| 拜城县| 盐边县| 综艺| 秦安县| 合肥市| 株洲市| 淳化县| 耿马| 大厂| 澎湖县| 舞阳县| 民权县| 嘉定区| 平陆县| 肥乡县| 香格里拉县| 琼中| 开远市| 台州市| 同仁县| 工布江达县| 宁明县| 吴江市| 乌鲁木齐县| 河西区| 蒙山县| 同心县| 梁山县| 清水县| 延吉市| 和政县| 大宁县| 香河县| 淮北市| 农安县| 偃师市| 漠河县| 金寨县|