;RE-MAP[1:0]注1 Map-En[1:0]注2,注3 注释
; 11 00 不映射,程序內存为正常配置。0000-7FFFH,F000-FFFFH
; 10 01 1K內存被映射,F000H-F3FFH被映射为0000H-03FFH
; 01 10 2K內存被映射,F000H-F7FFH被映射为0000H-07FFH
; 00 11 4K內存被映射,F000H-FFFFH被映射为0000H-0FFFH
;注1:Map-En[1:0]为FLASH位。系统复位时检查RE-MAP[1:0]位。片擦除时RE-MAP[1:0]=1
;注2:系统复位时Map-En[1:0]位按编程的RE-MAP[1:0]位进行初始化,Map-En[1:0]=!RE-MAP[1:0]
;注3:Map-En[1:0]位在STCF寄存器中,它可以确定內存的映射关系。在程序运行时可以修改。
;(9) Re-Map位0编程000_1000b: Byte_Program 时间: 0-110us(Byte_Program Time)
;Prog_RB0 操作指令必须在BLOCK0中。编程后RB0=0(Map-En[0]=1),下一次复位后有效。
;查询方式命令格式如下:
Prog_RB0:
ORL SFCF, #01000000B ;置IAPEN = 1,启动IAP
MOV SFAH, #80H
MOV SFDT, #55H
MOV SFCM, #08H ;写入命令字FIE = 0,FCM[6:0] = 000_0011b: Prog_SB2
MOV A,SFST ;查询SFST.2,等待加密位Prog_SB2编程操作完成
JB ACC.2,$-2
RET
;(10) Re-Map位1编程000_1001b: Byte_Program 时间: 0-110us(Byte_Program Time)
;Prog_RB1 操作指令必须在BLOCK0中。编程后RB1=0(Map-En[1]=1),下一次复位后有效。
;查询方式命令格式如下:
Prog_RB1:
ORL SFCF, #01000000B ;置IAPEN = 1,启动IAP
MOV SFAH, #80H
MOV SFDT, #55H
MOV SFCM, #09H ;写入命令字FIE = 0,FCM[6:0] = 000_0101b: Prog_SB3
MOV A,SFST ;查询SFST.2,等待加密位Prog_SB3编程操作完成
JB ACC.2,$-2
RET
;(11) 页面编程000_0110b: Burst_Program 时间:页面编程 45 μs*
;
;
; SFAH SFAL
;地址: | a15 a14 a13 a12 a11 a10 a9 a8 | a7 a6 a5 a4 a3 a2 a1 a0 |
;页面地址: | a15 a14 a13 a12 a11 a10 a9 a8 | a7 a6 字 节 地 址 | 64字节 Block0
;页面地址: | a15 a14 a13 a12 a11 a10 a9 a8 | a7 a6 a5 字 节 地 址 | 32字节 Block1
;查询方式格式如下:
Burst_Block0_Program:
ORL SFCF, #01000000B ;置IAPEN = 1,启动IAP
MOV B,#64
Burst_Block0_Program1:
MOV SFAH, DPH
MOV SFAL, DPL
MOV SFDT, #program_data
MOV SFCM, #06H ;写入命令字FIE = 0,FCM[6:0] = 000_1110b: Byte_Program
MOV A,SFST ;查询SFST.3,等待页面字节编程操作完成
JB ACC.3,$-2
INC DPTR
DJNZ B,Burst_Block0_Program1
MOV A,SFST ;查询SFST.2,等待编程操作完成
JB ACC.2,$-2
RET
Burst_Block1_Program:
ORL SFCF, #01000000B ;置IAPEN = 1,启动IAP
MOV B,#32
Burst_Block1_Program1:
MOV SFAH, DPH
MOV SFAL, DPL
MOV SFDT, #program_data
MOV SFCM, #06H ;写入命令字FIE = 0,FCM[6:0] = 000_1110b: Byte_Program
MOV A,SFST ;查询SFST.3,等待页面字节编程操作完成
JB ACC.3,$-2
INC DPTR
DJNZ B,Burst_Block1_Program1
MOV A,SFST ;查询SFST.2,等待编程操作完成
JB ACC.2,$-2
RET