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

📄 internaleeprom_test.asm

📁 菲利普的LPC900系列单片机的EEPROM的正确使用说明,很不错的文章。
💻 ASM
字号:
/*************************************************
*文件名 :InternalEEprom_Test.asm
*版权:  广州周立功单片机发展有限公司
*功能:  P89LPC932内部EEPROM操作演示程序
*日期:  10:44 04-2-18
*************************************************/
$NOMOD51
$INCLUDE(reg932.inc)

LED	BIT	P2^6			;定义运行指示灯
BEEP	BIT 	P2^7			;定义蜂鸣器

	KEY1	BIT	P0^0		;定义按键
	KEY2	BIT	P0^1
	KEY3	BIT	P0^2
	KEY4	BIT	P0^3

	Count	DATA	0x30
	Dat	DATA	0x31
	Addr	DATA	0x32

/* 74HC595控制管脚定义 */
HC595_CS  BIT P2^4			;片选线
HC595_CLK BIT P2^5			;时钟线
HC595_DAT BIT P2^2			;数据线

ORG	0000H
AJMP	MAIN

ORG	0100H
MAIN:

	MOV	P0M1,#0x00		;定义IO口工作模式
	MOV	P0M2,#0x00	
	MOV	P2M1,#0xC0	
	MOV	P2M2,#0xC0

;-------------write---------------------------
WRITE1:
	JB	KEY1,Read1		;当KEY1按下,向 地址为0-->0xff的区域写入数据0->0xff.
	CLR	LED			;点亮运行指示灯
	CLR	EA			;写操作前关闭中断功能,避免干扰		

	MOV	Addr,#0x00		;地址初始值
	MOV	Dat,#0x00		;待写入数据初始值
	MOV	Count,#0xFF		;循环次数

	MOV	R7,#0xFF
WRITE_LOOP:
	MOV	DEECON,#0x00		;初始化DEECON
	MOV	DEEDAT,Dat		;赋值DEEDAT
	MOV	DEEADR,Addr		;赋值DEEADR	
WRITE_complete:				;等待写完成
	MOV	A,DEECON
	ANL	A,#0x80
	JZ	WRITE_complete
				
	MOV	DEECON,#0x00		;清0写完成标志位

	INC	Dat			;待写入数据递增
	INC	Addr			;地址递增
	DJNZ	R7,WRITE_LOOP		;循环次数递减
	
	SETB	LED			;最后一次循环,熄灭运行指示灯

	SETB	EA			;开中断

;-------------------Verify---------------------		
Read1:		
	JB	KEY2,WRITE2		;当KEY2按下时,校验地址0-->0xff区域间的数据,不对则BEEP
	CLR	LED

	MOV	Addr,#0x00		;首地址
	MOV	Dat,#0x00		;首数据
	MOV	Count,#0xFF		;循环次数

	MOV	R7,#0xFF
READ_LOOP:
	MOV	DEECON,#0x00		;初始化DEECON
	MOV	DEEADR,Addr		;赋值DEEADR
READ_complete:
	MOV	A,DEECON		;等待
	ANL	A,#0x80
	JZ	READ_complete

	MOV	A,DEEDAT		;将读出的值赋给Temp
	XRL	A,DAT			;将A与DAT比较
	JNZ	SKIP1			;不等则跳
	AJMP	SKIP2
SKIP1:	
	CLR	BEEP			;BEEP鸣叫
	MOV	A,DAT
	LCALL 	SendHC595		;显示时的数据(可以判断出操作第?位EEPROM出错)
SKIP2:

	INC	Dat			;待校验数据递增
	INC	Addr			;地址递增
	DJNZ	R7,READ_LOOP		;循环次数递减

	MOV	A,Dat
	LCALL	SendHC595		;若循环结束,显示最后一次操作的数据 	

;----------------100~~~~1FFH--------------
WRITE2:
	JB	KEY1,Read2		;当KEY1按下,向 地址为0x100-->0x1ff的区域写入相应数据
	CLR	LED			;点亮运行指示灯
	CLR	EA			;写操作前关闭中断功能,避免干扰		

	MOV	Addr,#0x00		;地址低8位初值
	MOV	Dat,#0x00		;待写入数据初始值
	MOV	Count,#0xFF		;循环次数

	MOV	R7,#0xFF
WRITE_LOOP1:
	MOV	DEECON,#0x01		;初始化DEECON,并置位地址最高位
	MOV	DEEDAT,Dat		;赋值DEEDAT
	MOV	DEEADR,Addr		;赋值DEEADR
				
WRITE_complete1:				;等待写完成
	MOV	A,DEECON
	ANL	A,#0x80
	JZ	WRITE_complete1
				
	MOV	DEECON,#0x00		;清0写完成标志位

	INC	Dat			;待写入数据递增
	INC	Addr			;地址递增

	DJNZ	R7,WRITE_LOOP1		;循环次数递减
		
	SETB	LED;			;最后一次循环,熄灭运行指示灯
	SETB	EA			;开中断
;-------------Verify--------------------------		
Read2:			
	JB	KEY2,Over		;当KEY2按下时,校验地址0x100-->0x1ff区域间的数据,不对则BEEP
	CLR	LED

	MOV	Addr,#0x00		;首地址低8位
	MOV	Dat,#0x00		;首数据
	MOV	Count,#0xFF		;循环次数

	MOV	R7,#0xFF
READ_LOOP1:
	MOV	DEECON,#0x01		;初始化DEECON,并置位地址最高位
	MOV	DEEADR,Addr		;赋值DEEADR
READ_complete1:
	MOV	A,DEECON		;等待
	ANL	A,#0x80
	JZ	READ_complete1

	MOV	A,DEEDAT		;将读出的值赋给A
	XRL	A,DAT			;将A与DAT比较
	JNZ	SKIP_1			;不等则跳
	AJMP	SKIP_2
SKIP_1:	
	CLR	BEEP			;BEEP鸣叫
	MOV	A,DAT
	LCALL 	SendHC595		;显示时的数据(可以判断出操作第?位EEPROM出错)
SKIP_2:
	INC	Dat			;待校验数据递增
	INC	Addr			;地址递增
	DJNZ	R7,READ_LOOP1		;循环次数递减
			
	MOV	A,Dat
	LCALL	SendHC595		;若循环结束,显示最后一次操作的数据 

	;---------------
Over:
	JMP	WRITE1

	RET

;***********************************************
; 名称:SENDHC595
; 功能:向74HC595发送数据
; 入口参数:ACC		待发送的数据
; 占用资源:R7、CY
;***********************************************
SENDHC595:
		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

⌨️ 快捷键说明

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