📄 flash_extend.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 + -