混合信號單片機C8051F060存儲系統的編程
1 C8051F060單片機的存儲器結構
圖1 是C8051F060單片機的存儲器結構圖。顯然,該單片機采用了標準8051的程序和數據存儲器獨立編址的結構,程序存儲器為64KB的Flash結構,外加128字節Flash;數據RAM除包含標準51單片機256字節,還有4KB片上XRAM和可外擴64KB數據存儲器的接口。 圖1 C8051F060單片機的存儲器結構圖
2 數據存儲器及其編程
數據存儲器分為內部存儲器和外部存儲器。內部RAM包含256字節,其高端128字節為雙映射結構,即間接尋址訪(fǎng)問(wèn)128字節通用RAM,直接尋址訪(fǎng)問(wèn)128字節的特殊功能寄存器SFR地址空間,這個(gè)空間又分為256個(gè)SFR頁(yè),由特殊功能寄存器SFRPAGE來(lái)切換。這樣,單片機就有足夠的SFR來(lái)設定和配制各種接口資源,并為以后擴展預留了足夠的空間,見(jiàn)例程1;低端的128字節RAM可通過(guò)直接或間接尋址來(lái)訪(fǎng)問(wèn),這和8051單片機的RAM完全一樣。其中前32個(gè)字節是4個(gè)通用工作寄存器區,接下來(lái)的16字節機可以按字節尋址,也可以按位尋址。
C8051F060單片機還有一個(gè)4KB的片內XRAM,其尋址范圍以4KB為邊界覆蓋整個(gè)64KB的外部數據存儲器地址空間。另外,該單片機還有一個(gè)外部存儲器接口EMIF,用于訪(fǎng)問(wèn)片外數據存儲器。外部數據存儲器尋址范圍可以只映射為片內存儲器、片外存儲器或二者的組合,即4KB以?xún)戎赶蚱瑑?4KB以上指向外部存儲器接口EMIF,該EMIF可以配置為復用和非復用地址線(xiàn)/數據線(xiàn)兩種方式。編程步驟是:①EMIF端口的選擇和配置;②確定地址形成非復用/復用和地址/數據復用方式;③存儲器方式為片內方式,不帶地址選擇的分片方式,有地址選擇的分片方式,片外工作方式;④確定接口定時(shí)參數。
例程1:高端128字節的尋址
;直接尋址于SFR
MOV 0F0H,#5AH
;間接尋址于高端RAM
MOV R0,#0F0H
MOV @R0,#0A5H
在復位缺省狀態(tài)下,MOVX指令訪(fǎng)問(wèn)4KB片內XRAM,可用16位間址,也可用8位間址指令來(lái)尋址,這時(shí)高端地址放在EMI0CN寄存器中,如例程2。
例程2:4K XRAM 8/16位讀寫(xiě)
4K XRAM 16位讀寫(xiě)
MOV A,#36H
MOV DPTR,#0000H
MOVX @DPTR,A
MOV DPTR,#0000H
MOVX A,@DPTR
MOV R6,A
4K XRAM 8 位讀寫(xiě)
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寫(xiě),是分片無(wú)塊選方式。注意分片方式有兩種,分為有塊選擇和無(wú)塊選擇兩種,對16位間址是一樣的,對8位間址有區別。例程4是非復用分片方式讀,為有塊選方式,要特別注意特殊功能寄存器EMI0CF的賦值。
例程3:片外XRAM寫(xiě)
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進(jìn)行讀寫(xiě)時(shí),指令尋址時(shí)序并不產(chǎn)生片選信號,所以要先置CS片選端為低,本例中為P4.5端,具體電路圖略。而WR和RD信號由接口參數確定時(shí)序,但P4.5在0F頁(yè),一定要注意頁(yè)切換。
3 程序存儲器及其編程
C8051F060單片機的程序存儲器為64KB的Flash存儲器,它能以512字節為扇區實(shí)現在系統編程,無(wú)需提供片外專(zhuān)用編程電壓,其中從0xFC00~0xFFFF的1024字節為保留區。另外,從0x10000~0x1007F的128字節Flash存儲器,可以作為非易失存儲器,由軟件來(lái)訪(fǎng)問(wèn),它最適合用于存放系統參數等,參見(jiàn)例程5。64KB的Flash存儲器區除了可以存放程序代碼外,也可以用來(lái)存放非易失數據。既可以在開(kāi)發(fā)系統中,通過(guò)JTAG接口編程,也可以用MOV指令來(lái)實(shí)現軟件編程,參見(jiàn)例程6。注意,在對Flash存儲器操作時(shí),讀操作用MOVC指令,寫(xiě)操作用MOVX指令,若用MOVX讀操作時(shí),只能讀到XRAM區。另外,要特別搞清楚程序存儲讀/寫(xiě)控制寄存器PSCTL和Flash存儲器控制寄存器FLSCL的各個(gè)位的確切含義。
例程5:128 Flash讀寫(xiě)
;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 寫(xiě)
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讀寫(xiě)
;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寫(xiě)
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存儲器只能寫(xiě)0不能寫(xiě)1,只能通過(guò)對其寫(xiě)數據前擦除來(lái)實(shí)現寫(xiě)1,所以每次寫(xiě)Flash存儲器前,都要進(jìn)行擦除操作。由于64KB的Flash是以512字節為一頁(yè)組織的,擦除寫(xiě)操作對整個(gè)頁(yè)進(jìn)行了寫(xiě)0FFH操作,為提高速度,不必逐字節操作,只要對其中的任一字節進(jìn)行操作即可。
評論