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

📄 test_24c02.asm

📁 这是一个用汇编写的 24C02 芯片的检测程序
💻 ASM
字号:
;-------------------------------------------------------------------------------------------------------
;		AT24C02 EEPROM 的读写程序     
;将内部RAM61H-68H单元中的数据写入到EEPROM内从50H开始的单元中,并将他们读出来存放在 30H-37H 单元中。
;-------------------------------------------------------------------------------------------------------

SLAW	EQU	0A0H	;AT24C02的节点地址(写入)
SLAR	EQU	0A1H	;AT24C02的节点地址(读出)
NUMBYT	EQU	75H	;被传送的字节数存放单元。
MTD	EQU	20H	;发送数据缓冲区首地址。
MRD	EQU	30H	;接收字节缓冲区首地址。

VSDA	EQU	P3.4	;AT24C02的数据线。
VSCL	EQU	P3.3	;AT24C02的时钟线。
SLA	EQU	76H	;

	ORG	00H
	SJMP	STAR
	
	ORG	30H
STAR:
	MOV	SP,#90H
	LCALL	SETDATA		;给RAM中写入数据。
MAIN:
	LCALL	WREEPROM	;将50H,0,1,2,3,4,5,6,7共9个数字先传到20H-28H中,再写入EEPROM。
	LCALL	RDEEPROM	;将 EEPROM 的 50H-57H 中8个数字读出,并保存到RAM的30-37单元。
LOOP:
	SJMP	LOOP
;-----------------------------------------------------------------------------------
;	在 RAM 的 61H-68H 中放入8个数字。(0--7)
;
;------------------------------------------------------------------------------------	
SETDATA:
	MOV	60H,#50H	;50H 是要写入的 EEPROM 中的子地址。
	MOV	61H,#11H		
	MOV	62H,#22H	
	MOV	63H,#33H	
	MOV	64H,#44H	
	MOV	65H,#55H	
	MOV	66H,#66H	
	MOV	67H,#77H
	MOV	68H,#88H	
	RET
;----------------------------------------------------------------------------------
;	向 EEPROM 中写9个字节数据
;----------------------------------------------------------------------------------	
WREEPROM:
	ACALL	WMOV9		;将 RAM 中60H--68H 中的9个数放到20H(MTD)开始的单元中。
	MOV	SLA,#SLAW
	MOV	NUMBYT,#09H
	LCALL	WRNBYT		;把以(MTD)内容为首址的(NUMBYT)个数据写到EEPROM中。
	RET	
;----------------------------------------------------------------------------------
;	将 RAM 中60H--68H 单元内的9个数放到20H(MTD)开始的单元中。
;----------------------------------------------------------------------------------	
WMOV9:
	MOV	R0,#MTD
	MOV	R1,#60H
	MOV	R2,#9
WMOV:
	MOV	A,@R1
	MOV	@R0,A
	INC	R0
	INC	R1
	DJNZ	R2,WMOV
	RET
;-----------------------------------------------------------------------------------	
RDEEPROM:
	MOV	MTD,#50H	;50H 是要读写的 EEPROM 内部子地址。
	MOV	SLA,#SLAW	;置入写命令。
	MOV	NUMBYT,#1
	LCALL	WRNBYT		;
	MOV	SLA,#SLAR
	MOV	NUMBYT,#08	;8个字节数据。
	LCALL	RDNBYT		;读出EEPROM内从 50H 单元开始的8个字节数据。
	RET
;----------------------------------------------------
;	启动子程序
;----------------------------------------------------
STA:
	SETB	VSDA
	SETB	VSCL
	NOP
	NOP
	CLR	VSDA
	NOP
	NOP
	CLR	VSCL
	RET
;-------------------------------------------------------
;	停止子程序
;-------------------------------------------------------	
STOP:
	CLR	VSDA
	SETB	VSCL
	NOP
	NOP
	SETB	VSDA
	NOP
	NOP
	CLR	VSDA
	CLR	VSCL
	RET
	
;----------------------------------------------------	
;	发送应答位子程序
;----------------------------------------------------	
MACK:
	CLR	VSDA
	SETB	VSCL
	NOP
	NOP
	CLR	VSCL
	SETB	VSDA
	RET
;---------------------------------------------------	
;	发送非应答位子程序
;---------------------------------------------------
MNACK:
	SETB	VSDA
	SETB	VSCL
	NOP
	NOP
	CLR	VSCL
	CLR	VSDA
	RET
;----------------------------------------------------	;
;	应答位检查子程序
;----------------------------------------------------
CACK:
	SETB	VSDA
	SETB	VSCL
	CLR	F0
	MOV	C,VSDA
	JNC	CEND
	SETB	F0
CEND:
	CLR	VSCL
	RET
;---------------------------------------------------
;	发送一个字节数据子程序
;---------------------------------------------------	
WRBYT:
	MOV	R0,#08H
WLP:
	RLC	A
	JC	WR1
	AJMP	WR0
WLP1:
	djnz	r0,wlp
	RET
WR1:
	SETB	VSDA
	SETB	VSCL
	NOP
	NOP
	CLR	VSCL
	CLR	VSDA
	AJMP	WLP1
WR0:
	CLR	VSDA
	SETB	VSCL
	NOP
	NOP
	CLR	VSCL
	AJMP	WLP1
;---------------------------------------------------------
;	读出一个字节数据子程序
;---------------------------------------------------------	
RDBYT:
	MOV	R0,#08H
RLP:
	SETB	VSDA
	SETB	VSCL
	MOV	C,VSDA
	MOV	A,R2
	RLC	A
	MOV	R2,A
	CLR	VSCL
	DJNZ	R0,RLP
	RET
;---------------------------------------------------------
;	向EEPROM中写入 N 个字节数据子程序
;	入口:NUMBYT--要写入的字节数
;	      MTD--要写入数据在RAM缓存区中的首地址
;---------------------------------------------------------		
WRNBYT:
	MOV	R3,NUMBYT
	LCALL	STA
	MOV	A,SLA
	LCALL	WRBYT		;送出写命令。
	LCALL	CACK
	JB	F0,WRNBYT
	MOV	R1,#MTD
WRDA:
	MOV	A,@R1		;取出要写的数据。
	LCALL	WRBYT		;执行写操作。
	LCALL	CACK
	JB	F0,WRNBYT
	INC	R1
	DJNZ	R3,WRDA
	LCALL	STOP
	RET
;---------------------------------------------------------
;	从EEPROM中读出 N 个字节数据子程序
;	入口:NUMBYT--要读出的字节数
;	      MRD--读出的数据在RAM缓存区中存放的首地址
;---------------------------------------------------------	
RDNBYT:
	MOV	R3,NUMBYT
	LCALL	STA
	MOV	A,SLA
	LCALL	WRBYT		;送出读命令。
	LCALL	CACK
	JB	F0,RDNBYT
RDN:
	MOV	R1,#MRD
RDN1:
	LCALL	RDBYT		;读出数据。
	MOV	@R1,A		;存放数据。
	DJNZ	R3,ACK
	LCALL	MNACK
	LCALL	STOP
	RET
ACK:
	LCALL	MACK
	INC	R1
	SJMP	RDN1

;-----------------------------------------------------------

	END		

⌨️ 快捷键说明

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