⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flash_extend.asm

📁 24CXX扩展LPC900单片机代码存储区
💻 ASM
字号:
/*****************************************************************************
*文件名:	FlashExtend.asm
*版权:		周立功单片机研究所
*功能:		24Cxx扩展LPC900存储代码演示程序
*日期:		11:27 04-6-9
*****************************************************************************/
$NOMOD51
$INCLUDE(REG932.INC)

KEY1	BIT	P1.6
KEY2	BIT	P1.7
LED	BIT	P1.4

MRD	EQU	0x30		;接收缓冲区首地址
MTD	EQU	0x40		;发送缓冲区首地址
ACK     BIT  	10H    		;应答标志位变量
SLA     DATA 	50H 		;器件从地址变量
SUBA    DATA 	51H 		;器件子地址变量 
NUMBYTE DATA    52H		;读/写的字节数变量
Excute	EQU	0x1800

FMADRH      DATA    0E7H	; IAP_Lite相关寄存器定义
FMADRL      DATA    0E6H
FMCON       DATA    0E4H
FMDATA      DATA    0E5H

	ORG	0000H
	AJMP	MAIN
;------------------------------
	ORG	0080H
MAIN:
	MOV	P1M1,#0x0C	;P1口初始化
	MOV	P1M2,#0x0C
MAIN1:
	JB	KEY1,MAIN2	;等待KEY1按下
	MOV	A,#20
	ACALL	Delayms		
	JNB	KEY1,$

	MOV	A,#0x00
	ACALL	Transfer	;从EEPROM地址00处读代码,并写入FLASH中,然后执行
	AJMP 	MAIN1
MAIN2:
	jB	KEY2,MAIN1	;等待KEY2按下
	MOV	A,#20
	ACALL	Delayms
	JNB	KEY2,$

	MOV	A,#0x40
	ACALL	Transfer	;从EEPROM地址40处读代码,并写入FLASH中,然后执行
	AJMP	MAIN1
	RET
;--------------------------------
;功能:向Flash的特定地址(0x1800)写入一组数据
;--------------------------------
Page_Write:
	MOV	FMCON,#0x00	;数据装载指令
	MOV	FMADRH,#0x18	;发送IAP操作地址
	MOV	FMADRL,#0x00	

	MOV 	R7,#16
	MOV	R0,#MRD		
LOOP1:
	MOV	A,@R0
	MOV	FMDATA,A	;从读缓冲区中取数存入FMDATA
				;每存储一个数,IAP操作地址自增1
	INC	R0
	DJNZ	R7,LOOP1	

	MOV	FMCON,#0x68	;执行擦除后编程指令
	MOV	A,FMCON		;读取FMCON寄存器状态
	ANL	A,#0x0F			
	JNZ	Page_Write	;若编程失败则重新操作
	RET
;--------------------------------
;功能:将EEPROM上特定的数据写入FLASH中,并执行
;入口参数:A
;--------------------------------
Transfer:
	MOV	R6,A		;将欲读取的EEPROM子地址存入R6
	MOV	SLA,#0xA0	;器件地址
	MOV	SUBA,R6		;EEPROM子地址
	MOV	NUMBYTE,#16	;欲读取字节数
	LCALL	IRDNBYTE	;调用有子地址多字节读取指令
	
	LCALL	Page_Write	;将读取到的字节写入FLASH(1800H)中
	
	LCALL	Excute		;调用1800H处的代码
	RET
;--------------------------------
;功能:延时100us(7.373MHz时)
;--------------------------------
DELAY100US:
	MOV	R4,#182
LOOPUS:
	DJNZ	R4,LOOPUS
	RET
;--------------------------------
;功能:ms级延时
;入口参数:A
;--------------------------------
DELAYMS:
	MOV	R3,A
LOOP_N:	
	MOV	R2,#10
LOOP10:
	ACALL	DELAY100US
	DJNZ	R2,LOOP10
	DJNZ	R3,LOOP_N
	RET	
;--------------------------------
$INCLUDE(VI2C_ASM.inc)
;--------------------------------
	END
;--------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -