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

📄 at24c16.c

📁 串行E2PROM存储器驱动程序
💻 C
字号:
;注意时序,时间要求
SDA	EQU	P1.1
SCL	EQU	P1.3
	ORG	0
	LJMP	START1
START:  MOV	R0,#40H
	MOV	A,#46H
FF:	MOV	@R0,A
   	INC	R0
        DEC	A
        JNZ	FF
        MOV	DPH,#2
        MOV	DPL,#1
        MOV	R2,#16
        MOV	R0,#40H
	LCALL   WR16
DDD:	SJMP	DDD

START1:	MOV	DPH,#2
	MOV	DPL,#1
	MOV	R2,#16
	MOV	R0,#41H
	LCALL	RD16
	SJMP	DDD
;----------------------------------------------------------
;WR16子程序:写多字节到24C16
;入口参数:DPH:页地址,DPL:单元地址,R2:写入个数,R0:写入数据起址
;----------------------------------------------------------
WR16:	CLR	SCL
	SETB	SDA
        SETB    SCL
        CLR	SDA		;启动,注意时间要求
WR16A:  MOV	A,DPH
	RL	A
        ORL	A,#0A0H
        LCALL	SDBYTE          ;送写命令
        CLR	SCL
        SETB	SDA
        SETB	SCL
        JB  	SDA,WR16A       ;是否响应
WR16B:  MOV	A,DPL
        LCALL   SDBYTE          ;送单元地址
        CLR	SCL
        SETB	SDA
        SETB	SCL
        JB  	SDA,WR16B       ;是否响应
WR16C:  MOV	A,@R0
	LCALL	SDBYTE
        CLR	SCL
        SETB	SDA
        SETB	SCL
        JB  	SDA,WR16C
        INC	R0
        DJNZ	R2,WR16C       ;页写入
        CLR	SCL
        CLR	SDA
        SETB	SCL
        SETB	SDA            ;停止
        RET
;----------------------------------------------------------
;RD16子程序:从24C16读多字节
;入口参数:DPH:页地址,DPL:单元地址,R2:读个数,R0:暂存数据起址
;----------------------------------------------------------
RD16:   CLR	SCL
	SETB	SDA
	SETB	SCL
        CLR	SDA		;开始
RD16A:  MOV	A,DPH
	RL	A
	ORL	A,#0A0H
        LCALL	SDBYTE          ;送写命令
        CLR	SCL
	SETB	SDA
        SETB	SCL
        JB	SDA,RD16A       ;响应
RD16B:  MOV	A,DPL
        LCALL	SDBYTE
        CLR	SCL
        SETB	SDA
        SETB	SCL
        JB	SDA,RD16B
	CLR	SCL
        SETB    SDA
        SETB	SCL
        CLR	SDA
RD16C:  MOV	A,DPH
	RL	A
        ORL	A,#0A1H
	LCALL	SDBYTE
	CLR	SCL
	SETB	SDA
	SETB	SCL
	JB	SDA,RD16C
RC1:    CLR	SCL
	SETB	SDA    		;读引脚
	LCALL   RCBYTE
	MOV	@R0,A
	INC 	R0
	CLR	SCL             ;----
	CLR	SDA
	SETB	SCL             ;应答
	DJNZ 	R2,RC1
	CLR 	SCL
	SETB	SDA
	SETB	SCL		;非应答
        CLR	SCL
        CLR	SDA
        SETB	SCL
        SETB	SDA             ;停止
        RET
;----------------------------------------------------------
;SDBYTE子程序:送一个字节到SDA
;入口参数:要传送的数A
;局部参数:R7
;----------------------------------------------------------
SDBYTE:	MOV R7,#8               ;R7控制循环次数
SL1:    CLR SCL                 ;置低SCL
        RLC A
	MOV SDA,C
	SETB SCL               	;给SCL一个上升沿
    	DJNZ R7,SL1
	RET
;----------------------------------------------------------
;RCBYTE子程序:从SO接收一个字节
;出口参数:接收到的字节A
;局部参数:R7
;----------------------------------------------------------
RCBYTE: MOV R7,#8       	;R7控制循环次数
RL1:    CLR  SCL
	SETB SCL
	MOV C,SDA		;读引脚
        RLC A
        DJNZ R7,RL1		;先接收低位
        RET

        END

⌨️ 快捷键说明

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