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

📄 at24d02芯片的写程序.txt

📁 关于单片机中流水线处理,红绿灯转化等实验
💻 TXT
字号:
	EEPROM_SCL	EQU	p3.2
	EEPROM_SDA	EQU	p3.4

	BEEP		EQU	p2.0
	WRITE_NUM	EQU	70H	;HEX
;***********************************************
	org	0000H
	jmp	MAIN
;***************************************************
	org	0030H

 MAIN:
	mov	p0,#0FFH
	mov	p1,#0FFH
	mov	p2,#0FFH
	mov	P3,#0FFH

	mov	WRITE_NUM,#00H
	;open beep
	clr	BEEP

	mov	dptr,#0700H
	mov	WRITE_NUM,#10
	call	WRITE_ROM_ONE

	mov	dptr,#0701H
	mov	WRITE_NUM,#03
	call	WRITE_ROM_ONE

	mov	dptr,#0702H
	mov	WRITE_NUM,#39
	call	WRITE_ROM_ONE

	mov	dptr,#0703H
	mov	WRITE_NUM,#56
	call	WRITE_ROM_ONE

	mov	dptr,#0704H
	mov	WRITE_NUM,#89
	call	WRITE_ROM_ONE

	;stop beep
	setb	BEEP
	jmp	$

	ret
;***************************************************
WRITE_ROM_ONE:
	push	DPL
	push	DPH
	push	acc

	setb	EEPROM_SDA	;strat
	setb	EEPROM_SCL	
	clr	EEPROM_SDA
	clr	EEPROM_SCL

	;send control word
	setb	EEPROM_SDA	;send 1
	setb	EEPROM_SCL
	clr	EEPROM_SCL

	clr	EEPROM_SDA	;send 0
	setb	EEPROM_SCL
	clr	EEPROM_SCL

	setb	EEPROM_SDA	;send 1
	setb	EEPROM_SCL
	clr	EEPROM_SCL

	clr	EEPROM_SDA	;send 0
	setb	EEPROM_SCL
	clr	EEPROM_SCL

	/*send device address A2*/
	mov	a,dph		;send 1
	mov	c,acc.2
	mov	EEPROM_SDA,c
	setb	EEPROM_SCL
	clr	EEPROM_SCL

	/*send device address A1*/
	mov	a,dph		;send 1
	mov	c,acc.1
	mov	EEPROM_SDA,c
	setb	EEPROM_SCL
	clr	EEPROM_SCL

	/*send device address A0*/
	mov	a,dph		;send 1
	mov	c,acc.0
	mov	EEPROM_SDA,c
	setb	EEPROM_SCL
	clr	EEPROM_SCL

	;send 0,the tag of write
	clr	EEPROM_SDA	;send 0
	setb	EEPROM_SCL
	clr	EEPROM_SCL

	/*wait for ACK*/
	setb	EEPROM_SDA
	setb	EEPROM_SCL

	ACK_WRITE_DEVICE:
	mov	c,EEPROM_SDA
	jc	ACK_WRITE_DEVICE
	;send 8-bit date word address following the device address
	clr	EEPROM_SCL
	mov	A,dpl
	mov	B,#08H		
WORD_ADDR_LOOP:
	mov	c,acc.7
	mov	EEPROM_SDA,c
	setb	EEPROM_SCL
	clr	EEPROM_SCL
	RL	A
	djnz	B,WORD_ADDR_LOOP

	;wait for acr
	setb	EEPROM_SDA
	setb	EEPROM_SCL

ACK_WRITE_ADDRESS:
	mov	c,EEPROM_SDA
	jc	ACK_WRITE_ADDRESS

	clr	EEPROM_SCL
	mov	A,WRITE_NUM
	mov	B,#08H
	/*write data*/
WRITE_DATA_LOOP:
	mov	c,acc.7
	mov	EEPROM_SDA,c
	setb	EEPROM_SCL
	clr	EEPROM_SCL
	RL	A
	djnz	B,WRITE_DATA_LOOP

	;wait for acr
	setb	EEPROM_SDA
	setb	EEPROM_SCL

ACK_WRITE_DATA:
	mov	c,EEPROM_SDA
	jc	ACK_WRITE_DATA
	;stop
	clr	EEPROM_SCL
	clr	EEPROM_SDA
	setb	EEPROM_SCL
	setb	EEPROM_SDA

	/*send high when pin is idle*/
	setb	EEPROM_SCL
	setb	EEPROM_SDA

	pop	acc
	pop	dph
	pop	dpl

	call	DELAY1

	ret
;********************************************
DELAY1:
	mov	R2,#00H
DELAY11:
	mov	R3,#0E0H
	djnz	R3,$
	djnz	R2,DELAY11

	ret
;*********************************************
	END

⌨️ 快捷键说明

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