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

📄 iap_lite.inc

📁 菲利普LPC900系列写Flash源码
💻 INC
字号:
; 文件名:IAP_LITE.IN
; 功能:实现IAP_Lite功能,进行字节擦除编程操作
; 日期:2003.11.03
; 说明:

; 定义页宽度屏蔽字(16字节时为0FH,64字节时为3FH)
PAGE_SIZE   EQU    3FH

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


; 定义FLASH控制命令字
LOAD        EQU     00H                         ; 加载数据
PROG        EQU     48H                         ; 编程
ERS_PROG    EQU     68H                         ; 擦除编程   
ERS_S       EQU     71H                         ; 擦除扇区
ERS_P       EQU     70H                         ; 擦除页 


; 名称:FLASH_WRBYTE 
; 功能:写字节数据
; 入口参数:ACC         所要写入的数据
;          DPTR        要写入的地址
; 出口参数:C置位时表示错误,清零时表示无错误
; 占用资源:ACC、DPTR、C位
FLASH_WRBYTE:   
		MOV     FMCON,#LOAD             ; 设置加载数据命令       
                MOV     FMADRH,DPH              ; 设置写入地址
                MOV     FMADRL,DPL      
                MOV     FMDATA,A                ; 写入数据          
                MOV     FMCON,#ERS_PROG         ; 擦除编程   
                MOV     A,FMCON                 ; 读取操作状态字
                ANL     A,#0FH
                CLR     C
                JZ      FLASH_WRBEND            ; 判断操作是否出错
                SETB    C                       ; 若出错,则置位C位
FLASH_WRBEND:   RET


; 名称:FLASH_RDBYTE 
; 功能:读字节数据
; 入口参数:DPTR       要写入的地址
; 出口参数:读出数据在ACC 
; 占用资源:ACC、DPTR、C位
FLASH_RDBYTE:           
                CLR     A
                MOVC    A,@A+DPTR
                RET


; 名称:FLASH_WRNBYTE 
; 功能:连续写多字节数据
; 入口参数:R1          RAM中数据缓冲区的指针   
;          R7          所要写入的数据个数
;          DPTR        要写入的起始地址
; 出口参数:C置位时表示错误,清零时表示无错误
; 占用资源:ACC、R1、R7、DPTR、C位
; 说明:程序已自动处理页问题(页翻转)
FLASH_WRNBYTE:          
                CLR     C
                MOV     A,R7                    ; 若写入个数为0,直接退出
                JZ      FLASH_WRNBEND

FLASH_WRNBL1:   MOV     FMCON,#LOAD             ; 设置加载数据命令
                MOV     FMADRH,DPH              ; 设置写入地址
                MOV     FMADRL,DPL

FLASH_WRNBL2:   MOV     FMDATA,@R1              ; 取出数据并写入FMDATA
                INC     R1                      
                INC     DPTR                    ; 地址加1
		MOV	A,DPL
		ANL     A,#PAGE_SIZE 
                JZ      FLASH_WRNBL3            ; 若已写满一页,则执行擦除编程操作
                DJNZ    R7,FLASH_WRNBL2

                MOV     FMCON,#ERS_PROG         ; 擦除编程   
                MOV     A,FMCON                 ; 读取操作状态字
                ANL     A,#0FH
                JZ      FLASH_WRNBEND           ; 判断操作是否出错
                SETB    C                       ; 若出错,则置位C位
FLASH_WRNBEND:  RET

FLASH_WRNBL3:   MOV     FMCON,#ERS_PROG         ; 擦除编程   
                MOV     A,FMCON                 ; 读取操作状态字
                ANL     A,#0FH
                JZ      FLASH_WRNBL4            ; 重新编程下一页数据
                SETB    C                       ; 若出错,则置位C位     
                RET                             ; 退出
FLASH_WRNBL4:	DJNZ	R7,FLASH_WRNBL1		; 判断是否写完数据
		RET	


; 名称:FLASH_RDNBYTE 
; 功能:连续读多字节数据
; 入口参数:R0          RAM中数据缓冲区的指针   
;          R7          所要读取的数据个数
;          DPTR        要读取的起始地址
; 出口参数:无
; 占用资源:ACC、R0、R7、DPTR
FLASH_RDNBYTE:
		MOV	A,R7
		JZ	FLASH_RDNBEND
		
FLASH_RDNBL1:	CLR	A
		MOVC	A,@A+DPTR		; 读取数据 
		MOV	@R0,A			; 保存数据到缓冲区
		INC	R0			
		INC	DPTR			; 指向下一地址
		DJNZ	R7,FLASH_RDNBL1		; 判断是否读完数据
FLASH_RDNBEND:	RET        




; 名称:ERASE_SECTOR
; 功能:扇区擦除
; 入口参数:DPTR    扇区地址
; 出口参数:C置位时表示错误,清零时表示无错误 
; 占用资源:ACC、DPTR、C位
ERASE_SECTOR: 	MOV     FMADRH,DPH         	; 设置扇区地址(高字节)
                MOV     FMADRL,DPL          	; 设置扇区地址(低字节)
               	MOV     FMCON,#ERS_S           	; 设置命令字ERS_S,擦除扇区
                MOV     A,FMCON                 ; 读取操作状态字
                ANL     A,#0FH
                CLR	C
                JZ      ERASES_END         	
                SETB    C                       ; 若出错,则置位C位     
ERASES_END: 	RET                             ; 退出


; 名称:ERASE_PAGE 
; 功能:页擦除
; 入口参数:DPTR    页地址
; 出口参数:C置位时表示错误,清零时表示无错误 
; 占用资源:ACC、DPTR、C位
ERASE_PAGE: 	MOV     FMADRH,DPH         	; 设置页地址(高字节)
                MOV     FMADRL,DPL          	; 设置页地址(低字节)
               	MOV     FMCON,#ERS_P           	; 设置命令字ERS_P,擦除扇区
                MOV     A,FMCON                 ; 读取操作状态字
                ANL     A,#0FH
                CLR	C
                JZ      ERASEP_END         	
                SETB    C                       ; 若出错,则置位C位     
ERASEP_END: 	RET                             ; 退出


; 名称:FILL_PAGE 
; 功能:页填充
; 入口参数:A	   所要填充的数据
;	   DPTR    页地址
; 出口参数:C置位时表示错误,清零时表示无错误 
; 占用资源:ACC、R7、DPTR、C位
; 说明:使用前要先擦除扇区
FILL_PAGE: 	PUSH	ACC			; 保存
		MOV	A,#PAGE_SIZE		; 计算出一页的字节个数
		INC	A
		MOV	R7,A
		
		MOV	A,#PAGE_SIZE
		CPL	A
		ANL	A,DPL			; 设置页起始地址
		MOV     FMADRH,DPH         	; 设置扇区地址(高字节)
                MOV     FMADRL,A          	; 设置扇区地址(低字节)
                MOV     FMCON,#LOAD
                
                POP	ACC
FILLP_L1:       MOV	FMDATA,A
                DJNZ	R7,FILLP_L1
               	MOV     FMCON,#PROG           	; 设置页编程操作
                MOV     A,FMCON                 ; 读取操作状态字
                ANL     A,#0FH
                CLR	C
                JZ      FILLP_END         	
                SETB    C                       ; 若出错,则置位C位     
FILLP_END: 	RET                             ; 退出

⌨️ 快捷键说明

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