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

📄 iaptest1.inc

📁 功能:调用IAP服务程序实现Flash ROM的读/写操作向Flash ROM地址1000H处写入10个数据
💻 INC
字号:
; File:IAPTEST1.ASM
; 功能:调用IAP服务程序实现Flash  ROM的读/写操作。
; 说明:向Flash ROM地址1000H处写入10个数据,然后读出进行校验,
;       若校验正确,则蜂鸣器响一声。
;	将跳线器J27短接到OCA端,J28短接到BEEP端。
;       将跳线器J13、J15、J16分别短接到MOSI、SS、SPICLK。
; 	将跳线器J8、J9短接到HXTAL1、HXTAL2端。

$NOMOD51
$INCLUDE (REG932.INC)

FMADRH	  	DATA	   0xE7
FMADRL    	DATA	   0xE6
FMCON     	DATA	   0xE4
FMDATA    	DATA	   0xE5

PGM_MTP		EQU	0FF03H			; IAP子程序入口地址

OPADR		EQU	1000H			; 待写入数据的Flash ROM地址  	
DATA_BUF	EQU	30H			; 数据缓冲区30H-3FH

; 74HC595驱动口定义 
HC595_CS	BIT	P2.4
HC595_CLK	BIT	P2.5
HC595_DAT	BIT	P2.2

LEDCON		BIT	P2.6			; 定义LED控制端口
BEEP		BIT	P2.7
OP_ERR		BIT	10H			; 操作失败标志,为1时表示操作失败

		ORG	0000H
		JMP	MAIN

		ORG	0100H
MAIN:		MOV	SP,#60H
		MOV	P2M1,#0C0H
		MOV	P2M2,#0C0H

READ_VER:	MOV	A,#01H			; 读取IAP代码版本ID号
		CALL	PGM_MTP
		MOV	A,R7
		CPL	A
		CALL	HC595_SENDDAT		; 将读出的值输出显示
		CPL	LEDCON


		; 写操作前先进行擦除操作
ERASE_SECTOR:	CLR	OP_ERR
		CALL	IAPKEY_SET		; 允许IAP擦除/编程操作
		MOV	A,#04H			; 擦除扇区/页命令
		MOV	R7,#01H			; 擦除扇区为01H,页为00H
		MOV	R4,#HIGH(OPADR)		; 取出OPADR的高8位
		MOV	R5,#LOW(OPADR)		; 取出OPADR的低8位
		CALL	PGM_MTP			; 若操作出错,则F0会置位
		JNB	F0,ERASE_SREND
		SETB	OP_ERR
ERASE_SREND:	NOP
		CPL	LEDCON
		
		MOV	R6,#10
		MOV	R0,#DATA_BUF
		MOV	A,#5AH
LOAD_DATA:	MOV	@R0,A
		INC	R0
		DJNZ	R6,LOAD_DATA

WRITE_DATA:	CALL	IAPKEY_SET
		MOV	A,#00H			
		MOV	R3,#10
		MOV	R4,#HIGH(OPADR)		; 设置编程地址高8位
		MOV	R5,#LOW(OPADR)		; 设置编程地址低8位
		MOV	R7,#DATA_BUF		; 数据缓冲区
		CALL	PGM_MTP			; 写数据
		JNB	F0,WRITE_DAEND
		SETB	OP_ERR
WRITE_DAEND:	NOP
		CPL	LEDCON

		MOV	R6,#10
		MOV	DPTR,#OPADR
READ_DATA:	MOV	A,#07H
		MOV	R4,DPH
		MOV	R5,DPL
		CALL	PGM_MTP
		MOV	A,R7
		INC	DPTR
		CJNE	A,#5AH,DATA_ERR
		DJNZ	R6,READ_DATA
		SJMP	READ_END

DATA_ERR:	SETB	OP_ERR
		DJNZ	R6,READ_DATA
READ_END:	NOP

		JB	OP_ERR,MAIN_L4		; 若有操作出错,蜂鸣器不响
		CLR	BEEP
MAIN_L1:	MOV	R7,#5
MAIN_L2:	MOV	R6,#0
MAIN_L3:	MOV	R5,#0
		DJNZ	R5,$
		DJNZ	R6,MAIN_L3		
		DJNZ	R7,MAIN_L2
		SETB	BEEP
						
MAIN_L4:	SJMP	$


; 名称:IAPKEY_SET
; 功能:IAP特许字设置
; 入口参数:无
; 占用资源:ACC、R0
IAPKEY_SET:
		MOV  R0,#0FFH
		MOV  @R0,#96H
		RET



; 名称:HC595_SENDDAT
; 功能:向74HC595发送数据
; 入口参数:ACC		待发送的数据
; 占用资源:R7、CY
HC595_SENDDAT:
		CLR	HC595_CS
		MOV	R7,#8

HC595_SDL1:	CLR	HC595_CLK
		RLC	A			; 将要发送的数据最高位移入CY
		MOV	HC595_DAT,C		; 设置数据线
		NOP
HC595_SDL2:	SETB	HC595_CLK
		NOP
		DJNZ	R7,HC595_SDL1		; 若数据未发送完毕,再次发送
		
		SETB	HC595_CS		; 输出显示数据
		CLR	HC595_CS		; 关闭74HC595
		RET

		END

; 注,程序中的JMP在汇编时被SJMP、AJMP或LJMP代替;CALL也会被ACALL、LCALL代替。

⌨️ 快捷键说明

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