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

📄 at24d02芯片的读程序.txt

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

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

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

	mov	CURR_NUM,#00H
	;open beep
	clr	BEEP

	;read date from EEPROM
	mov	dptr,#0700H
	call	GET_ROM_ONE
	;mov	CURR_NUM,a

	;close beep
	setb	BEEP

MAIN_LOOP:
	call	DISPLAY_NUM
	jmp	MAIN_LOOP

	ret
;********************************************************
GET_ROM_ONE:
	push	DPL
	push	DPH

	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

	;start
	clr	EEPROM_SCL
	setb	EEPROM_SDA
	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 1,the tag of read
	setb	EEPROM_SDA	;send 1
	setb	EEPROM_SCL
	clr	EEPROM_SCL

	/*wait for ACK*/
	setb	EEPROM_SDA
	setb	EEPROM_SCL

ACK_READ_DEVICE:
	mov	c,EEPROM_SDA
	jc	ACK_READ_DEVICE
	/*Read byte from EEPROM*/
	clr	EEPROM_SCL
	mov	B,#08H

READ_DATA_LOOP:
	RL	A	;read 1_bit to	acc.0
	setb	EEPROM_SDA
	setb	EEPROM_SCL
	mov	c,EEPROM_SDA
	mov	acc.0,c
	clr	EEPROM_SCL
	djnz	B,READ_DATA_LOOP

	mov	CURR_NUM,A

	setb	EEPROM_SDA
	setb	EEPROM_SCL
	;stop
	clr	EEPROM_SCL
	clr	EEPROM_SDA
	setb	EEPROM_SCL
	setb	EEPROM_SDA

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

	;pop	acc
	pop	DPH
	pop	DPL

	ret
;************************************************************
DISPLAY_NUM:
	mov	a,CURR_NUM
	mov	b,#0AH
	div	ab
	mov	R0,a

	mov	a,b
	mov	dptr,#TAB_LED
	movc	a,@a+dptr

	mov	p0,a
	mov	p2,#11111011B
	call	DELAY_DISP

	mov	a,R0
	mov	dptr,#TAB_LED
	movc	a,@a+dptr

	mov	p0,a
	mov	p2,#11110111B
	call	DELAY_DISP

	ret
;***********************************************************
DELAY:
	mov	R7,#200

DELAY_LOOP:
	mov	R6,#200
	djnz	R6,$
	mov	R6,#200
	djnz	R6,$

	djnz	R7,DELAY_LOOP

DELAY_DISP:
	mov	R7,#10
DELAY_DISP_LOOP:
	mov	R6,#200
	djnz	R6,$
	mov	R6,#200
	djnz	R6,$

	djnz	R7,DELAY_DISP_LOOP

	ret 
;*************************************************************
TAB_LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;***********************************************************
	END

⌨️ 快捷键说明

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