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

📄 eepromttt.asm

📁 MCU多串口应用
💻 ASM
字号:
        org 0000h
        ajmp MAIN
        org 0040h

;EepromRGDefine
	;声明特殊功能寄存器地址
	ISP_DATA	EQU 0E2H
	ISP_ADDRH	EQU 0E3H
	ISP_ADDRL	EQU 0E4H
	ISP_CMD		EQU 0E5H
	ISP_TRIG	EQU 0E6H
	ISP_CONTR	EQU 0E7H
	;定义ISP/IAP命令及等待时间
	ISP_IAP_BYTE_READ	EQU 1	;字节读
	ISP_IAP_BYTE_PROGRAM	EQU 2	;字节编程,前提是该字节是空,0FFh
	ISP_IAP_BYTE_ERASE	EQU 3	; 扇区擦除,要某字节为空,要擦一扇区
	ISP_IAP_WAIT_TIME	EQU 0	;设置等待时间,40MHz以下0,20MHz以下1,10MHz以下2,5M以下3

MAIN:	JNB	P1.4,	TT0
	JNB	P1.5,	TT3
	JNB	P1.6,	TT4
	JB	P1.4,	TT1
	LJMP	MAIN
	

TT3:	MOV	R3,	#20H
	MOV	R2,	#00H
	LCALL	sub_Flash_Clr
	SETB	P0.6
	LJMP	MAIN

TT4:	MOV	R3,	#20H
	MOV	R2,	#01H
	MOV	A,	#0F0H
	JNB	P0.6,	TT4OVER
	LCALL	sub_Flash_WrB
	CLR	P0.6
TT4OVER:LJMP	MAIN
		
TT0:	MOV	R3,	#20H
	MOV	R2,	#01H
	MOV	A,	#00H
	JNB	P0.0,	TT0OVER
	LCALL	sub_Flash_RdB
	CJNE	A,	#0F0H,	TT2
	CLR	P0.0
	SETB	P0.7
TT0OVER:LJMP	MAIN
TT2:	SETB	P0.0
	CJNE	A,	#0FFH,	TT2OVER
	CLR	P0.7
TT2OVER:LJMP	MAIN

TT1:	SETB	P0.0
	LJMP	MAIN



sub_Flash_RdB:	MOV	ISP_ADDRH,	R3	;送地址高字节
		MOV	ISP_ADDRL,	R2	;送地址低字节
		CLR 	EA			;关中断,此时各种中断请求会被挂起来,一开中断,立即相应
		
		MOV	ISP_CONTR,	#ISP_IAP_WAIT_TIME	;设置等待时间
		ORL	ISP_CONTR,	#10000000B		;允许ispiap操作
		MOV	ISP_CMD,	#ISP_IAP_BYTE_READ	;送字节读命令

		MOV	ISP_TRIG,	#46H	;先送46h,再送b9h到触发器
		MOV	ISP_TRIG,	#0B9H	;送完b9h,ispiap命令立即触发启动
	
		NOP					;数据读出到ISP_DATA寄存器后,cpu继续执行程序
		MOV	ISP_CONTR,	#00000000B	;禁止ispiap操作
		MOV	ISP_CMD,	#00000000B	;去除ispiap命令
		MOV	ISP_TRIG,	#00000000B	;防止ispiap命令误触发
		MOV	ISP_ADDRH,	#0FFH		;送地址高字节单元为FF,防止误操作
		MOV	ISP_ADDRL,	#0FFH		;送地址低字节单元为FF,防止误操作
		SETB	EA				;开中断,cpu处理完ispiap动作即可开中断
		MOV	A,		ISP_DATA	;将读出的数据送往A
RET							;子程序返回

sub_Flash_WrB:	MOV	ISP_DATA,	A	;从A送字节数据到ISP_DATA寄存器
		MOV	ISP_ADDRH,	R3	;送地址高字节
		MOV	ISP_ADDRL,	R2	;送地址低字节
		CLR 	EA			;关中断,此时各种中断请求会被挂起来,一开中断,立即相应
		
		MOV	ISP_CONTR,	#ISP_IAP_WAIT_TIME	;设置等待时间
		ORL	ISP_CONTR,	#10000000B		;允许ispiap操作
		MOV	ISP_CMD,	#ISP_IAP_BYTE_PROGRAM	;送字节写命令
	
		MOV	ISP_TRIG,	#46H	;先送46h,再送b9h到触发器
		MOV	ISP_TRIG,	#0B9H	;送完b9h,ispiap命令立即触发启动
	
		NOP					;数据写入成功后,cpu继续执行程序
		MOV	ISP_CONTR,	#00000000B	;禁止ispiap操作
		MOV	ISP_CMD,	#00000000B	;去除ispiap命令
		MOV	ISP_TRIG,	#00000000B	;防止ispiap命令误触发
		MOV	ISP_ADDRH,	#0FFH		;送地址高字节单元为FF,防止误操作
		MOV	ISP_ADDRL,	#0FFH		;送地址低字节单元为FF,防止误操作
		SETB	EA				;开中断,cpu处理完ispiap动作即可开中断
RET							;子程序返回

sub_Flash_Clr:	MOV	ISP_ADDRH,	R3	;送扇区起始地址高字节
		MOV	ISP_ADDRL,	R2	;送扇区起始地址低字节
		CLR 	EA			;关中断,此时各种中断请求会被挂起来,一开中断,立即相应
		
		MOV	ISP_CONTR,	#ISP_IAP_WAIT_TIME	;设置等待时间
		ORL	ISP_CONTR,	#10000000B		;允许ispiap操作
		MOV	ISP_CMD,	#ISP_IAP_BYTE_ERASE	;送扇区擦除命令
	
		MOV	ISP_TRIG,	#46H	;先送46h,再送b9h到触发器
		MOV	ISP_TRIG,	#0B9H	;送完b9h,ispiap命令立即触发启动
	
		NOP					;扇区擦除成功后,cpu继续执行程序
		MOV	ISP_CONTR,	#00000000B	;禁止ispiap操作
		MOV	ISP_CMD,	#00000000B	;去除ispiap命令
		MOV	ISP_TRIG,	#00000000B	;防止ispiap命令误触发
		MOV	ISP_ADDRH,	#0FFH		;送地址高字节单元为FF,防止误操作
		MOV	ISP_ADDRL,	#0FFH		;送地址低字节单元为FF,防止误操作
		SETB	EA				;开中断,cpu处理完ispiap动作即可开中断
RET							;子程序返回

END

⌨️ 快捷键说明

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